@webex/plugin-meetings 3.6.0-next.2 → 3.6.0-next.20
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/README.md +2 -1
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/common/errors/webinar-registration-error.js +50 -0
- package/dist/common/errors/webinar-registration-error.js.map +1 -0
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +31 -2
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +1 -0
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +10 -3
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +12 -0
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +28 -4
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +2 -1
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/index.js +61 -3
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/parser.js +5 -1
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +19 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +594 -431
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +5 -2
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +68 -17
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meetings/index.js +2 -1
- package/dist/meetings/index.js.map +1 -1
- package/dist/members/index.js +3 -2
- package/dist/members/index.js.map +1 -1
- package/dist/members/util.js +9 -5
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +2 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/remoteMedia.js +4 -0
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/reachability/index.js +3 -3
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +2 -1
- package/dist/reachability/request.js.map +1 -1
- package/dist/types/common/errors/webinar-registration-error.d.ts +14 -0
- package/dist/types/config.d.ts +1 -0
- package/dist/types/constants.d.ts +25 -0
- package/dist/types/controls-options-manager/enums.d.ts +2 -1
- package/dist/types/controls-options-manager/index.d.ts +2 -1
- package/dist/types/controls-options-manager/types.d.ts +2 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/locus-info/index.d.ts +9 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +18 -0
- package/dist/types/meeting/index.d.ts +12 -1
- package/dist/types/meeting/muteState.d.ts +2 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +23 -0
- package/dist/types/members/index.d.ts +2 -1
- package/dist/types/members/util.d.ts +3 -1
- package/dist/types/metrics/constants.d.ts +1 -0
- package/dist/types/multistream/remoteMedia.d.ts +1 -0
- package/dist/webinar/index.js +32 -19
- package/dist/webinar/index.js.map +1 -1
- package/package.json +22 -22
- package/src/common/errors/webinar-registration-error.ts +27 -0
- package/src/config.ts +1 -0
- package/src/constants.ts +31 -0
- package/src/controls-options-manager/enums.ts +1 -0
- package/src/controls-options-manager/index.ts +19 -2
- package/src/controls-options-manager/types.ts +2 -0
- package/src/controls-options-manager/util.ts +12 -0
- package/src/index.ts +2 -0
- package/src/locus-info/controlsUtils.ts +46 -2
- package/src/locus-info/fullState.ts +1 -0
- package/src/locus-info/index.ts +60 -0
- package/src/locus-info/parser.ts +8 -1
- package/src/meeting/in-meeting-actions.ts +37 -0
- package/src/meeting/index.ts +139 -20
- package/src/meeting/muteState.ts +6 -2
- package/src/meeting-info/meeting-info-v2.ts +51 -0
- package/src/meetings/index.ts +3 -1
- package/src/members/index.ts +4 -2
- package/src/members/util.ts +3 -1
- package/src/metrics/constants.ts +1 -0
- package/src/multistream/remoteMedia.ts +5 -0
- package/src/reachability/index.ts +3 -3
- package/src/reachability/request.ts +1 -0
- package/src/webinar/index.ts +31 -17
- package/test/unit/spec/controls-options-manager/index.js +56 -32
- package/test/unit/spec/controls-options-manager/util.js +44 -0
- package/test/unit/spec/locus-info/controlsUtils.js +80 -4
- package/test/unit/spec/locus-info/index.js +88 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +18 -0
- package/test/unit/spec/meeting/index.js +263 -64
- package/test/unit/spec/meeting/muteState.js +8 -4
- package/test/unit/spec/meeting-info/meetinginfov2.js +37 -0
- package/test/unit/spec/members/index.js +25 -2
- package/test/unit/spec/members/request.js +37 -3
- package/test/unit/spec/members/utils.js +15 -1
- package/test/unit/spec/multistream/remoteMedia.ts +16 -2
- package/test/unit/spec/reachability/index.ts +1 -1
- package/test/unit/spec/reachability/request.js +13 -8
- package/test/unit/spec/webinar/index.ts +82 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_lodash","require","_common","_loggerProxy","_interopRequireDefault","_util","_constants","_request","_clusterReachability","_eventsScope","_constants2","_metrics","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","DEFAULT_TIMEOUT","VIDEO_MESH_TIMEOUT","OVERALL_TIMEOUT","Reachability","exports","_EventsScope","_inherits2","_super","webex","_this","_classCallCheck2","_assertThisInitialized2","REACHABILITY","namespace","videoMesh","udp","public","tcp","xtls","reachabilityRequest","ReachabilityRequest","clusterReachability","_createClass2","key","value","_getClusters","_asyncToGenerator2","_regenerator","mark","_callee","isRetry","_yield$this$reachabil","clusters","joinCookie","_args","wrap","_callee$","_context","prev","next","undefined","getClusters","MeetingUtil","getIpVersion","sent","abrupt","t0","LoggerProxy","logger","error","concat","stop","_gatherReachability","_callee2","trigger","_yield$this$getCluste","_callee2$","_context2","lastTrigger","internal","device","ipNetworkDetector","detect","boundedStorage","put","localStorageJoinCookie","_stringify","reachabilityDefer","Defer","performReachabilityChecks","promise","gatherReachability","_x","_getReachabilityMetrics","_callee3","stats","updateStats","resultsJson","results","_callee3$","_context3","reachability_public_udp_success","reachability_public_udp_failed","reachability_public_tcp_success","reachability_public_tcp_failed","reachability_public_xtls_success","reachability_public_xtls_failed","reachability_vmn_udp_success","reachability_vmn_udp_failed","reachability_vmn_tcp_success","reachability_vmn_tcp_failed","reachability_vmn_xtls_success","reachability_vmn_xtls_failed","clusterType","outcome","get","localStorageResult","JSON","parse","_values","isVideoMesh","warn","getReachabilityMetrics","mapTransportResultToBackendDataFormat","transportResult","output","_i","_Object$entries","_entries","_Object$entries$_i","_slicedToArray2","reachable","untested","latencyInMilliseconds","toString","_getReachabilityResults","_callee4","_this2","allClusterResults","_callee4$","_context4","mapValues","clusterResult","getReachabilityResults","_isAnyPublicClusterReachable","_callee5","reachabilityData","reachabilityResults","_callee5$","_context5","catch","some","_result$udp","_result$tcp","isAnyPublicClusterReachable","_isWebexMediaBackendUnreachable","_callee6","unreachable","protocols","_callee6$","_context6","tested","_keys","protocol","_result$protocol","_result$protocol2","every","isWebexMediaBackendUnreachable","getUnreachableClusters","unreachableList","_ref","_ref2","getResult","name","logUnreachableClusters","list","_ref3","log","areAllPublicClusterResultsReady","isEqual","expectedResultsCount","resultsCount","areAllResultsReady","resolveReachabilityPromise","_this$reachabilityDef","vmnTimer","clearTimeout","publicCloudTimer","resolve","abortClusterReachability","abort","getStatistics","values","map","min","max","average","Math","_toConsumableArray2","mean","_sendMetric","_callee7","_callee7$","_context7","vmn","ipver","firstIpV4","firstIpV6","firstMdns","totalTime","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","REACHABILITY_COMPLETED","prepareMetricFields","sendMetric","startTimers","_this3","setTimeout","overallTimer","emit","file","function","_storeResults","_callee8","_callee8$","_context8","storeResults","_x2","resetResultCounters","_performReachabilityChecks","_callee11","clusterList","_this4","isFirstResult","_callee11$","_context11","config","meetings","experimental","enableTcpReachability","enableTlsReachability","cluster","includeTcpReachability","includeTlsReachability","ClusterReachability","on","Events","resultReady","_ref4","_callee9","data","clientMediaIPs","_callee9$","_context9","_x4","clientMediaIpsUpdated","_ref5","_callee10","_callee10$","_context10","_x5","start","_x3","EventsScope"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable class-methods-use-this */\nimport {isEqual, mapValues, mean} from 'lodash';\n\nimport {Defer} from '@webex/common';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport {REACHABILITY} from '../constants';\n\nimport ReachabilityRequest, {ClusterList} from './request';\nimport {\n ClientMediaIpsUpdatedEventData,\n ClusterReachability,\n ClusterReachabilityResult,\n Events,\n ResultEventData,\n TransportResult,\n} from './clusterReachability';\nimport EventsScope from '../common/events/events-scope';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport Metrics from '../metrics';\n\nexport type ReachabilityMetrics = {\n reachability_public_udp_success: number;\n reachability_public_udp_failed: number;\n reachability_public_tcp_success: number;\n reachability_public_tcp_failed: number;\n reachability_public_xtls_success: number;\n reachability_public_xtls_failed: number;\n reachability_vmn_udp_success: number;\n reachability_vmn_udp_failed: number;\n reachability_vmn_tcp_success: number;\n reachability_vmn_tcp_failed: number;\n reachability_vmn_xtls_success: number;\n reachability_vmn_xtls_failed: number;\n};\n\n/**\n * This is the type that matches what backend expects us to send to them. It is a bit weird, because\n * it uses strings instead of booleans and numbers, but that's what they require.\n */\nexport type TransportResultForBackend = {\n reachable?: 'true' | 'false';\n latencyInMilliseconds?: string;\n clientMediaIPs?: string[];\n untested?: 'true';\n};\n\nexport type ReachabilityResultForBackend = {\n udp: TransportResultForBackend;\n tcp: TransportResultForBackend;\n xtls: TransportResultForBackend;\n};\n\n// this is the type that is required by the backend when we send them reachability results\nexport type ReachabilityResultsForBackend = Record<string, ReachabilityResultForBackend>;\n\n// this is the type used by Reachability class internally and stored in local storage\nexport type ReachabilityResults = Record<\n string,\n ClusterReachabilityResult & {\n isVideoMesh?: boolean;\n }\n>;\n\n// timeouts in seconds\nconst DEFAULT_TIMEOUT = 3;\nconst VIDEO_MESH_TIMEOUT = 1;\nconst OVERALL_TIMEOUT = 15;\n\n/**\n * @class Reachability\n * @export\n */\nexport default class Reachability extends EventsScope {\n namespace = REACHABILITY.namespace;\n webex: object;\n reachabilityRequest: ReachabilityRequest;\n clusterReachability: {\n [key: string]: ClusterReachability;\n };\n\n reachabilityDefer?: Defer;\n\n vmnTimer?: ReturnType<typeof setTimeout>;\n publicCloudTimer?: ReturnType<typeof setTimeout>;\n overallTimer?: ReturnType<typeof setTimeout>;\n\n expectedResultsCount = {videoMesh: {udp: 0}, public: {udp: 0, tcp: 0, xtls: 0}};\n resultsCount = {videoMesh: {udp: 0}, public: {udp: 0, tcp: 0, xtls: 0}};\n\n protected lastTrigger?: string;\n\n /**\n * Creates an instance of Reachability.\n * @param {object} webex\n * @memberof Reachability\n */\n constructor(webex: object) {\n super();\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 this.clusterReachability = {};\n }\n\n /**\n * Fetches the list of media clusters from the backend\n * @param {boolean} isRetry\n * @private\n * @returns {Promise<{clusters: ClusterList, joinCookie: any}>}\n */\n async getClusters(isRetry = false): Promise<{clusters: ClusterList; joinCookie: any}> {\n try {\n const {clusters, joinCookie} = await this.reachabilityRequest.getClusters(\n MeetingUtil.getIpVersion(this.webex)\n );\n\n return {clusters, joinCookie};\n } catch (error) {\n if (isRetry) {\n throw error;\n }\n\n LoggerProxy.logger.error(\n `Reachability:index#getClusters --> Failed with error: ${error}, retrying...`\n );\n\n return this.getClusters(true);\n }\n }\n\n /**\n * Gets a list of media clusters from the backend and performs reachability checks on all the clusters\n * @param {string} trigger - explains the reason for starting reachability\n * @returns {Promise<ReachabilityResults>} reachability results\n * @public\n * @memberof Reachability\n */\n public async gatherReachability(trigger: string): Promise<ReachabilityResults> {\n // Fetch clusters and measure latency\n try {\n this.lastTrigger = trigger;\n\n // kick off ip version detection. For now we don't await it, as we're doing it\n // to gather the timings and send them with our reachability metrics\n // @ts-ignore\n this.webex.internal.device.ipNetworkDetector.detect();\n\n const {clusters, joinCookie} = await this.getClusters();\n\n // @ts-ignore\n await this.webex.boundedStorage.put(\n this.namespace,\n REACHABILITY.localStorageJoinCookie,\n JSON.stringify(joinCookie)\n );\n\n this.reachabilityDefer = new Defer();\n\n // Perform Reachability Check\n await this.performReachabilityChecks(clusters);\n\n return this.reachabilityDefer.promise;\n } catch (error) {\n LoggerProxy.logger.error(`Reachability:index#gatherReachability --> Error:`, error);\n\n return {};\n }\n }\n\n /**\n * Returns statistics about last reachability results. The returned value is an object\n * with a flat list of properties so that it can be easily sent with metrics\n *\n * @returns {Promise} Promise with metrics values, it never rejects/throws.\n */\n async getReachabilityMetrics(): Promise<ReachabilityMetrics> {\n const stats: ReachabilityMetrics = {\n reachability_public_udp_success: 0,\n reachability_public_udp_failed: 0,\n reachability_public_tcp_success: 0,\n reachability_public_tcp_failed: 0,\n reachability_public_xtls_success: 0,\n reachability_public_xtls_failed: 0,\n reachability_vmn_udp_success: 0,\n reachability_vmn_udp_failed: 0,\n reachability_vmn_tcp_success: 0,\n reachability_vmn_tcp_failed: 0,\n reachability_vmn_xtls_success: 0,\n reachability_vmn_xtls_failed: 0,\n };\n\n const updateStats = (clusterType: 'public' | 'vmn', result: ClusterReachabilityResult) => {\n if (result.udp && result.udp.result !== 'untested') {\n const outcome = result.udp.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_udp_${outcome}`] += 1;\n }\n if (result.tcp && result.tcp.result !== 'untested') {\n const outcome = result.tcp.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_tcp_${outcome}`] += 1;\n }\n if (result.xtls && result.xtls.result !== 'untested') {\n const outcome = result.xtls.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_xtls_${outcome}`] += 1;\n }\n };\n\n try {\n // @ts-ignore\n const resultsJson = await this.webex.boundedStorage.get(\n REACHABILITY.namespace,\n REACHABILITY.localStorageResult\n );\n\n const results: ReachabilityResults = JSON.parse(resultsJson);\n\n Object.values(results).forEach((result) => {\n updateStats(result.isVideoMesh ? 'vmn' : 'public', result);\n });\n } catch (e) {\n // empty storage, that's ok\n LoggerProxy.logger.warn(\n 'Roap:request#getReachabilityMetrics --> Error parsing reachability data: ',\n e\n );\n }\n\n return stats;\n }\n\n /**\n * Maps our internal transport result to the format that backend expects\n * @param {TransportResult} transportResult\n * @returns {TransportResultForBackend}\n */\n private mapTransportResultToBackendDataFormat(\n transportResult: TransportResult\n ): TransportResultForBackend {\n const output: TransportResultForBackend = {};\n\n for (const [key, value] of Object.entries(transportResult)) {\n switch (key) {\n case 'result':\n switch (value) {\n case 'reachable':\n output.reachable = 'true';\n break;\n case 'unreachable':\n output.reachable = 'false';\n break;\n case 'untested':\n output.untested = 'true';\n break;\n }\n break;\n case 'latencyInMilliseconds':\n output.latencyInMilliseconds = value.toString();\n break;\n default:\n output[key] = value;\n }\n }\n\n return output;\n }\n\n /**\n * Reachability results as an object in the format that backend expects\n *\n * @returns {any} reachability results that need to be sent to the backend\n */\n async getReachabilityResults(): Promise<ReachabilityResultsForBackend | undefined> {\n let results: ReachabilityResultsForBackend;\n\n try {\n // @ts-ignore\n const resultsJson = await this.webex.boundedStorage.get(\n REACHABILITY.namespace,\n REACHABILITY.localStorageResult\n );\n\n const allClusterResults: ReachabilityResults = JSON.parse(resultsJson);\n\n results = mapValues(allClusterResults, (clusterResult) => ({\n udp: this.mapTransportResultToBackendDataFormat(clusterResult.udp || {result: 'untested'}),\n tcp: this.mapTransportResultToBackendDataFormat(clusterResult.tcp || {result: 'untested'}),\n xtls: this.mapTransportResultToBackendDataFormat(\n clusterResult.xtls || {result: 'untested'}\n ),\n }));\n } catch (e) {\n // empty storage, that's ok\n LoggerProxy.logger.warn(\n 'Roap:request#attachReachabilityData --> Error parsing reachability data: ',\n e\n );\n }\n\n return results;\n }\n\n /**\n * fetches reachability data and checks for cluster reachability\n * @returns {boolean}\n * @public\n * @memberof Reachability\n */\n async isAnyPublicClusterReachable() {\n let reachable = false;\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(this.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResults: ReachabilityResults = JSON.parse(reachabilityData);\n\n reachable = Object.values(reachabilityResults).some(\n (result) =>\n !result.isVideoMesh &&\n (result.udp?.result === 'reachable' || result.tcp?.result === 'reachable')\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 * Returns true only if ALL protocols (UDP, TCP and TLS) have been tested and none\n * of the media clusters where reachable with any of the protocols. This is done\n * irrespective of the config, so for example:\n * if config.meetings.experimental.enableTlsReachability === false,\n * it will return false, because TLS reachability won't be tested,\n * so we can't say for sure that media backend is unreachable over TLS.\n *\n * @returns {boolean}\n */\n async isWebexMediaBackendUnreachable() {\n let unreachable = false;\n\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(this.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResults: ReachabilityResults = JSON.parse(reachabilityData);\n\n const protocols = {\n udp: {tested: false, reachable: undefined},\n tcp: {tested: false, reachable: undefined},\n xtls: {tested: false, reachable: undefined},\n };\n\n Object.values(reachabilityResults).forEach((result) => {\n Object.keys(protocols).forEach((protocol) => {\n if (\n result[protocol]?.result === 'reachable' ||\n result[protocol]?.result === 'unreachable'\n ) {\n protocols[protocol].tested = true;\n\n // we need at least 1 'reachable' result to mark the whole protocol as reachable\n if (result[protocol].result === 'reachable') {\n protocols[protocol].reachable = true;\n }\n }\n });\n });\n\n unreachable = Object.values(protocols).every(\n (protocol) => protocol.tested && !protocol.reachable\n );\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return unreachable;\n }\n\n /**\n * Get list of all unreachable clusters\n * @returns {array} Unreachable clusters\n * @private\n * @memberof Reachability\n */\n private getUnreachableClusters(): Array<{name: string; protocol: string}> {\n const unreachableList = [];\n\n Object.entries(this.clusterReachability).forEach(([key, clusterReachability]) => {\n const result = clusterReachability.getResult();\n\n if (result.udp.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'udp'});\n }\n if (result.tcp.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'tcp'});\n }\n if (result.xtls.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'xtls'});\n }\n });\n\n return unreachableList;\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.getUnreachableClusters();\n\n list.forEach(({name, protocol}) => {\n LoggerProxy.logger.log(\n `Reachability:index#logUnreachableClusters --> failed to reach ${name} over ${protocol}`\n );\n });\n }\n\n /**\n * Returns true if we've obtained all the reachability results for all the public clusters\n * In other words, it means that all public clusters are reachable over each protocol,\n * because we only get a \"result\" if we managed to reach a cluster\n *\n * @returns {boolean}\n */\n private areAllPublicClusterResultsReady() {\n return isEqual(this.expectedResultsCount.public, this.resultsCount.public);\n }\n\n /**\n * Returns true if we've obtained all the reachability results for all the clusters\n *\n * @returns {boolean}\n */\n private areAllResultsReady() {\n return isEqual(this.expectedResultsCount, this.resultsCount);\n }\n\n /**\n * Resolves the promise returned by gatherReachability() method\n * @returns {void}\n */\n private resolveReachabilityPromise() {\n if (this.vmnTimer) {\n clearTimeout(this.vmnTimer);\n }\n if (this.publicCloudTimer) {\n clearTimeout(this.publicCloudTimer);\n }\n\n this.logUnreachableClusters();\n this.reachabilityDefer?.resolve();\n }\n\n /**\n * Aborts all cluster reachability checks that are in progress\n *\n * @returns {void}\n */\n private abortClusterReachability() {\n Object.values(this.clusterReachability).forEach((clusterReachability) => {\n clusterReachability.abort();\n });\n }\n\n /**\n * Helper function for calculating min/max/average values of latency\n *\n * @param {Array<any>} results\n * @param {string} protocol\n * @param {boolean} isVideoMesh\n * @returns {{min:number, max: number, average: number}}\n */\n protected getStatistics(\n results: Array<ClusterReachabilityResult & {isVideoMesh: boolean}>,\n protocol: 'udp' | 'tcp' | 'xtls',\n isVideoMesh: boolean\n ) {\n const values = results\n .filter((result) => result.isVideoMesh === isVideoMesh)\n .filter((result) => result[protocol].result === 'reachable')\n .map((result) => result[protocol].latencyInMilliseconds);\n\n if (values.length === 0) {\n return {\n min: -1,\n max: -1,\n average: -1,\n };\n }\n\n return {\n min: Math.min(...values),\n max: Math.max(...values),\n average: mean(values),\n };\n }\n\n /**\n * Sends a metric with all the statistics about how long reachability took\n *\n * @returns {void}\n */\n protected async sendMetric() {\n const results = [];\n\n Object.values(this.clusterReachability).forEach((clusterReachability) => {\n results.push({\n ...clusterReachability.getResult(),\n isVideoMesh: clusterReachability.isVideoMesh,\n });\n });\n\n const stats = {\n vmn: {\n udp: this.getStatistics(results, 'udp', true),\n },\n public: {\n udp: this.getStatistics(results, 'udp', false),\n tcp: this.getStatistics(results, 'tcp', false),\n xtls: this.getStatistics(results, 'xtls', false),\n },\n ipver: {\n // @ts-ignore\n firstIpV4: this.webex.internal.device.ipNetworkDetector.firstIpV4,\n // @ts-ignore\n firstIpV6: this.webex.internal.device.ipNetworkDetector.firstIpV6,\n // @ts-ignore\n firstMdns: this.webex.internal.device.ipNetworkDetector.firstMdns,\n // @ts-ignore\n totalTime: this.webex.internal.device.ipNetworkDetector.totalTime,\n },\n trigger: this.lastTrigger,\n };\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.REACHABILITY_COMPLETED,\n Metrics.prepareMetricFields(stats)\n );\n }\n\n /**\n * Starts all the timers used for various timeouts\n *\n * @returns {void}\n */\n private startTimers() {\n this.vmnTimer = setTimeout(() => {\n this.vmnTimer = undefined;\n // if we are only missing VMN results, then we don't want to wait for them any longer\n // as they are likely to fail if users are not on corporate network\n if (this.areAllPublicClusterResultsReady()) {\n LoggerProxy.logger.log(\n 'Reachability:index#startTimers --> Reachability checks timed out (VMN timeout)'\n );\n\n this.resolveReachabilityPromise();\n }\n }, VIDEO_MESH_TIMEOUT * 1000);\n\n this.publicCloudTimer = setTimeout(() => {\n this.publicCloudTimer = undefined;\n\n LoggerProxy.logger.log(\n `Reachability:index#startTimers --> Reachability checks timed out (${DEFAULT_TIMEOUT}s)`\n );\n\n // resolve the promise, so that the client won't be blocked waiting on meetings.register() for too long\n this.resolveReachabilityPromise();\n }, DEFAULT_TIMEOUT * 1000);\n\n this.overallTimer = setTimeout(() => {\n this.overallTimer = undefined;\n this.abortClusterReachability();\n this.emit(\n {\n file: 'reachability',\n function: 'overallTimer timeout',\n },\n 'reachability:done',\n {}\n );\n this.sendMetric();\n\n LoggerProxy.logger.log(\n `Reachability:index#startTimers --> Reachability checks fully timed out (${OVERALL_TIMEOUT}s)`\n );\n }, OVERALL_TIMEOUT * 1000);\n }\n\n /**\n * Stores given reachability results in local storage\n *\n * @param {ReachabilityResults} results\n * @returns {Promise<void>}\n */\n private async storeResults(results: ReachabilityResults) {\n // @ts-ignore\n await this.webex.boundedStorage.put(\n this.namespace,\n REACHABILITY.localStorageResult,\n JSON.stringify(results)\n );\n }\n\n /**\n * Resets all the internal counters that keep track of the results\n *\n * @returns {void}\n */\n private resetResultCounters() {\n this.expectedResultsCount.videoMesh.udp = 0;\n this.expectedResultsCount.public.udp = 0;\n this.expectedResultsCount.public.tcp = 0;\n this.expectedResultsCount.public.xtls = 0;\n\n this.resultsCount.videoMesh.udp = 0;\n this.resultsCount.public.udp = 0;\n this.resultsCount.public.tcp = 0;\n this.resultsCount.public.xtls = 0;\n }\n\n /**\n * Performs reachability checks for all clusters\n * @param {ClusterList} clusterList\n * @returns {Promise<void>} promise that's resolved as soon as the checks are started\n */\n private async performReachabilityChecks(clusterList: ClusterList) {\n const results: ReachabilityResults = {};\n\n this.clusterReachability = {};\n\n if (!clusterList || !Object.keys(clusterList).length) {\n return;\n }\n\n LoggerProxy.logger.log(\n `Reachability:index#performReachabilityChecks --> doing UDP${\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTcpReachability ? ',TCP' : ''\n }${\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTlsReachability ? ',TLS' : ''\n } reachability checks`\n );\n\n this.resetResultCounters();\n this.startTimers();\n\n // sanitize the urls in the clusterList\n Object.keys(clusterList).forEach((key) => {\n const cluster = clusterList[key];\n\n // Linus doesn't support TCP reachability checks on video mesh nodes\n const includeTcpReachability =\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTcpReachability && !cluster.isVideoMesh;\n\n if (!includeTcpReachability) {\n cluster.tcp = [];\n }\n\n // Linus doesn't support xTLS reachability checks on video mesh nodes\n const includeTlsReachability =\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTlsReachability && !cluster.isVideoMesh;\n\n if (!includeTlsReachability) {\n cluster.xtls = [];\n }\n\n // initialize the result for this cluster\n results[key] = {\n udp: {result: cluster.udp.length > 0 ? 'unreachable' : 'untested'},\n tcp: {result: cluster.tcp.length > 0 ? 'unreachable' : 'untested'},\n xtls: {result: cluster.xtls.length > 0 ? 'unreachable' : 'untested'},\n isVideoMesh: cluster.isVideoMesh,\n };\n\n // update expected results counters to include this cluster\n this.expectedResultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'].udp +=\n cluster.udp.length;\n if (!cluster.isVideoMesh) {\n this.expectedResultsCount.public.tcp += cluster.tcp.length;\n this.expectedResultsCount.public.xtls += cluster.xtls.length;\n }\n });\n\n const isFirstResult = {\n udp: true,\n tcp: true,\n xtls: true,\n };\n\n // save the initialized results (in case we don't get any \"resultReady\" events at all)\n await this.storeResults(results);\n\n // now start the reachability on all the clusters\n Object.keys(clusterList).forEach((key) => {\n const cluster = clusterList[key];\n\n this.clusterReachability[key] = new ClusterReachability(key, cluster);\n this.clusterReachability[key].on(Events.resultReady, async (data: ResultEventData) => {\n const {protocol, result, clientMediaIPs, latencyInMilliseconds} = data;\n\n if (isFirstResult[protocol]) {\n this.emit(\n {\n file: 'reachability',\n function: 'resultReady event handler',\n },\n 'reachability:firstResultAvailable',\n {\n protocol,\n }\n );\n isFirstResult[protocol] = false;\n }\n this.resultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'][protocol] += 1;\n\n const areAllResultsReady = this.areAllResultsReady();\n\n results[key][protocol].result = result;\n results[key][protocol].clientMediaIPs = clientMediaIPs;\n results[key][protocol].latencyInMilliseconds = latencyInMilliseconds;\n\n await this.storeResults(results);\n\n if (areAllResultsReady) {\n clearTimeout(this.overallTimer);\n this.overallTimer = undefined;\n this.emit(\n {\n file: 'reachability',\n function: 'performReachabilityChecks',\n },\n 'reachability:done',\n {}\n );\n this.sendMetric();\n\n LoggerProxy.logger.log(\n `Reachability:index#gatherReachability --> Reachability checks fully completed`\n );\n this.resolveReachabilityPromise();\n }\n });\n\n // clientMediaIps can be updated independently from the results, so we need to listen for them too\n this.clusterReachability[key].on(\n Events.clientMediaIpsUpdated,\n async (data: ClientMediaIpsUpdatedEventData) => {\n results[key][data.protocol].clientMediaIPs = data.clientMediaIPs;\n\n await this.storeResults(results);\n }\n );\n\n this.clusterReachability[key].start(); // not awaiting on purpose\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_lodash","require","_common","_loggerProxy","_interopRequireDefault","_util","_constants","_request","_clusterReachability","_eventsScope","_constants2","_metrics","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","DEFAULT_TIMEOUT","VIDEO_MESH_TIMEOUT","OVERALL_TIMEOUT","Reachability","exports","_EventsScope","_inherits2","_super","webex","_this","_classCallCheck2","_assertThisInitialized2","REACHABILITY","namespace","videoMesh","udp","public","tcp","xtls","reachabilityRequest","ReachabilityRequest","clusterReachability","_createClass2","key","value","_getClusters","_asyncToGenerator2","_regenerator","mark","_callee","isRetry","_yield$this$reachabil","clusters","joinCookie","_args","wrap","_callee$","_context","prev","next","undefined","getClusters","MeetingUtil","getIpVersion","sent","abrupt","t0","LoggerProxy","logger","error","concat","stop","_gatherReachability","_callee2","trigger","_yield$this$getCluste","_callee2$","_context2","lastTrigger","internal","device","ipNetworkDetector","detect","boundedStorage","put","localStorageJoinCookie","_stringify","reachabilityDefer","Defer","performReachabilityChecks","promise","gatherReachability","_x","_getReachabilityMetrics","_callee3","stats","updateStats","resultsJson","results","_callee3$","_context3","reachability_public_udp_success","reachability_public_udp_failed","reachability_public_tcp_success","reachability_public_tcp_failed","reachability_public_xtls_success","reachability_public_xtls_failed","reachability_vmn_udp_success","reachability_vmn_udp_failed","reachability_vmn_tcp_success","reachability_vmn_tcp_failed","reachability_vmn_xtls_success","reachability_vmn_xtls_failed","clusterType","outcome","get","localStorageResult","JSON","parse","_values","isVideoMesh","warn","getReachabilityMetrics","mapTransportResultToBackendDataFormat","transportResult","output","_i","_Object$entries","_entries","_Object$entries$_i","_slicedToArray2","reachable","untested","latencyInMilliseconds","toString","_getReachabilityResults","_callee4","_this2","allClusterResults","_callee4$","_context4","mapValues","clusterResult","getReachabilityResults","_isAnyPublicClusterReachable","_callee5","reachabilityData","reachabilityResults","_callee5$","_context5","catch","some","_result$udp","_result$tcp","isAnyPublicClusterReachable","_isWebexMediaBackendUnreachable","_callee6","unreachable","protocols","_callee6$","_context6","tested","_keys","protocol","_result$protocol","_result$protocol2","every","isWebexMediaBackendUnreachable","getUnreachableClusters","unreachableList","_ref","_ref2","getResult","name","logUnreachableClusters","list","_ref3","log","areAllPublicClusterResultsReady","isEqual","expectedResultsCount","resultsCount","areAllResultsReady","resolveReachabilityPromise","_this$reachabilityDef","vmnTimer","clearTimeout","publicCloudTimer","resolve","abortClusterReachability","abort","getStatistics","values","map","min","max","average","Math","_toConsumableArray2","mean","_sendMetric","_callee7","_callee7$","_context7","vmn","ipver","firstIpV4","firstIpV6","firstMdns","totalTime","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","REACHABILITY_COMPLETED","prepareMetricFields","sendMetric","startTimers","_this3","setTimeout","overallTimer","emit","file","function","_storeResults","_callee8","_callee8$","_context8","storeResults","_x2","resetResultCounters","_performReachabilityChecks","_callee11","clusterList","_this4","isFirstResult","_callee11$","_context11","config","meetings","experimental","enableTcpReachability","enableTlsReachability","cluster","includeTcpReachability","includeTlsReachability","ClusterReachability","on","Events","resultReady","_ref4","_callee9","data","clientMediaIPs","_callee9$","_context9","_x4","clientMediaIpsUpdated","_ref5","_callee10","_callee10$","_context10","_x5","start","_x3","EventsScope"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable class-methods-use-this */\nimport {isEqual, mapValues, mean} from 'lodash';\n\nimport {Defer} from '@webex/common';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport {REACHABILITY} from '../constants';\n\nimport ReachabilityRequest, {ClusterList} from './request';\nimport {\n ClientMediaIpsUpdatedEventData,\n ClusterReachability,\n ClusterReachabilityResult,\n Events,\n ResultEventData,\n TransportResult,\n} from './clusterReachability';\nimport EventsScope from '../common/events/events-scope';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport Metrics from '../metrics';\n\nexport type ReachabilityMetrics = {\n reachability_public_udp_success: number;\n reachability_public_udp_failed: number;\n reachability_public_tcp_success: number;\n reachability_public_tcp_failed: number;\n reachability_public_xtls_success: number;\n reachability_public_xtls_failed: number;\n reachability_vmn_udp_success: number;\n reachability_vmn_udp_failed: number;\n reachability_vmn_tcp_success: number;\n reachability_vmn_tcp_failed: number;\n reachability_vmn_xtls_success: number;\n reachability_vmn_xtls_failed: number;\n};\n\n/**\n * This is the type that matches what backend expects us to send to them. It is a bit weird, because\n * it uses strings instead of booleans and numbers, but that's what they require.\n */\nexport type TransportResultForBackend = {\n reachable?: 'true' | 'false';\n latencyInMilliseconds?: string;\n clientMediaIPs?: string[];\n untested?: 'true';\n};\n\nexport type ReachabilityResultForBackend = {\n udp: TransportResultForBackend;\n tcp: TransportResultForBackend;\n xtls: TransportResultForBackend;\n};\n\n// this is the type that is required by the backend when we send them reachability results\nexport type ReachabilityResultsForBackend = Record<string, ReachabilityResultForBackend>;\n\n// this is the type used by Reachability class internally and stored in local storage\nexport type ReachabilityResults = Record<\n string,\n ClusterReachabilityResult & {\n isVideoMesh?: boolean;\n }\n>;\n\n// timeouts in seconds\nconst DEFAULT_TIMEOUT = 3;\nconst VIDEO_MESH_TIMEOUT = 1;\nconst OVERALL_TIMEOUT = 15;\n\n/**\n * @class Reachability\n * @export\n */\nexport default class Reachability extends EventsScope {\n namespace = REACHABILITY.namespace;\n webex: object;\n reachabilityRequest: ReachabilityRequest;\n clusterReachability: {\n [key: string]: ClusterReachability;\n };\n\n reachabilityDefer?: Defer;\n\n vmnTimer?: ReturnType<typeof setTimeout>;\n publicCloudTimer?: ReturnType<typeof setTimeout>;\n overallTimer?: ReturnType<typeof setTimeout>;\n\n expectedResultsCount = {videoMesh: {udp: 0}, public: {udp: 0, tcp: 0, xtls: 0}};\n resultsCount = {videoMesh: {udp: 0}, public: {udp: 0, tcp: 0, xtls: 0}};\n\n protected lastTrigger?: string;\n\n /**\n * Creates an instance of Reachability.\n * @param {object} webex\n * @memberof Reachability\n */\n constructor(webex: object) {\n super();\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 this.clusterReachability = {};\n }\n\n /**\n * Fetches the list of media clusters from the backend\n * @param {boolean} isRetry\n * @private\n * @returns {Promise<{clusters: ClusterList, joinCookie: any}>}\n */\n async getClusters(isRetry = false): Promise<{clusters: ClusterList; joinCookie: any}> {\n try {\n const {clusters, joinCookie} = await this.reachabilityRequest.getClusters(\n MeetingUtil.getIpVersion(this.webex)\n );\n\n return {clusters, joinCookie};\n } catch (error) {\n if (isRetry) {\n throw error;\n }\n\n LoggerProxy.logger.error(\n `Reachability:index#getClusters --> Failed with error: ${error}, retrying...`\n );\n\n return this.getClusters(true);\n }\n }\n\n /**\n * Gets a list of media clusters from the backend and performs reachability checks on all the clusters\n * @param {string} trigger - explains the reason for starting reachability\n * @returns {Promise<ReachabilityResults>} reachability results\n * @public\n * @memberof Reachability\n */\n public async gatherReachability(trigger: string): Promise<ReachabilityResults> {\n // Fetch clusters and measure latency\n try {\n this.lastTrigger = trigger;\n\n // kick off ip version detection. We don't await it, as we don't want to waste time\n // and if it fails, that's ok we can still carry on\n // @ts-ignore\n this.webex.internal.device.ipNetworkDetector.detect(true);\n\n const {clusters, joinCookie} = await this.getClusters();\n\n // @ts-ignore\n await this.webex.boundedStorage.put(\n this.namespace,\n REACHABILITY.localStorageJoinCookie,\n JSON.stringify(joinCookie)\n );\n\n this.reachabilityDefer = new Defer();\n\n // Perform Reachability Check\n await this.performReachabilityChecks(clusters);\n\n return this.reachabilityDefer.promise;\n } catch (error) {\n LoggerProxy.logger.error(`Reachability:index#gatherReachability --> Error:`, error);\n\n return {};\n }\n }\n\n /**\n * Returns statistics about last reachability results. The returned value is an object\n * with a flat list of properties so that it can be easily sent with metrics\n *\n * @returns {Promise} Promise with metrics values, it never rejects/throws.\n */\n async getReachabilityMetrics(): Promise<ReachabilityMetrics> {\n const stats: ReachabilityMetrics = {\n reachability_public_udp_success: 0,\n reachability_public_udp_failed: 0,\n reachability_public_tcp_success: 0,\n reachability_public_tcp_failed: 0,\n reachability_public_xtls_success: 0,\n reachability_public_xtls_failed: 0,\n reachability_vmn_udp_success: 0,\n reachability_vmn_udp_failed: 0,\n reachability_vmn_tcp_success: 0,\n reachability_vmn_tcp_failed: 0,\n reachability_vmn_xtls_success: 0,\n reachability_vmn_xtls_failed: 0,\n };\n\n const updateStats = (clusterType: 'public' | 'vmn', result: ClusterReachabilityResult) => {\n if (result.udp && result.udp.result !== 'untested') {\n const outcome = result.udp.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_udp_${outcome}`] += 1;\n }\n if (result.tcp && result.tcp.result !== 'untested') {\n const outcome = result.tcp.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_tcp_${outcome}`] += 1;\n }\n if (result.xtls && result.xtls.result !== 'untested') {\n const outcome = result.xtls.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_xtls_${outcome}`] += 1;\n }\n };\n\n try {\n // @ts-ignore\n const resultsJson = await this.webex.boundedStorage.get(\n REACHABILITY.namespace,\n REACHABILITY.localStorageResult\n );\n\n const results: ReachabilityResults = JSON.parse(resultsJson);\n\n Object.values(results).forEach((result) => {\n updateStats(result.isVideoMesh ? 'vmn' : 'public', result);\n });\n } catch (e) {\n // empty storage, that's ok\n LoggerProxy.logger.warn(\n 'Roap:request#getReachabilityMetrics --> Error parsing reachability data: ',\n e\n );\n }\n\n return stats;\n }\n\n /**\n * Maps our internal transport result to the format that backend expects\n * @param {TransportResult} transportResult\n * @returns {TransportResultForBackend}\n */\n private mapTransportResultToBackendDataFormat(\n transportResult: TransportResult\n ): TransportResultForBackend {\n const output: TransportResultForBackend = {};\n\n for (const [key, value] of Object.entries(transportResult)) {\n switch (key) {\n case 'result':\n switch (value) {\n case 'reachable':\n output.reachable = 'true';\n break;\n case 'unreachable':\n output.reachable = 'false';\n break;\n case 'untested':\n output.untested = 'true';\n break;\n }\n break;\n case 'latencyInMilliseconds':\n output.latencyInMilliseconds = value.toString();\n break;\n default:\n output[key] = value;\n }\n }\n\n return output;\n }\n\n /**\n * Reachability results as an object in the format that backend expects\n *\n * @returns {any} reachability results that need to be sent to the backend\n */\n async getReachabilityResults(): Promise<ReachabilityResultsForBackend | undefined> {\n let results: ReachabilityResultsForBackend;\n\n try {\n // @ts-ignore\n const resultsJson = await this.webex.boundedStorage.get(\n REACHABILITY.namespace,\n REACHABILITY.localStorageResult\n );\n\n const allClusterResults: ReachabilityResults = JSON.parse(resultsJson);\n\n results = mapValues(allClusterResults, (clusterResult) => ({\n udp: this.mapTransportResultToBackendDataFormat(clusterResult.udp || {result: 'untested'}),\n tcp: this.mapTransportResultToBackendDataFormat(clusterResult.tcp || {result: 'untested'}),\n xtls: this.mapTransportResultToBackendDataFormat(\n clusterResult.xtls || {result: 'untested'}\n ),\n }));\n } catch (e) {\n // empty storage, that's ok\n LoggerProxy.logger.warn(\n 'Roap:request#attachReachabilityData --> Error parsing reachability data: ',\n e\n );\n }\n\n return results;\n }\n\n /**\n * fetches reachability data and checks for cluster reachability\n * @returns {boolean}\n * @public\n * @memberof Reachability\n */\n async isAnyPublicClusterReachable() {\n let reachable = false;\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(this.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResults: ReachabilityResults = JSON.parse(reachabilityData);\n\n reachable = Object.values(reachabilityResults).some(\n (result) =>\n !result.isVideoMesh &&\n (result.udp?.result === 'reachable' || result.tcp?.result === 'reachable')\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 * Returns true only if ALL protocols (UDP, TCP and TLS) have been tested and none\n * of the media clusters where reachable with any of the protocols. This is done\n * irrespective of the config, so for example:\n * if config.meetings.experimental.enableTlsReachability === false,\n * it will return false, because TLS reachability won't be tested,\n * so we can't say for sure that media backend is unreachable over TLS.\n *\n * @returns {boolean}\n */\n async isWebexMediaBackendUnreachable() {\n let unreachable = false;\n\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(this.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResults: ReachabilityResults = JSON.parse(reachabilityData);\n\n const protocols = {\n udp: {tested: false, reachable: undefined},\n tcp: {tested: false, reachable: undefined},\n xtls: {tested: false, reachable: undefined},\n };\n\n Object.values(reachabilityResults).forEach((result) => {\n Object.keys(protocols).forEach((protocol) => {\n if (\n result[protocol]?.result === 'reachable' ||\n result[protocol]?.result === 'unreachable'\n ) {\n protocols[protocol].tested = true;\n\n // we need at least 1 'reachable' result to mark the whole protocol as reachable\n if (result[protocol].result === 'reachable') {\n protocols[protocol].reachable = true;\n }\n }\n });\n });\n\n unreachable = Object.values(protocols).every(\n (protocol) => protocol.tested && !protocol.reachable\n );\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return unreachable;\n }\n\n /**\n * Get list of all unreachable clusters\n * @returns {array} Unreachable clusters\n * @private\n * @memberof Reachability\n */\n private getUnreachableClusters(): Array<{name: string; protocol: string}> {\n const unreachableList = [];\n\n Object.entries(this.clusterReachability).forEach(([key, clusterReachability]) => {\n const result = clusterReachability.getResult();\n\n if (result.udp.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'udp'});\n }\n if (result.tcp.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'tcp'});\n }\n if (result.xtls.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'xtls'});\n }\n });\n\n return unreachableList;\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.getUnreachableClusters();\n\n list.forEach(({name, protocol}) => {\n LoggerProxy.logger.log(\n `Reachability:index#logUnreachableClusters --> failed to reach ${name} over ${protocol}`\n );\n });\n }\n\n /**\n * Returns true if we've obtained all the reachability results for all the public clusters\n * In other words, it means that all public clusters are reachable over each protocol,\n * because we only get a \"result\" if we managed to reach a cluster\n *\n * @returns {boolean}\n */\n private areAllPublicClusterResultsReady() {\n return isEqual(this.expectedResultsCount.public, this.resultsCount.public);\n }\n\n /**\n * Returns true if we've obtained all the reachability results for all the clusters\n *\n * @returns {boolean}\n */\n private areAllResultsReady() {\n return isEqual(this.expectedResultsCount, this.resultsCount);\n }\n\n /**\n * Resolves the promise returned by gatherReachability() method\n * @returns {void}\n */\n private resolveReachabilityPromise() {\n if (this.vmnTimer) {\n clearTimeout(this.vmnTimer);\n }\n if (this.publicCloudTimer) {\n clearTimeout(this.publicCloudTimer);\n }\n\n this.logUnreachableClusters();\n this.reachabilityDefer?.resolve();\n }\n\n /**\n * Aborts all cluster reachability checks that are in progress\n *\n * @returns {void}\n */\n private abortClusterReachability() {\n Object.values(this.clusterReachability).forEach((clusterReachability) => {\n clusterReachability.abort();\n });\n }\n\n /**\n * Helper function for calculating min/max/average values of latency\n *\n * @param {Array<any>} results\n * @param {string} protocol\n * @param {boolean} isVideoMesh\n * @returns {{min:number, max: number, average: number}}\n */\n protected getStatistics(\n results: Array<ClusterReachabilityResult & {isVideoMesh: boolean}>,\n protocol: 'udp' | 'tcp' | 'xtls',\n isVideoMesh: boolean\n ) {\n const values = results\n .filter((result) => result.isVideoMesh === isVideoMesh)\n .filter((result) => result[protocol].result === 'reachable')\n .map((result) => result[protocol].latencyInMilliseconds);\n\n if (values.length === 0) {\n return {\n min: -1,\n max: -1,\n average: -1,\n };\n }\n\n return {\n min: Math.min(...values),\n max: Math.max(...values),\n average: mean(values),\n };\n }\n\n /**\n * Sends a metric with all the statistics about how long reachability took\n *\n * @returns {void}\n */\n protected async sendMetric() {\n const results = [];\n\n Object.values(this.clusterReachability).forEach((clusterReachability) => {\n results.push({\n ...clusterReachability.getResult(),\n isVideoMesh: clusterReachability.isVideoMesh,\n });\n });\n\n const stats = {\n vmn: {\n udp: this.getStatistics(results, 'udp', true),\n },\n public: {\n udp: this.getStatistics(results, 'udp', false),\n tcp: this.getStatistics(results, 'tcp', false),\n xtls: this.getStatistics(results, 'xtls', false),\n },\n ipver: {\n // @ts-ignore\n firstIpV4: this.webex.internal.device.ipNetworkDetector.firstIpV4,\n // @ts-ignore\n firstIpV6: this.webex.internal.device.ipNetworkDetector.firstIpV6,\n // @ts-ignore\n firstMdns: this.webex.internal.device.ipNetworkDetector.firstMdns,\n // @ts-ignore\n totalTime: this.webex.internal.device.ipNetworkDetector.totalTime,\n },\n trigger: this.lastTrigger,\n };\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.REACHABILITY_COMPLETED,\n Metrics.prepareMetricFields(stats)\n );\n }\n\n /**\n * Starts all the timers used for various timeouts\n *\n * @returns {void}\n */\n private startTimers() {\n this.vmnTimer = setTimeout(() => {\n this.vmnTimer = undefined;\n // if we are only missing VMN results, then we don't want to wait for them any longer\n // as they are likely to fail if users are not on corporate network\n if (this.areAllPublicClusterResultsReady()) {\n LoggerProxy.logger.log(\n 'Reachability:index#startTimers --> Reachability checks timed out (VMN timeout)'\n );\n\n this.resolveReachabilityPromise();\n }\n }, VIDEO_MESH_TIMEOUT * 1000);\n\n this.publicCloudTimer = setTimeout(() => {\n this.publicCloudTimer = undefined;\n\n LoggerProxy.logger.log(\n `Reachability:index#startTimers --> Reachability checks timed out (${DEFAULT_TIMEOUT}s)`\n );\n\n // resolve the promise, so that the client won't be blocked waiting on meetings.register() for too long\n this.resolveReachabilityPromise();\n }, DEFAULT_TIMEOUT * 1000);\n\n this.overallTimer = setTimeout(() => {\n this.overallTimer = undefined;\n this.abortClusterReachability();\n this.emit(\n {\n file: 'reachability',\n function: 'overallTimer timeout',\n },\n 'reachability:done',\n {}\n );\n this.sendMetric();\n\n LoggerProxy.logger.log(\n `Reachability:index#startTimers --> Reachability checks fully timed out (${OVERALL_TIMEOUT}s)`\n );\n }, OVERALL_TIMEOUT * 1000);\n }\n\n /**\n * Stores given reachability results in local storage\n *\n * @param {ReachabilityResults} results\n * @returns {Promise<void>}\n */\n private async storeResults(results: ReachabilityResults) {\n // @ts-ignore\n await this.webex.boundedStorage.put(\n this.namespace,\n REACHABILITY.localStorageResult,\n JSON.stringify(results)\n );\n }\n\n /**\n * Resets all the internal counters that keep track of the results\n *\n * @returns {void}\n */\n private resetResultCounters() {\n this.expectedResultsCount.videoMesh.udp = 0;\n this.expectedResultsCount.public.udp = 0;\n this.expectedResultsCount.public.tcp = 0;\n this.expectedResultsCount.public.xtls = 0;\n\n this.resultsCount.videoMesh.udp = 0;\n this.resultsCount.public.udp = 0;\n this.resultsCount.public.tcp = 0;\n this.resultsCount.public.xtls = 0;\n }\n\n /**\n * Performs reachability checks for all clusters\n * @param {ClusterList} clusterList\n * @returns {Promise<void>} promise that's resolved as soon as the checks are started\n */\n private async performReachabilityChecks(clusterList: ClusterList) {\n const results: ReachabilityResults = {};\n\n this.clusterReachability = {};\n\n if (!clusterList || !Object.keys(clusterList).length) {\n return;\n }\n\n LoggerProxy.logger.log(\n `Reachability:index#performReachabilityChecks --> doing UDP${\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTcpReachability ? ',TCP' : ''\n }${\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTlsReachability ? ',TLS' : ''\n } reachability checks`\n );\n\n this.resetResultCounters();\n this.startTimers();\n\n // sanitize the urls in the clusterList\n Object.keys(clusterList).forEach((key) => {\n const cluster = clusterList[key];\n\n // Linus doesn't support TCP reachability checks on video mesh nodes\n const includeTcpReachability =\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTcpReachability && !cluster.isVideoMesh;\n\n if (!includeTcpReachability) {\n cluster.tcp = [];\n }\n\n // Linus doesn't support xTLS reachability checks on video mesh nodes\n const includeTlsReachability =\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTlsReachability && !cluster.isVideoMesh;\n\n if (!includeTlsReachability) {\n cluster.xtls = [];\n }\n\n // initialize the result for this cluster\n results[key] = {\n udp: {result: cluster.udp.length > 0 ? 'unreachable' : 'untested'},\n tcp: {result: cluster.tcp.length > 0 ? 'unreachable' : 'untested'},\n xtls: {result: cluster.xtls.length > 0 ? 'unreachable' : 'untested'},\n isVideoMesh: cluster.isVideoMesh,\n };\n\n // update expected results counters to include this cluster\n this.expectedResultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'].udp +=\n cluster.udp.length;\n if (!cluster.isVideoMesh) {\n this.expectedResultsCount.public.tcp += cluster.tcp.length;\n this.expectedResultsCount.public.xtls += cluster.xtls.length;\n }\n });\n\n const isFirstResult = {\n udp: true,\n tcp: true,\n xtls: true,\n };\n\n // save the initialized results (in case we don't get any \"resultReady\" events at all)\n await this.storeResults(results);\n\n // now start the reachability on all the clusters\n Object.keys(clusterList).forEach((key) => {\n const cluster = clusterList[key];\n\n this.clusterReachability[key] = new ClusterReachability(key, cluster);\n this.clusterReachability[key].on(Events.resultReady, async (data: ResultEventData) => {\n const {protocol, result, clientMediaIPs, latencyInMilliseconds} = data;\n\n if (isFirstResult[protocol]) {\n this.emit(\n {\n file: 'reachability',\n function: 'resultReady event handler',\n },\n 'reachability:firstResultAvailable',\n {\n protocol,\n }\n );\n isFirstResult[protocol] = false;\n }\n this.resultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'][protocol] += 1;\n\n const areAllResultsReady = this.areAllResultsReady();\n\n results[key][protocol].result = result;\n results[key][protocol].clientMediaIPs = clientMediaIPs;\n results[key][protocol].latencyInMilliseconds = latencyInMilliseconds;\n\n await this.storeResults(results);\n\n if (areAllResultsReady) {\n clearTimeout(this.overallTimer);\n this.overallTimer = undefined;\n this.emit(\n {\n file: 'reachability',\n function: 'performReachabilityChecks',\n },\n 'reachability:done',\n {}\n );\n this.sendMetric();\n\n LoggerProxy.logger.log(\n `Reachability:index#gatherReachability --> Reachability checks fully completed`\n );\n this.resolveReachabilityPromise();\n }\n });\n\n // clientMediaIps can be updated independently from the results, so we need to listen for them too\n this.clusterReachability[key].on(\n Events.clientMediaIpsUpdated,\n async (data: ClientMediaIpsUpdatedEventData) => {\n results[key][data.protocol].clientMediaIPs = data.clientMediaIPs;\n\n await this.storeResults(results);\n }\n );\n\n this.clusterReachability[key].start(); // not awaiting on purpose\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","ReachabilityRequest","_createClass2","default","webex","_this","_classCallCheck2","_defineProperty2","ipVersion","internal","newMetrics","callDiagnosticLatencies","measureLatency","request","method","HTTP_VERBS","GET","shouldRefreshAccessToken","api","API","CALLIOPEDISCOVERY","resource","RESOURCE","CLUSTERS","qs","JCSupport","ipver","then","res","_res$body","body","clusters","joinCookie","_keys","forEach","key","_res$body$clusterClas","_res$body$clusterClas2","isVideoMesh","clusterClasses","hybridMedia","includes","LoggerProxy","logger","log","concat","_stringify","localSDPList","POST","REACHABILITY","offers","_default","exports"],"sources":["request.ts"],"sourcesContent":["import LoggerProxy from '../common/logs/logger-proxy';\nimport {HTTP_VERBS, RESOURCE, API, IP_VERSION} from '../constants';\n\nexport interface ClusterNode {\n isVideoMesh: boolean;\n udp: Array<string>;\n tcp: Array<string>;\n xtls: Array<string>;\n}\n\nexport type ClusterList = {\n [key: string]: ClusterNode;\n};\n\n/**\n * @class ReachabilityRequest\n */\nclass ReachabilityRequest {\n webex: any;\n\n /**\n * Creates an instance of ReachabilityRequest.\n * @param {object} webex\n * @memberof ReachabilityRequest\n */\n constructor(webex: object) {\n this.webex = webex;\n }\n\n /**\n * Gets the cluster information\n *\n * @param {IP_VERSION} ipVersion information about current ip network we're on\n * @returns {Promise}\n */\n getClusters = (ipVersion?: IP_VERSION): Promise<{clusters: ClusterList; joinCookie: any}> =>\n this.webex.internal.newMetrics.callDiagnosticLatencies\n .measureLatency(\n () =>\n this.webex.request({\n method: HTTP_VERBS.GET,\n shouldRefreshAccessToken: false,\n api: API.CALLIOPEDISCOVERY,\n resource: RESOURCE.CLUSTERS,\n qs: {\n JCSupport: 1,\n ipver: ipVersion,\n },\n }),\n 'internal.get.cluster.time'\n )\n .then((res) => {\n const {clusters, joinCookie} = res.body;\n\n Object.keys(clusters).forEach((key) => {\n clusters[key].isVideoMesh = !!res.body.clusterClasses?.hybridMedia?.includes(key);\n });\n\n LoggerProxy.logger.log(\n `Reachability:request#getClusters --> get clusters (ipver=${ipVersion}) successful:${JSON.stringify(\n clusters\n )}`\n );\n\n return {\n clusters,\n joinCookie,\n };\n });\n\n /**\n * gets remote SDP For Clusters\n * @param {Object} localSDPList localSDPs for the cluster\n * @returns {Object}\n */\n remoteSDPForClusters = (localSDPList: object) =>\n this.webex\n .request({\n method: HTTP_VERBS.POST,\n shouldRefreshAccessToken: false,\n api: API.CALLIOPEDISCOVERY,\n resource: RESOURCE.REACHABILITY,\n body: {offers: localSDPList},\n })\n .then((res) => {\n LoggerProxy.logger.log(\n 'Reachability:request#remoteSDPForClusters --> Remote SDPs got succcessfully'\n );\n\n return res.body;\n });\n}\n\nexport default ReachabilityRequest;\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAaA;AACA;AACA;AAFA,IAGME,mBAAmB,oBAAAC,aAAA,CAAAC,OAAA;AAGvB;AACF;AACA;AACA;AACA;AACE,SAAAF,oBAAYG,KAAa,EAAE;EAAA,IAAAC,KAAA;EAAA,IAAAC,gBAAA,CAAAH,OAAA,QAAAF,mBAAA;EAAA,IAAAM,gBAAA,CAAAJ,OAAA;EAI3B;AACF;AACA;AACA;AACA;AACA;EALE,IAAAI,gBAAA,CAAAJ,OAAA,uBAMc,UAACK,SAAsB;IAAA,OACnCH,KAAI,CAACD,KAAK,CAACK,QAAQ,CAACC,UAAU,CAACC,uBAAuB,CACnDC,cAAc,CACb;MAAA,OACEP,KAAI,CAACD,KAAK,CAACS,OAAO,CAAC;QACjBC,MAAM,EAAEC,qBAAU,CAACC,GAAG;QACtBC,wBAAwB,EAAE,KAAK;QAC/BC,GAAG,EAAEC,cAAG,CAACC,iBAAiB;QAC1BC,QAAQ,EAAEC,mBAAQ,CAACC,QAAQ;QAC3BC,EAAE,EAAE;UACFC,SAAS,EAAE,CAAC;UACZC,KAAK,EAAElB;QACT;
|
|
1
|
+
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","ReachabilityRequest","_createClass2","default","webex","_this","_classCallCheck2","_defineProperty2","ipVersion","internal","newMetrics","callDiagnosticLatencies","measureLatency","request","method","HTTP_VERBS","GET","shouldRefreshAccessToken","api","API","CALLIOPEDISCOVERY","resource","RESOURCE","CLUSTERS","qs","JCSupport","ipver","timeout","config","meetings","reachabilityGetClusterTimeout","then","res","_res$body","body","clusters","joinCookie","_keys","forEach","key","_res$body$clusterClas","_res$body$clusterClas2","isVideoMesh","clusterClasses","hybridMedia","includes","LoggerProxy","logger","log","concat","_stringify","localSDPList","POST","REACHABILITY","offers","_default","exports"],"sources":["request.ts"],"sourcesContent":["import LoggerProxy from '../common/logs/logger-proxy';\nimport {HTTP_VERBS, RESOURCE, API, IP_VERSION} from '../constants';\n\nexport interface ClusterNode {\n isVideoMesh: boolean;\n udp: Array<string>;\n tcp: Array<string>;\n xtls: Array<string>;\n}\n\nexport type ClusterList = {\n [key: string]: ClusterNode;\n};\n\n/**\n * @class ReachabilityRequest\n */\nclass ReachabilityRequest {\n webex: any;\n\n /**\n * Creates an instance of ReachabilityRequest.\n * @param {object} webex\n * @memberof ReachabilityRequest\n */\n constructor(webex: object) {\n this.webex = webex;\n }\n\n /**\n * Gets the cluster information\n *\n * @param {IP_VERSION} ipVersion information about current ip network we're on\n * @returns {Promise}\n */\n getClusters = (ipVersion?: IP_VERSION): Promise<{clusters: ClusterList; joinCookie: any}> =>\n this.webex.internal.newMetrics.callDiagnosticLatencies\n .measureLatency(\n () =>\n this.webex.request({\n method: HTTP_VERBS.GET,\n shouldRefreshAccessToken: false,\n api: API.CALLIOPEDISCOVERY,\n resource: RESOURCE.CLUSTERS,\n qs: {\n JCSupport: 1,\n ipver: ipVersion,\n },\n timeout: this.webex.config.meetings.reachabilityGetClusterTimeout,\n }),\n 'internal.get.cluster.time'\n )\n .then((res) => {\n const {clusters, joinCookie} = res.body;\n\n Object.keys(clusters).forEach((key) => {\n clusters[key].isVideoMesh = !!res.body.clusterClasses?.hybridMedia?.includes(key);\n });\n\n LoggerProxy.logger.log(\n `Reachability:request#getClusters --> get clusters (ipver=${ipVersion}) successful:${JSON.stringify(\n clusters\n )}`\n );\n\n return {\n clusters,\n joinCookie,\n };\n });\n\n /**\n * gets remote SDP For Clusters\n * @param {Object} localSDPList localSDPs for the cluster\n * @returns {Object}\n */\n remoteSDPForClusters = (localSDPList: object) =>\n this.webex\n .request({\n method: HTTP_VERBS.POST,\n shouldRefreshAccessToken: false,\n api: API.CALLIOPEDISCOVERY,\n resource: RESOURCE.REACHABILITY,\n body: {offers: localSDPList},\n })\n .then((res) => {\n LoggerProxy.logger.log(\n 'Reachability:request#remoteSDPForClusters --> Remote SDPs got succcessfully'\n );\n\n return res.body;\n });\n}\n\nexport default ReachabilityRequest;\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAaA;AACA;AACA;AAFA,IAGME,mBAAmB,oBAAAC,aAAA,CAAAC,OAAA;AAGvB;AACF;AACA;AACA;AACA;AACE,SAAAF,oBAAYG,KAAa,EAAE;EAAA,IAAAC,KAAA;EAAA,IAAAC,gBAAA,CAAAH,OAAA,QAAAF,mBAAA;EAAA,IAAAM,gBAAA,CAAAJ,OAAA;EAI3B;AACF;AACA;AACA;AACA;AACA;EALE,IAAAI,gBAAA,CAAAJ,OAAA,uBAMc,UAACK,SAAsB;IAAA,OACnCH,KAAI,CAACD,KAAK,CAACK,QAAQ,CAACC,UAAU,CAACC,uBAAuB,CACnDC,cAAc,CACb;MAAA,OACEP,KAAI,CAACD,KAAK,CAACS,OAAO,CAAC;QACjBC,MAAM,EAAEC,qBAAU,CAACC,GAAG;QACtBC,wBAAwB,EAAE,KAAK;QAC/BC,GAAG,EAAEC,cAAG,CAACC,iBAAiB;QAC1BC,QAAQ,EAAEC,mBAAQ,CAACC,QAAQ;QAC3BC,EAAE,EAAE;UACFC,SAAS,EAAE,CAAC;UACZC,KAAK,EAAElB;QACT,CAAC;QACDmB,OAAO,EAAEtB,KAAI,CAACD,KAAK,CAACwB,MAAM,CAACC,QAAQ,CAACC;MACtC,CAAC,CAAC;IAAA,GACJ,2BACF,CAAC,CACAC,IAAI,CAAC,UAACC,GAAG,EAAK;MACb,IAAAC,SAAA,GAA+BD,GAAG,CAACE,IAAI;QAAhCC,QAAQ,GAAAF,SAAA,CAARE,QAAQ;QAAEC,UAAU,GAAAH,SAAA,CAAVG,UAAU;MAE3B,IAAAC,KAAA,CAAAlC,OAAA,EAAYgC,QAAQ,CAAC,CAACG,OAAO,CAAC,UAACC,GAAG,EAAK;QAAA,IAAAC,qBAAA,EAAAC,sBAAA;QACrCN,QAAQ,CAACI,GAAG,CAAC,CAACG,WAAW,GAAG,CAAC,GAAAF,qBAAA,GAACR,GAAG,CAACE,IAAI,CAACS,cAAc,cAAAH,qBAAA,gBAAAC,sBAAA,GAAvBD,qBAAA,CAAyBI,WAAW,cAAAH,sBAAA,eAApCA,sBAAA,CAAsCI,QAAQ,CAACN,GAAG,CAAC;MACnF,CAAC,CAAC;MAEFO,oBAAW,CAACC,MAAM,CAACC,GAAG,6DAAAC,MAAA,CACwCzC,SAAS,mBAAAyC,MAAA,CAAgB,IAAAC,UAAA,CAAA/C,OAAA,EACnFgC,QACF,CAAC,CACH,CAAC;MAED,OAAO;QACLA,QAAQ,EAARA,QAAQ;QACRC,UAAU,EAAVA;MACF,CAAC;IACH,CAAC,CAAC;EAAA;EAEN;AACF;AACA;AACA;AACA;EAJE,IAAA7B,gBAAA,CAAAJ,OAAA,gCAKuB,UAACgD,YAAoB;IAAA,OAC1C9C,KAAI,CAACD,KAAK,CACPS,OAAO,CAAC;MACPC,MAAM,EAAEC,qBAAU,CAACqC,IAAI;MACvBnC,wBAAwB,EAAE,KAAK;MAC/BC,GAAG,EAAEC,cAAG,CAACC,iBAAiB;MAC1BC,QAAQ,EAAEC,mBAAQ,CAAC+B,YAAY;MAC/BnB,IAAI,EAAE;QAACoB,MAAM,EAAEH;MAAY;IAC7B,CAAC,CAAC,CACDpB,IAAI,CAAC,UAACC,GAAG,EAAK;MACbc,oBAAW,CAACC,MAAM,CAACC,GAAG,CACpB,6EACF,CAAC;MAED,OAAOhB,GAAG,CAACE,IAAI;IACjB,CAAC,CAAC;EAAA;EAjEJ,IAAI,CAAC9B,KAAK,GAAGA,KAAK;AACpB,CAAC;AAAA,IAAAmD,QAAA,GAAAC,OAAA,CAAArD,OAAA,GAmEYF,mBAAmB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error occurred while the webinar required registration
|
|
3
|
+
*/
|
|
4
|
+
export default class WebinarRegistrationError extends Error {
|
|
5
|
+
code: number;
|
|
6
|
+
error: any;
|
|
7
|
+
sdkMessage: string;
|
|
8
|
+
/**
|
|
9
|
+
* @constructor
|
|
10
|
+
* @param {String} [message]
|
|
11
|
+
* @param {Object} [error]
|
|
12
|
+
*/
|
|
13
|
+
constructor(message?: string, error?: any);
|
|
14
|
+
}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -264,6 +264,10 @@ export declare const EVENT_TRIGGERS: {
|
|
|
264
264
|
MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED: string;
|
|
265
265
|
MEETING_CONTROLS_RAISE_HAND_UPDATED: string;
|
|
266
266
|
MEETING_CONTROLS_VIDEO_UPDATED: string;
|
|
267
|
+
MEETING_CONTROLS_STAGE_VIEW_UPDATED: string;
|
|
268
|
+
MEETING_CONTROLS_WEBCAST_UPDATED: string;
|
|
269
|
+
MEETING_CONTROLS_MEETING_FULL_UPDATED: string;
|
|
270
|
+
MEETING_CONTROLS_PRACTICE_SESSION_STATUS_UPDATED: string;
|
|
267
271
|
MEETING_LOCUS_URL_UPDATE: string;
|
|
268
272
|
MEETING_STREAM_PUBLISH_STATE_CHANGED: string;
|
|
269
273
|
MEETING_TRANSCRIPTION_CONNECTED: string;
|
|
@@ -406,6 +410,11 @@ export declare const ERROR_DICTIONARY: {
|
|
|
406
410
|
MESSAGE: string;
|
|
407
411
|
CODE: number;
|
|
408
412
|
};
|
|
413
|
+
WebinarRegistrationError: {
|
|
414
|
+
NAME: string;
|
|
415
|
+
MESSAGE: string;
|
|
416
|
+
CODE: number;
|
|
417
|
+
};
|
|
409
418
|
};
|
|
410
419
|
export declare const FLOOR_ACTION: {
|
|
411
420
|
GRANTED: string;
|
|
@@ -541,7 +550,11 @@ export declare const LOCUSINFO: {
|
|
|
541
550
|
CONTROLS_REACTIONS_CHANGED: string;
|
|
542
551
|
CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED: string;
|
|
543
552
|
CONTROLS_RAISE_HAND_CHANGED: string;
|
|
553
|
+
CONTROLS_WEBCAST_CHANGED: string;
|
|
554
|
+
CONTROLS_MEETING_FULL_CHANGED: string;
|
|
555
|
+
CONTROLS_PRACTICE_SESSION_STATUS_UPDATED: string;
|
|
544
556
|
CONTROLS_VIDEO_CHANGED: string;
|
|
557
|
+
CONTROLS_STAGE_VIEW_UPDATED: string;
|
|
545
558
|
SELF_UNADMITTED_GUEST: string;
|
|
546
559
|
SELF_ADMITTED_GUEST: string;
|
|
547
560
|
SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED: string;
|
|
@@ -567,6 +580,7 @@ export declare const LOCUSINFO: {
|
|
|
567
580
|
SELF_MEETING_INTERPRETATION_CHANGED: string;
|
|
568
581
|
MEDIA_INACTIVITY: string;
|
|
569
582
|
LINKS_SERVICES: string;
|
|
583
|
+
LINKS_RESOURCES: string;
|
|
570
584
|
};
|
|
571
585
|
};
|
|
572
586
|
export declare const LOCUSEVENT: {
|
|
@@ -770,6 +784,10 @@ export declare const DISPLAY_HINTS: {
|
|
|
770
784
|
DISABLE_LOBBY_TO_BREAKOUT: string;
|
|
771
785
|
DISABLE_VIEW_THE_PARTICIPANT_LIST: string;
|
|
772
786
|
ENABLE_VIEW_THE_PARTICIPANT_LIST: string;
|
|
787
|
+
DISABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST: string;
|
|
788
|
+
ENABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST: string;
|
|
789
|
+
DISABLE_SHOW_ATTENDEE_COUNT: string;
|
|
790
|
+
ENABLE_SHOW_ATTENDEE_COUNT: string;
|
|
773
791
|
DISABLE_RAISE_HAND: string;
|
|
774
792
|
ENABLE_RAISE_HAND: string;
|
|
775
793
|
DISABLE_VIDEO: string;
|
|
@@ -781,6 +799,12 @@ export declare const DISPLAY_HINTS: {
|
|
|
781
799
|
SHARE_CONTENT: string;
|
|
782
800
|
SHARE_WHITEBOARD: string;
|
|
783
801
|
VOIP_IS_ENABLED: string;
|
|
802
|
+
WEBCAST_CONTROL_START: string;
|
|
803
|
+
WEBCAST_CONTROL_STOP: string;
|
|
804
|
+
STAGE_VIEW_ACTIVE: string;
|
|
805
|
+
STAGE_VIEW_INACTIVE: string;
|
|
806
|
+
ENABLE_STAGE_VIEW: string;
|
|
807
|
+
DISABLE_STAGE_VIEW: string;
|
|
784
808
|
};
|
|
785
809
|
export declare const INTERSTITIAL_DISPLAY_HINTS: string[];
|
|
786
810
|
export declare const SELF_ROLES: {
|
|
@@ -1058,6 +1082,7 @@ export declare const MEETING_INFO_FAILURE_REASON: {
|
|
|
1058
1082
|
WRONG_PASSWORD: string;
|
|
1059
1083
|
WRONG_CAPTCHA: string;
|
|
1060
1084
|
POLICY: string;
|
|
1085
|
+
WEBINAR_REGISTRATION: string;
|
|
1061
1086
|
OTHER: string;
|
|
1062
1087
|
};
|
|
1063
1088
|
export declare const BNR_STATUS: {
|
|
@@ -129,8 +129,9 @@ export default class ControlsOptionsManager {
|
|
|
129
129
|
* @param {boolean} mutedEnabled
|
|
130
130
|
* @param {boolean} disallowUnmuteEnabled
|
|
131
131
|
* @param {boolean} muteOnEntryEnabled
|
|
132
|
+
* @param {array} roles which should be muted
|
|
132
133
|
* @memberof ControlsOptionsManager
|
|
133
134
|
* @returns {Promise}
|
|
134
135
|
*/
|
|
135
|
-
setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean): Promise<any>;
|
|
136
|
+
setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean, roles: Array<string>): Promise<any>;
|
|
136
137
|
}
|
|
@@ -29,6 +29,8 @@ export interface VideoProperties {
|
|
|
29
29
|
}
|
|
30
30
|
export interface ViewTheParticipantListProperties {
|
|
31
31
|
enabled?: boolean;
|
|
32
|
+
panelistEnabled?: boolean;
|
|
33
|
+
attendeeCount?: boolean;
|
|
32
34
|
}
|
|
33
35
|
export type Properties = AudioProperties | RaiseHandProperties | ReactionsProperties | ShareControlProperties | VideoProperties | ViewTheParticipantListProperties;
|
|
34
36
|
export interface ControlConfig<Props = Properties> {
|
package/dist/types/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import CaptchaError from './common/errors/captcha-error';
|
|
|
3
3
|
import IntentToJoinError from './common/errors/intent-to-join';
|
|
4
4
|
import PasswordError from './common/errors/password-error';
|
|
5
5
|
import PermissionError from './common/errors/permission';
|
|
6
|
+
import WebinarRegistrationError from './common/errors/webinar-registration-error';
|
|
6
7
|
import { ReclaimHostEmptyWrongKeyError, ReclaimHostIsHostAlreadyError, ReclaimHostNotAllowedError, ReclaimHostNotSupportedError } from './common/errors/reclaim-host-role-errors';
|
|
7
8
|
import Meeting from './meeting';
|
|
8
9
|
import MeetingInfoUtil from './meeting-info/utilv2';
|
|
@@ -14,6 +15,6 @@ export * as REACTIONS from './reactions/reactions';
|
|
|
14
15
|
export * as sdkAnnotationTypes from './annotation/annotation.types';
|
|
15
16
|
export * as MeetingInfoV2 from './meeting-info/meeting-info-v2';
|
|
16
17
|
export { type Reaction } from './reactions/reactions.type';
|
|
17
|
-
export { CaptchaError, IntentToJoinError, JoinMeetingError, PasswordError, PermissionError, ReclaimHostIsHostAlreadyError, ReclaimHostNotAllowedError, ReclaimHostNotSupportedError, ReclaimHostEmptyWrongKeyError, Meeting, MeetingInfoUtil, };
|
|
18
|
+
export { CaptchaError, IntentToJoinError, JoinMeetingError, PasswordError, PermissionError, ReclaimHostIsHostAlreadyError, ReclaimHostNotAllowedError, ReclaimHostNotSupportedError, ReclaimHostEmptyWrongKeyError, Meeting, MeetingInfoUtil, WebinarRegistrationError, };
|
|
18
19
|
export { RemoteMedia } from './multistream/remoteMedia';
|
|
19
20
|
export { default as TriggerProxy } from './common/events/trigger-proxy';
|
|
@@ -35,6 +35,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
35
35
|
replace: any;
|
|
36
36
|
url: any;
|
|
37
37
|
services: any;
|
|
38
|
+
resources: any;
|
|
38
39
|
mainSessionLocusCache: any;
|
|
39
40
|
/**
|
|
40
41
|
* Constructor
|
|
@@ -190,6 +191,14 @@ export default class LocusInfo extends EventsScope {
|
|
|
190
191
|
updateServices(services: Record<'breakout' | 'record', {
|
|
191
192
|
url: string;
|
|
192
193
|
}>): void;
|
|
194
|
+
/**
|
|
195
|
+
* @param {Object} resources
|
|
196
|
+
* @returns {undefined}
|
|
197
|
+
* @memberof LocusInfo
|
|
198
|
+
*/
|
|
199
|
+
updateResources(resources: Record<'webcastInstance', {
|
|
200
|
+
url: string;
|
|
201
|
+
}>): void;
|
|
193
202
|
/**
|
|
194
203
|
* @param {Object} fullState
|
|
195
204
|
* @returns {undefined}
|
|
@@ -61,6 +61,10 @@ interface IInMeetingActions {
|
|
|
61
61
|
canUpdateShareControl?: boolean;
|
|
62
62
|
canEnableViewTheParticipantsList?: boolean;
|
|
63
63
|
canDisableViewTheParticipantsList?: boolean;
|
|
64
|
+
canEnableViewTheParticipantsListPanelist?: boolean;
|
|
65
|
+
canDisableViewTheParticipantsListPanelist?: boolean;
|
|
66
|
+
canEnableShowAttendeeCount?: boolean;
|
|
67
|
+
canDisableShowAttendeeCount?: boolean;
|
|
64
68
|
canEnableRaiseHand?: boolean;
|
|
65
69
|
canDisableRaiseHand?: boolean;
|
|
66
70
|
canEnableVideo?: boolean;
|
|
@@ -80,6 +84,11 @@ interface IInMeetingActions {
|
|
|
80
84
|
canShareWhiteBoard?: boolean;
|
|
81
85
|
enforceVirtualBackground?: boolean;
|
|
82
86
|
canPollingAndQA?: boolean;
|
|
87
|
+
canStartWebcast?: boolean;
|
|
88
|
+
canStopWebcast?: boolean;
|
|
89
|
+
canShowStageView?: boolean;
|
|
90
|
+
canEnableStageView?: boolean;
|
|
91
|
+
canDisableStageView?: boolean;
|
|
83
92
|
}
|
|
84
93
|
/**
|
|
85
94
|
* @class InMeetingActions
|
|
@@ -141,6 +150,10 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
141
150
|
canUpdateShareControl: any;
|
|
142
151
|
canEnableViewTheParticipantsList: any;
|
|
143
152
|
canDisableViewTheParticipantsList: any;
|
|
153
|
+
canEnableViewTheParticipantsListPanelist: any;
|
|
154
|
+
canDisableViewTheParticipantsListPanelist: any;
|
|
155
|
+
canEnableShowAttendeeCount: any;
|
|
156
|
+
canDisableShowAttendeeCount: any;
|
|
144
157
|
canEnableRaiseHand: any;
|
|
145
158
|
canDisableRaiseHand: any;
|
|
146
159
|
canEnableVideo: any;
|
|
@@ -160,6 +173,11 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
160
173
|
supportHDV: any;
|
|
161
174
|
canShareWhiteBoard: any;
|
|
162
175
|
canPollingAndQA: any;
|
|
176
|
+
canStartWebcast: any;
|
|
177
|
+
canStopWebcast: any;
|
|
178
|
+
canShowStageView: any;
|
|
179
|
+
canEnableStageView: any;
|
|
180
|
+
canDisableStageView: any;
|
|
163
181
|
/**
|
|
164
182
|
* Returns all meeting action options
|
|
165
183
|
* @returns {Object}
|
|
@@ -737,6 +737,15 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
737
737
|
* @memberof Meeting
|
|
738
738
|
*/
|
|
739
739
|
private setUpLocusServicesListener;
|
|
740
|
+
/**
|
|
741
|
+
* Set up the locus info resources link listener
|
|
742
|
+
* update the locusInfo for webcast instance url
|
|
743
|
+
* @param {Object} payload - The event payload
|
|
744
|
+
* @returns {undefined}
|
|
745
|
+
* @private
|
|
746
|
+
* @memberof Meeting
|
|
747
|
+
*/
|
|
748
|
+
private setUpLocusResourcesListener;
|
|
740
749
|
/**
|
|
741
750
|
* Set up the locus info meeting info listener
|
|
742
751
|
* @returns {undefined}
|
|
@@ -1391,6 +1400,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1391
1400
|
* @returns {Promise<void>}
|
|
1392
1401
|
*/
|
|
1393
1402
|
private cleanUpBeforeRetryWithTurnServer;
|
|
1403
|
+
private cleanUpBeforeReconnection;
|
|
1394
1404
|
/**
|
|
1395
1405
|
* Creates an instance of LocusMediaRequest for this meeting - it is needed for doing any calls
|
|
1396
1406
|
* to Locus /media API (these are used for sending Roap messages and updating audio/video mute status).
|
|
@@ -1605,10 +1615,11 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1605
1615
|
* @param {boolean} mutedEnabled
|
|
1606
1616
|
* @param {boolean} disallowUnmuteEnabled
|
|
1607
1617
|
* @param {boolean} muteOnEntryEnabled
|
|
1618
|
+
* @param {array} roles
|
|
1608
1619
|
* @public
|
|
1609
1620
|
* @memberof Meeting
|
|
1610
1621
|
*/
|
|
1611
|
-
setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean): Promise<any>;
|
|
1622
|
+
setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean, roles: Array<string>): Promise<any>;
|
|
1612
1623
|
/**
|
|
1613
1624
|
* End the recording of this meeting
|
|
1614
1625
|
* @returns {Promise}
|
|
@@ -139,9 +139,10 @@ export declare class MuteState {
|
|
|
139
139
|
* @public
|
|
140
140
|
* @memberof MuteState
|
|
141
141
|
* @param {Object} [meeting] the meeting object
|
|
142
|
+
* @param {Boolean} [unmuteAllowed] whether the user is allowed to unmute self
|
|
142
143
|
* @returns {undefined}
|
|
143
144
|
*/
|
|
144
|
-
handleServerLocalUnmuteRequired(meeting
|
|
145
|
+
handleServerLocalUnmuteRequired(meeting: any, unmuteAllowed: boolean): void;
|
|
145
146
|
/**
|
|
146
147
|
* Returns true if the user is locally or remotely muted.
|
|
147
148
|
* It only checks the mute status, ignoring the fact whether audio/video is enabled.
|
|
@@ -64,6 +64,23 @@ export declare class MeetingInfoV2CaptchaError extends Error {
|
|
|
64
64
|
*/
|
|
65
65
|
constructor(wbxAppApiErrorCode?: number, captchaInfo?: object, message?: string);
|
|
66
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Error preventing join because of a webinar registration error
|
|
69
|
+
*/
|
|
70
|
+
export declare class MeetingInfoV2WebinarRegistrationError extends Error {
|
|
71
|
+
meetingInfo: any;
|
|
72
|
+
sdkMessage: any;
|
|
73
|
+
wbxAppApiCode: any;
|
|
74
|
+
body: any;
|
|
75
|
+
/**
|
|
76
|
+
*
|
|
77
|
+
* @constructor
|
|
78
|
+
* @param {Number} [wbxAppApiErrorCode]
|
|
79
|
+
* @param {Object} [meetingInfo]
|
|
80
|
+
* @param {String} [message]
|
|
81
|
+
*/
|
|
82
|
+
constructor(wbxAppApiErrorCode?: number, meetingInfo?: object, message?: string);
|
|
83
|
+
}
|
|
67
84
|
/**
|
|
68
85
|
* @class MeetingInfo
|
|
69
86
|
*/
|
|
@@ -89,6 +106,12 @@ export default class MeetingInfoV2 {
|
|
|
89
106
|
* @returns {void}
|
|
90
107
|
*/
|
|
91
108
|
handlePolicyError: (err: any) => void;
|
|
109
|
+
/**
|
|
110
|
+
* Raises a handleWebinarRegistrationError for webinar registration error codes
|
|
111
|
+
* @param {any} err the error from the request
|
|
112
|
+
* @returns {void}
|
|
113
|
+
*/
|
|
114
|
+
handleWebinarRegistrationError: (err: any) => void;
|
|
92
115
|
/**
|
|
93
116
|
* Creates adhoc space meetings for a space by fetching the conversation infomation
|
|
94
117
|
* @param {String} conversationUrl conversationUrl to start adhoc meeting on
|