@webex/plugin-meetings 1.144.2 → 1.146.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["index.js"],"names":["OSMap","OS_NAME","chrome","macOS","MAC","Windows","WINDOWS","iOS","IOS","Android","ANDROID","Linux","LINUX","getOSName","getOSVersion","getBrowserName","getBrowserVersion","getLocalNetworkPrefix","localIp","undefined","parts","split","join","triggerTimers","event","meeting","data","eventType","LOCUS_JOIN_RESPONSE","setStartSetupDelay","mediaType","AUDIO","VIDEO","RECEIVING_MEDIA_START","setEndSetupDelay","Metrics","instance","_events","meetingCollection","keys","webex","options","meetingId","indexOf","LoggerProxy","logger","error","get","callEvents","MEDIA_QUALITY","sendMediaQualityAnalyzerMetrics","push","sendCallAnalyzerMetrics","info","identifiers","payload","eventId","uuid","v4","version","origin","buildType","name","networkType","userAgent","userAgentToString","clientInfo","clientType","clientVersion","CLIENT_NAME","localNetworkPrefix","meetings","geoHintInfo","clientAddress","osVersion","subClientType","os","getOsName","browser","browserVersion","originTime","triggered","Date","toISOString","senderCountryCode","countryCode","canProceed","eventData","webClientDomain","window","location","hostname","Object","prototype","hasOwnProperty","call","errors","trigger","pstnAudioType","mediaCapabilities","recoveredBy","OTHERS","audioSetupDelay","videoSetupDelay","UNKNOWN","intervals","intervalData","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","err","showToUser","errorCode","body","ERROR_CODE","MEETING_ERRORS","FREE_USER_MAX_PARTICIPANTS_EXCEEDED","PAID_USER_MAX_PARTICIPANTS_EXCEEDED","SERVICE_MAX_PARTICIPANTS_EXCEEDED","INACTIVE","EXCEEDED_MAX_JOINED_PARTICIPANTS","EXCEEDED_SERVICE_MAX_PARTICIPANTS","MEETING_IS_LOCKED","MEETING_IS_TERMINATING","MEETING_REQUIRE_MODERATOR_PIN_INTENT","MEETING_REQUIRE_MODERATOR_PIN","MEETING_REQUIRE_MODERATOR_ROLE","JOIN_RESTRICTED_USER","GET_RESTRICTED_USER","CREATE_MEDIA_RESTRICTED_USER","JOIN_RESTRICTED_USER_NOT_IN_ROOM","MEETING_NOT_FOUND","NOT_WEBEX_SITE","INVALID_JOIN_TIME","PHONE_NUMBER_NOT_A_NUMBER","PHONE_NUMBER_TOO_LONG","INVALID_DIALABLE_KEY","ONE_ON_ONE_TO_SELF_NOT_ALLOWED","REMOVED_PARTICIPANT","MEETING_LINK_NOT_FOUND","PHONE_NUMBER_TOO_SHORT_AFTER_IDD","INVALID_INVITEE_ADDRESS","PMR_ACCOUNT_LOCKED","RESOURCE_GUEST_FORBIDDEN","PMR_ACCOUNT_SUSPENDED","EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE","INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST","CONVERSATION_NOT_FOUND","RECORDING_CONTROL_NOT_SUPPORTED","RECORDING_NOT_STARTED","RECORDING_NOT_ENABLED","generateErrorPayload","LOCUS_RESPONSE","shownToUser","errorPayload","category","errorDescription","fatal","notFatalErrorList","OTHER","errorData","userAgentOption","browserInfo","util","format","StaticConfig","metrics","clientName","toLowerCase","osInfo","process","env","NODE_ENV","metricName","metricFields","metricTags","fields","browser_version","os_version","sdk_version","tags","org_id","credentials","getOrgId","domain","client_id","config","Error","internal","submitClientMetrics","type"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport util from 'util';\n\nimport {includes} from 'lodash';\nimport uuid from 'uuid';\nimport window from 'global/window';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEETING_ERRORS} from '../constants';\nimport StaticConfig from '../common/config';\nimport BrowserDetection from '../common/browser-detection';\n\nimport {\n error, eventType, errorCodes as ERROR_CODE, OS_NAME, UNKNOWN, CLIENT_NAME,\n mediaType\n} from './config';\n\nconst OSMap = {\n 'Chrome OS': OS_NAME.chrome,\n macOS: OS_NAME.MAC,\n Windows: OS_NAME.WINDOWS,\n iOS: OS_NAME.IOS,\n Android: OS_NAME.ANDROID,\n Linux: OS_NAME.LINUX\n};\n\nconst {\n getOSName,\n getOSVersion,\n getBrowserName,\n getBrowserVersion\n} = BrowserDetection();\n\n// Apply a CIDR /28 format to the IP address\nconst getLocalNetworkPrefix = (localIp) => {\n if (!localIp) {\n return undefined;\n }\n const parts = localIp.split('.');\n\n // eslint-disable-next-line no-bitwise\n parts[3] &= 240;\n\n return parts.join('.');\n};\n\nconst triggerTimers = ({event, meeting, data}) => {\n switch (event) {\n case eventType.LOCUS_JOIN_RESPONSE:\n meeting.setStartSetupDelay(mediaType.AUDIO);\n meeting.setStartSetupDelay(mediaType.VIDEO);\n break;\n case eventType.RECEIVING_MEDIA_START:\n meeting.setEndSetupDelay(data.mediaType);\n break;\n\n default:\n break;\n }\n};\n\n/**\n * @description Metrics handles all the call metrics events\n * @export\n * @class Metrics\n */\nclass Metrics {\n /**\n * Create Metrics Object\n * @constructor\n * @public\n * @memberof Meetings\n */\n constructor() {\n if (!Metrics.instance) {\n /**\n * @instance\n * @type {Array}\n * @private\n * @memberof Metrics\n */\n this._events = [];\n /**\n * @instance\n * @type {MeetingCollection}\n * @private\n * @memberof Metrics\n */\n this.meetingCollection = null;\n /**\n * @instance\n * @type {MeetingCollection}\n * @private\n * @memberof Metrics\n */\n this.keys = Object.values(eventType);\n /**\n * @instance\n * @type {Metrics}\n * @private\n * @memberof Metrics\n */\n Metrics.instance = this;\n }\n\n return Metrics.instance;\n }\n\n /**\n * Initializes the Metrics singleton with a meeting Collection.\n *\n * @param {Object} meetingCollection meetings object\n * @param {Object} webex webex SDK object\n *\n * @returns {void}\n */\n initialSetup(meetingCollection, webex) {\n this.meetingCollection = meetingCollection;\n this.webex = webex;\n }\n\n /**\n * poste Meeting event metrics\n * @param {object} options {meetingId/meeting} as a json object\n * @param {Meeting} options.meeting Meeting object\n * @param {String} options.meetingId\n * @param {object} options.data\n * @param {object} options.event\n * @returns {object} null\n */\n postEvent(options) {\n const {meetingId, data = {}, event} = options;\n let {meeting} = options;\n\n if (this.keys.indexOf(event) === -1) {\n LoggerProxy.logger.error(`Metrics:index#postEvent --> Event ${event} doesn't exist in dictionary`);\n }\n\n if (!meeting && meetingId) {\n meeting = this.meetingCollection.get(meetingId);\n }\n\n if (meeting) {\n triggerTimers(options);\n\n if (!meeting.callEvents) {\n meeting.callEvents = [];\n }\n if (event === eventType.MEDIA_QUALITY) {\n data.event = event;\n meeting.sendMediaQualityAnalyzerMetrics(data);\n }\n else {\n meeting.callEvents.push(event);\n data.event = event;\n meeting.sendCallAnalyzerMetrics(data);\n }\n }\n\n else {\n LoggerProxy.logger.info(`Metrics:index#postEvent --> Event received for meetingId:${meetingId}, but meeting not found in collection.`);\n }\n }\n\n /**\n * Docs for Call analyzer metrics\n * https://sqbu-github.cisco.com/WebExSquared/call-analyzer/wiki\n * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/master/diagnostic-events.raml\n */\n\n initPayload(eventType, identifiers, options) {\n const payload = {\n eventId: uuid.v4(),\n version: 1,\n origin: {\n buildType: 'prod',\n name: 'endpoint',\n networkType: 'unknown',\n userAgent: this.userAgentToString(),\n clientInfo: {\n clientType: options.clientType,\n clientVersion: `${CLIENT_NAME}/${this.webex.version}`,\n localNetworkPrefix: getLocalNetworkPrefix(this.webex.meetings.geoHintInfo?.clientAddress),\n osVersion: getOSVersion() || 'unknown',\n subClientType: options.subClientType,\n os: this.getOsName(),\n browser: getBrowserName(),\n browserVersion: getBrowserVersion()\n }\n },\n originTime: {\n triggered: new Date().toISOString()\n },\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: {\n name: eventType,\n canProceed: true,\n identifiers,\n eventData: {webClientDomain: window.location.hostname}\n }\n };\n\n // TODO: more options should be checked and some of them should be mandatory in certain conditions\n if (options) {\n if (Object.prototype.hasOwnProperty.call(options, 'canProceed')) {\n payload.event.canProceed = options.canProceed;\n }\n if (options.errors) {\n payload.event.errors = options.errors;\n }\n if (options.mediaType) {\n payload.event.mediaType = options.mediaType;\n }\n if (options.trigger) {\n payload.event.trigger = options.trigger;\n }\n if (options.pstnAudioType) {\n payload.event.pstnAudioType = options.pstnAudioType;\n }\n if (options.mediaCapabilities) {\n payload.event.mediaCapabilities = options.mediaCapabilities;\n }\n if (options.recoveredBy) {\n payload.event.recoveredBy = options.recoveredBy;\n }\n }\n\n return payload;\n }\n\n /**\n * returns metrics friendly OS versions\n * @param {String} osName Os name\n * @returns {String}\n * @private\n * @memberof Metrics\n */\n getOsName() {\n return OSMap[getOSName()] ?? OS_NAME.OTHERS;\n }\n\n /**\n * get the payload specific for a media quality event through call analyzer\n * @param {String} eventType the event name\n * @param {Object} identifiers contains the identifiers needed for CA\n * @param {String} identifiers.correlationId\n * @param {String} identifiers.locusUrl\n * @param {String} identifiers.locusId\n * @param {Object} options\n * @param {Object} options.intervalData\n * @param {String} options.clientType\n * @returns {Object}\n * @public\n * @memberof Metrics\n */\n initMediaPayload(eventType, identifiers, options = {}) {\n const {audioSetupDelay, videoSetupDelay} = options;\n\n const payload = {\n eventId: uuid.v4(),\n version: 1,\n origin: {\n audioSetupDelay,\n videoSetupDelay,\n buildType: 'prod',\n name: 'endpoint',\n networkType: options.networkType || UNKNOWN,\n userAgent: this.userAgentToString(),\n clientInfo: {\n clientType: options.clientType, // TODO: Only clientType: 'TEAMS_CLIENT' is whitelisted\n clientVersion: `${CLIENT_NAME}/${this.webex.version}`,\n localNetworkPrefix: getLocalNetworkPrefix(this.webex.meetings.geoHintInfo?.clientAddress),\n os: this.getOsName(),\n osVersion: getOSVersion() || UNKNOWN,\n subClientType: options.subClientType,\n browser: getBrowserName(),\n browserVersion: getBrowserVersion()\n }\n },\n originTime: {\n triggered: new Date().toISOString()\n },\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: {\n name: eventType,\n canProceed: true,\n identifiers,\n intervals: [options.intervalData],\n eventData: {webClientDomain: window.location.hostname},\n sourceMetadata: {\n applicationSoftwareType: CLIENT_NAME,\n applicationSoftwareVersion: this.webex.version,\n mediaEngineSoftwareType: getBrowserName() || 'browser',\n mediaEngineSoftwareVersion: getOSVersion() || UNKNOWN,\n startTime: new Date().toISOString()\n }\n }\n };\n\n return payload;\n }\n\n /**\n * This function Parses a Locus error and returns a diagnostic event payload.\n * It should keep updating from:\n * https://sqbu-github.cisco.com/WebExSquared/spark-client-framework/blob/master/spark-client-framework/Adapters/TelephonyAdapter/TelephonyAdapter.cpp#L920\n *\n * @param {Object} err the error Object from Locus response\n * @param {boolean} showToUser true if a toast is shown to user\n * @returns {{showToUser: boolean, category: string, errorDescription: string,\n * errorCode: number, errorData: *, fatal: boolean, name: string}}\n */\n parseLocusError(err, showToUser) {\n let errorCode;\n\n if (err && err.body && err.body.errorCode) {\n switch (ERROR_CODE[err.body.errorCode]) {\n case MEETING_ERRORS.FREE_USER_MAX_PARTICIPANTS_EXCEEDED:\n errorCode = 3007;\n break;\n case MEETING_ERRORS.PAID_USER_MAX_PARTICIPANTS_EXCEEDED:\n case MEETING_ERRORS.SERVICE_MAX_PARTICIPANTS_EXCEEDED:\n errorCode = 3002;\n break;\n case MEETING_ERRORS.INACTIVE:\n errorCode = 4001;\n break;\n case MEETING_ERRORS.EXCEEDED_MAX_JOINED_PARTICIPANTS:\n case MEETING_ERRORS.EXCEEDED_SERVICE_MAX_PARTICIPANTS:\n errorCode = 3001;\n break;\n case MEETING_ERRORS.MEETING_IS_LOCKED:\n errorCode = 4002;\n break;\n case MEETING_ERRORS.MEETING_IS_TERMINATING:\n errorCode = 4003;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN_INTENT:\n errorCode = 4004;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN:\n errorCode = 4005;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_ROLE:\n errorCode = 4006;\n break;\n case MEETING_ERRORS.JOIN_RESTRICTED_USER:\n case MEETING_ERRORS.GET_RESTRICTED_USER:\n case MEETING_ERRORS.CREATE_MEDIA_RESTRICTED_USER:\n errorCode = 3005;\n break;\n case MEETING_ERRORS.JOIN_RESTRICTED_USER_NOT_IN_ROOM:\n errorCode = 4007;\n break;\n case MEETING_ERRORS.MEETING_NOT_FOUND:\n errorCode = 4011;\n break;\n case MEETING_ERRORS.NOT_WEBEX_SITE:\n errorCode = 4012;\n break;\n case MEETING_ERRORS.INVALID_JOIN_TIME:\n errorCode = 4013;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_NOT_A_NUMBER:\n errorCode = 4016;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_TOO_LONG:\n errorCode = 4017;\n break;\n case MEETING_ERRORS.INVALID_DIALABLE_KEY:\n errorCode = 4018;\n break;\n case MEETING_ERRORS.ONE_ON_ONE_TO_SELF_NOT_ALLOWED:\n errorCode = 4019;\n break;\n case MEETING_ERRORS.REMOVED_PARTICIPANT:\n errorCode = 4020;\n break;\n case MEETING_ERRORS.MEETING_LINK_NOT_FOUND:\n errorCode = 4021;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_TOO_SHORT_AFTER_IDD:\n errorCode = 4022;\n break;\n case MEETING_ERRORS.INVALID_INVITEE_ADDRESS:\n errorCode = 4023;\n break;\n case MEETING_ERRORS.PMR_ACCOUNT_LOCKED:\n errorCode = 4024;\n break;\n case MEETING_ERRORS.RESOURCE_GUEST_FORBIDDEN:\n errorCode = 4025;\n break;\n case MEETING_ERRORS.PMR_ACCOUNT_SUSPENDED:\n errorCode = 4026;\n break;\n case MEETING_ERRORS.EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE:\n errorCode = 4027;\n break;\n case MEETING_ERRORS.INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST:\n errorCode = 1006;\n break;\n case MEETING_ERRORS.CONVERSATION_NOT_FOUND:\n errorCode = 4028;\n break;\n case MEETING_ERRORS.RECORDING_CONTROL_NOT_SUPPORTED:\n case MEETING_ERRORS.RECORDING_NOT_STARTED:\n case MEETING_ERRORS.RECORDING_NOT_ENABLED:\n errorCode = 4029;\n break;\n default:\n errorCode = 4008;\n }\n }\n else {\n errorCode = 4008;\n }\n\n return this.generateErrorPayload(\n errorCode, showToUser, error.name.LOCUS_RESPONSE, err\n );\n }\n\n\n generateErrorPayload(errorCode, shownToUser, name, err) {\n if (error.errors[errorCode]) {\n const errorPayload = {\n shownToUser: shownToUser || false,\n category: error.errors[errorCode][2],\n errorDescription: error.errors[errorCode][0],\n errorCode,\n fatal: !includes(error.notFatalErrorList, errorCode),\n name: name || error.name.OTHER\n };\n\n if (err && err.body) {\n errorPayload.errorData = err.body;\n }\n\n return errorPayload;\n }\n\n return null;\n }\n\n /**\n * Returns a formated string of the user agent.\n *\n * @returns {string} formatted user agent information\n */\n userAgentToString() {\n let userAgentOption;\n let browserInfo;\n const clientInfo = util.format('client=%s', `${StaticConfig.meetings.metrics.clientName}`);\n\n if (['chrome', 'firefox', 'msie', 'msedge', 'safari'].indexOf(getBrowserName().toLowerCase()) !== -1) {\n browserInfo = util.format('browser=%s', `${getBrowserName().toLowerCase()}/${getBrowserVersion().split('.')[0]}`);\n }\n const osInfo = util.format('os=%s', `${getOSName()}/${getOSVersion().split('.')[0]}`);\n\n if (browserInfo) {\n userAgentOption = `(${browserInfo}`;\n }\n if (osInfo) {\n userAgentOption = userAgentOption ? `${userAgentOption}; ${clientInfo}; ${osInfo}` : `${clientInfo}; (${osInfo}`;\n }\n if (userAgentOption) {\n userAgentOption += ')';\n\n return util.format('webex-js-sdk/%s %s', `${process.env.NODE_ENV}-${this.webex.version}`, userAgentOption);\n }\n\n return util.format('webex-js-sdk/%s', `${process.env.NODE_ENV}-${this.webex.version}`);\n }\n\n /**\n * Uploads given metric to the Metrics service as an operational metric.\n * Metadata about the environment such as browser, OS, SDK and their versions\n * are automatically added when the metric is sent.\n *\n * The Metrics service will send an operational metric to InfluxDB for\n * aggregation.\n * See https://confluence-eng-gpk2.cisco.com/conf/display/WBXT/Getting+started+with+Metrics+Service.\n *\n * @param {string} metricName Name of the metric (measurement) to send\n * @param {Object} metricFields Key-valye pairs of data or values about this metric\n * @param {Object} metricTags Key-value pairs of metric metadata\n *\n * @returns {void}\n */\n sendOperationalMetric(metricName, metricFields = {}, metricTags = {}) {\n const fields = {\n ...metricFields,\n browser_version: getBrowserVersion(),\n os_version: getOSVersion(),\n sdk_version: this.webex.version\n };\n\n const tags = {\n ...metricTags,\n browser: getBrowserName(),\n org_id: this.webex.credentials.getOrgId(),\n os: getOSName(),\n domain: window.location.hostname,\n client_id: this.webex.credentials.config.client_id\n };\n\n if (!metricName) {\n throw Error('Missing operational metric name. Please provide one');\n }\n\n this.webex.internal.metrics.submitClientMetrics(metricName, {\n type: ['operational'],\n fields,\n tags\n });\n }\n}\n\n// Export Metrics singleton ---------------------------------------------------\nconst instance = new Metrics();\n\nexport default instance;\n"]}
1
+ {"version":3,"sources":["index.js"],"names":["OSMap","OS_NAME","chrome","macOS","MAC","Windows","WINDOWS","iOS","IOS","Android","ANDROID","Linux","LINUX","getOSName","getOSVersion","getBrowserName","getBrowserVersion","getLocalNetworkPrefix","localIp","undefined","parts","split","join","triggerTimers","event","meeting","data","eventType","LOCUS_JOIN_RESPONSE","setStartSetupDelay","mediaType","AUDIO","VIDEO","RECEIVING_MEDIA_START","setEndSetupDelay","Metrics","instance","_events","meetingCollection","keys","webex","options","meetingId","indexOf","LoggerProxy","logger","error","get","callEvents","MEDIA_QUALITY","sendMediaQualityAnalyzerMetrics","push","sendCallAnalyzerMetrics","info","identifiers","payload","eventId","uuid","v4","version","origin","name","networkType","userAgent","userAgentToString","clientInfo","clientType","clientVersion","CLIENT_NAME","localNetworkPrefix","meetings","geoHintInfo","clientAddress","osVersion","subClientType","os","getOsName","browser","browserVersion","originTime","triggered","Date","toISOString","senderCountryCode","countryCode","canProceed","eventData","webClientDomain","window","location","hostname","Object","prototype","hasOwnProperty","call","errors","trigger","pstnAudioType","mediaCapabilities","recoveredBy","OTHERS","audioSetupDelay","videoSetupDelay","UNKNOWN","intervals","intervalData","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","err","showToUser","errorCode","body","ERROR_CODE","MEETING_ERRORS","FREE_USER_MAX_PARTICIPANTS_EXCEEDED","PAID_USER_MAX_PARTICIPANTS_EXCEEDED","SERVICE_MAX_PARTICIPANTS_EXCEEDED","INACTIVE","EXCEEDED_MAX_JOINED_PARTICIPANTS","EXCEEDED_SERVICE_MAX_PARTICIPANTS","MEETING_IS_LOCKED","MEETING_IS_TERMINATING","MEETING_REQUIRE_MODERATOR_PIN_INTENT","MEETING_REQUIRE_MODERATOR_PIN","MEETING_REQUIRE_MODERATOR_ROLE","JOIN_RESTRICTED_USER","GET_RESTRICTED_USER","CREATE_MEDIA_RESTRICTED_USER","JOIN_RESTRICTED_USER_NOT_IN_ROOM","MEETING_NOT_FOUND","NOT_WEBEX_SITE","INVALID_JOIN_TIME","PHONE_NUMBER_NOT_A_NUMBER","PHONE_NUMBER_TOO_LONG","INVALID_DIALABLE_KEY","ONE_ON_ONE_TO_SELF_NOT_ALLOWED","REMOVED_PARTICIPANT","MEETING_LINK_NOT_FOUND","PHONE_NUMBER_TOO_SHORT_AFTER_IDD","INVALID_INVITEE_ADDRESS","PMR_ACCOUNT_LOCKED","RESOURCE_GUEST_FORBIDDEN","PMR_ACCOUNT_SUSPENDED","EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE","INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST","CONVERSATION_NOT_FOUND","RECORDING_CONTROL_NOT_SUPPORTED","RECORDING_NOT_STARTED","RECORDING_NOT_ENABLED","generateErrorPayload","LOCUS_RESPONSE","shownToUser","errorPayload","category","errorDescription","fatal","notFatalErrorList","OTHER","errorData","userAgentOption","browserInfo","util","format","StaticConfig","metrics","clientName","toLowerCase","osInfo","process","env","NODE_ENV","metricName","metricFields","metricTags","fields","browser_version","os_version","sdk_version","tags","org_id","credentials","getOrgId","domain","client_id","config","Error","internal","submitClientMetrics","type"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport util from 'util';\n\nimport {includes} from 'lodash';\nimport uuid from 'uuid';\nimport window from 'global/window';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEETING_ERRORS} from '../constants';\nimport StaticConfig from '../common/config';\nimport BrowserDetection from '../common/browser-detection';\n\nimport {\n error, eventType, errorCodes as ERROR_CODE, OS_NAME, UNKNOWN, CLIENT_NAME,\n mediaType\n} from './config';\n\nconst OSMap = {\n 'Chrome OS': OS_NAME.chrome,\n macOS: OS_NAME.MAC,\n Windows: OS_NAME.WINDOWS,\n iOS: OS_NAME.IOS,\n Android: OS_NAME.ANDROID,\n Linux: OS_NAME.LINUX\n};\n\nconst {\n getOSName,\n getOSVersion,\n getBrowserName,\n getBrowserVersion\n} = BrowserDetection();\n\n// Apply a CIDR /28 format to the IP address\nconst getLocalNetworkPrefix = (localIp) => {\n if (!localIp) {\n return undefined;\n }\n const parts = localIp.split('.');\n\n // eslint-disable-next-line no-bitwise\n parts[3] &= 240;\n\n return parts.join('.');\n};\n\nconst triggerTimers = ({event, meeting, data}) => {\n switch (event) {\n case eventType.LOCUS_JOIN_RESPONSE:\n meeting.setStartSetupDelay(mediaType.AUDIO);\n meeting.setStartSetupDelay(mediaType.VIDEO);\n break;\n case eventType.RECEIVING_MEDIA_START:\n meeting.setEndSetupDelay(data.mediaType);\n break;\n\n default:\n break;\n }\n};\n\n/**\n * @description Metrics handles all the call metrics events\n * @export\n * @class Metrics\n */\nclass Metrics {\n /**\n * Create Metrics Object\n * @constructor\n * @public\n * @memberof Meetings\n */\n constructor() {\n if (!Metrics.instance) {\n /**\n * @instance\n * @type {Array}\n * @private\n * @memberof Metrics\n */\n this._events = [];\n /**\n * @instance\n * @type {MeetingCollection}\n * @private\n * @memberof Metrics\n */\n this.meetingCollection = null;\n /**\n * @instance\n * @type {MeetingCollection}\n * @private\n * @memberof Metrics\n */\n this.keys = Object.values(eventType);\n /**\n * @instance\n * @type {Metrics}\n * @private\n * @memberof Metrics\n */\n Metrics.instance = this;\n }\n\n return Metrics.instance;\n }\n\n /**\n * Initializes the Metrics singleton with a meeting Collection.\n *\n * @param {Object} meetingCollection meetings object\n * @param {Object} webex webex SDK object\n *\n * @returns {void}\n */\n initialSetup(meetingCollection, webex) {\n this.meetingCollection = meetingCollection;\n this.webex = webex;\n }\n\n /**\n * poste Meeting event metrics\n * @param {object} options {meetingId/meeting} as a json object\n * @param {Meeting} options.meeting Meeting object\n * @param {String} options.meetingId\n * @param {object} options.data\n * @param {object} options.event\n * @returns {object} null\n */\n postEvent(options) {\n const {meetingId, data = {}, event} = options;\n let {meeting} = options;\n\n if (this.keys.indexOf(event) === -1) {\n LoggerProxy.logger.error(`Metrics:index#postEvent --> Event ${event} doesn't exist in dictionary`);\n }\n\n if (!meeting && meetingId) {\n meeting = this.meetingCollection.get(meetingId);\n }\n\n if (meeting) {\n triggerTimers(options);\n\n if (!meeting.callEvents) {\n meeting.callEvents = [];\n }\n if (event === eventType.MEDIA_QUALITY) {\n data.event = event;\n meeting.sendMediaQualityAnalyzerMetrics(data);\n }\n else {\n meeting.callEvents.push(event);\n data.event = event;\n meeting.sendCallAnalyzerMetrics(data);\n }\n }\n\n else {\n LoggerProxy.logger.info(`Metrics:index#postEvent --> Event received for meetingId:${meetingId}, but meeting not found in collection.`);\n }\n }\n\n /**\n * Docs for Call analyzer metrics\n * https://sqbu-github.cisco.com/WebExSquared/call-analyzer/wiki\n * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/master/diagnostic-events.raml\n */\n\n initPayload(eventType, identifiers, options) {\n const payload = {\n eventId: uuid.v4(),\n version: 1,\n origin: {\n name: 'endpoint',\n networkType: 'unknown',\n userAgent: this.userAgentToString(),\n clientInfo: {\n clientType: options.clientType,\n clientVersion: `${CLIENT_NAME}/${this.webex.version}`,\n localNetworkPrefix: getLocalNetworkPrefix(this.webex.meetings.geoHintInfo?.clientAddress),\n osVersion: getOSVersion() || 'unknown',\n subClientType: options.subClientType,\n os: this.getOsName(),\n browser: getBrowserName(),\n browserVersion: getBrowserVersion()\n }\n },\n originTime: {\n triggered: new Date().toISOString()\n },\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: {\n name: eventType,\n canProceed: true,\n identifiers,\n eventData: {webClientDomain: window.location.hostname}\n }\n };\n\n // TODO: more options should be checked and some of them should be mandatory in certain conditions\n if (options) {\n if (Object.prototype.hasOwnProperty.call(options, 'canProceed')) {\n payload.event.canProceed = options.canProceed;\n }\n if (options.errors) {\n payload.event.errors = options.errors;\n }\n if (options.mediaType) {\n payload.event.mediaType = options.mediaType;\n }\n if (options.trigger) {\n payload.event.trigger = options.trigger;\n }\n if (options.pstnAudioType) {\n payload.event.pstnAudioType = options.pstnAudioType;\n }\n if (options.mediaCapabilities) {\n payload.event.mediaCapabilities = options.mediaCapabilities;\n }\n if (options.recoveredBy) {\n payload.event.recoveredBy = options.recoveredBy;\n }\n }\n\n return payload;\n }\n\n /**\n * returns metrics friendly OS versions\n * @param {String} osName Os name\n * @returns {String}\n * @private\n * @memberof Metrics\n */\n getOsName() {\n return OSMap[getOSName()] ?? OS_NAME.OTHERS;\n }\n\n /**\n * get the payload specific for a media quality event through call analyzer\n * @param {String} eventType the event name\n * @param {Object} identifiers contains the identifiers needed for CA\n * @param {String} identifiers.correlationId\n * @param {String} identifiers.locusUrl\n * @param {String} identifiers.locusId\n * @param {Object} options\n * @param {Object} options.intervalData\n * @param {String} options.clientType\n * @returns {Object}\n * @public\n * @memberof Metrics\n */\n initMediaPayload(eventType, identifiers, options = {}) {\n const {audioSetupDelay, videoSetupDelay} = options;\n\n const payload = {\n eventId: uuid.v4(),\n version: 1,\n origin: {\n audioSetupDelay,\n videoSetupDelay,\n name: 'endpoint',\n networkType: options.networkType || UNKNOWN,\n userAgent: this.userAgentToString(),\n clientInfo: {\n clientType: options.clientType, // TODO: Only clientType: 'TEAMS_CLIENT' is whitelisted\n clientVersion: `${CLIENT_NAME}/${this.webex.version}`,\n localNetworkPrefix: getLocalNetworkPrefix(this.webex.meetings.geoHintInfo?.clientAddress),\n os: this.getOsName(),\n osVersion: getOSVersion() || UNKNOWN,\n subClientType: options.subClientType,\n browser: getBrowserName(),\n browserVersion: getBrowserVersion()\n }\n },\n originTime: {\n triggered: new Date().toISOString()\n },\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: {\n name: eventType,\n canProceed: true,\n identifiers,\n intervals: [options.intervalData],\n eventData: {webClientDomain: window.location.hostname},\n sourceMetadata: {\n applicationSoftwareType: CLIENT_NAME,\n applicationSoftwareVersion: this.webex.version,\n mediaEngineSoftwareType: getBrowserName() || 'browser',\n mediaEngineSoftwareVersion: getOSVersion() || UNKNOWN,\n startTime: new Date().toISOString()\n }\n }\n };\n\n return payload;\n }\n\n /**\n * This function Parses a Locus error and returns a diagnostic event payload.\n * It should keep updating from:\n * https://sqbu-github.cisco.com/WebExSquared/spark-client-framework/blob/master/spark-client-framework/Adapters/TelephonyAdapter/TelephonyAdapter.cpp#L920\n *\n * @param {Object} err the error Object from Locus response\n * @param {boolean} showToUser true if a toast is shown to user\n * @returns {{showToUser: boolean, category: string, errorDescription: string,\n * errorCode: number, errorData: *, fatal: boolean, name: string}}\n */\n parseLocusError(err, showToUser) {\n let errorCode;\n\n if (err && err.body && err.body.errorCode) {\n switch (ERROR_CODE[err.body.errorCode]) {\n case MEETING_ERRORS.FREE_USER_MAX_PARTICIPANTS_EXCEEDED:\n errorCode = 3007;\n break;\n case MEETING_ERRORS.PAID_USER_MAX_PARTICIPANTS_EXCEEDED:\n case MEETING_ERRORS.SERVICE_MAX_PARTICIPANTS_EXCEEDED:\n errorCode = 3002;\n break;\n case MEETING_ERRORS.INACTIVE:\n errorCode = 4001;\n break;\n case MEETING_ERRORS.EXCEEDED_MAX_JOINED_PARTICIPANTS:\n case MEETING_ERRORS.EXCEEDED_SERVICE_MAX_PARTICIPANTS:\n errorCode = 3001;\n break;\n case MEETING_ERRORS.MEETING_IS_LOCKED:\n errorCode = 4002;\n break;\n case MEETING_ERRORS.MEETING_IS_TERMINATING:\n errorCode = 4003;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN_INTENT:\n errorCode = 4004;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN:\n errorCode = 4005;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_ROLE:\n errorCode = 4006;\n break;\n case MEETING_ERRORS.JOIN_RESTRICTED_USER:\n case MEETING_ERRORS.GET_RESTRICTED_USER:\n case MEETING_ERRORS.CREATE_MEDIA_RESTRICTED_USER:\n errorCode = 3005;\n break;\n case MEETING_ERRORS.JOIN_RESTRICTED_USER_NOT_IN_ROOM:\n errorCode = 4007;\n break;\n case MEETING_ERRORS.MEETING_NOT_FOUND:\n errorCode = 4011;\n break;\n case MEETING_ERRORS.NOT_WEBEX_SITE:\n errorCode = 4012;\n break;\n case MEETING_ERRORS.INVALID_JOIN_TIME:\n errorCode = 4013;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_NOT_A_NUMBER:\n errorCode = 4016;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_TOO_LONG:\n errorCode = 4017;\n break;\n case MEETING_ERRORS.INVALID_DIALABLE_KEY:\n errorCode = 4018;\n break;\n case MEETING_ERRORS.ONE_ON_ONE_TO_SELF_NOT_ALLOWED:\n errorCode = 4019;\n break;\n case MEETING_ERRORS.REMOVED_PARTICIPANT:\n errorCode = 4020;\n break;\n case MEETING_ERRORS.MEETING_LINK_NOT_FOUND:\n errorCode = 4021;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_TOO_SHORT_AFTER_IDD:\n errorCode = 4022;\n break;\n case MEETING_ERRORS.INVALID_INVITEE_ADDRESS:\n errorCode = 4023;\n break;\n case MEETING_ERRORS.PMR_ACCOUNT_LOCKED:\n errorCode = 4024;\n break;\n case MEETING_ERRORS.RESOURCE_GUEST_FORBIDDEN:\n errorCode = 4025;\n break;\n case MEETING_ERRORS.PMR_ACCOUNT_SUSPENDED:\n errorCode = 4026;\n break;\n case MEETING_ERRORS.EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE:\n errorCode = 4027;\n break;\n case MEETING_ERRORS.INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST:\n errorCode = 1006;\n break;\n case MEETING_ERRORS.CONVERSATION_NOT_FOUND:\n errorCode = 4028;\n break;\n case MEETING_ERRORS.RECORDING_CONTROL_NOT_SUPPORTED:\n case MEETING_ERRORS.RECORDING_NOT_STARTED:\n case MEETING_ERRORS.RECORDING_NOT_ENABLED:\n errorCode = 4029;\n break;\n default:\n errorCode = 4008;\n }\n }\n else {\n errorCode = 4008;\n }\n\n return this.generateErrorPayload(\n errorCode, showToUser, error.name.LOCUS_RESPONSE, err\n );\n }\n\n\n generateErrorPayload(errorCode, shownToUser, name, err) {\n if (error.errors[errorCode]) {\n const errorPayload = {\n shownToUser: shownToUser || false,\n category: error.errors[errorCode][2],\n errorDescription: error.errors[errorCode][0],\n errorCode,\n fatal: !includes(error.notFatalErrorList, errorCode),\n name: name || error.name.OTHER\n };\n\n if (err && err.body) {\n errorPayload.errorData = err.body;\n }\n\n return errorPayload;\n }\n\n return null;\n }\n\n /**\n * Returns a formated string of the user agent.\n *\n * @returns {string} formatted user agent information\n */\n userAgentToString() {\n let userAgentOption;\n let browserInfo;\n const clientInfo = util.format('client=%s', `${StaticConfig.meetings.metrics.clientName}`);\n\n if (['chrome', 'firefox', 'msie', 'msedge', 'safari'].indexOf(getBrowserName().toLowerCase()) !== -1) {\n browserInfo = util.format('browser=%s', `${getBrowserName().toLowerCase()}/${getBrowserVersion().split('.')[0]}`);\n }\n const osInfo = util.format('os=%s', `${getOSName()}/${getOSVersion().split('.')[0]}`);\n\n if (browserInfo) {\n userAgentOption = `(${browserInfo}`;\n }\n if (osInfo) {\n userAgentOption = userAgentOption ? `${userAgentOption}; ${clientInfo}; ${osInfo}` : `${clientInfo}; (${osInfo}`;\n }\n if (userAgentOption) {\n userAgentOption += ')';\n\n return util.format('webex-js-sdk/%s %s', `${process.env.NODE_ENV}-${this.webex.version}`, userAgentOption);\n }\n\n return util.format('webex-js-sdk/%s', `${process.env.NODE_ENV}-${this.webex.version}`);\n }\n\n /**\n * Uploads given metric to the Metrics service as an operational metric.\n * Metadata about the environment such as browser, OS, SDK and their versions\n * are automatically added when the metric is sent.\n *\n * The Metrics service will send an operational metric to InfluxDB for\n * aggregation.\n * See https://confluence-eng-gpk2.cisco.com/conf/display/WBXT/Getting+started+with+Metrics+Service.\n *\n * @param {string} metricName Name of the metric (measurement) to send\n * @param {Object} metricFields Key-valye pairs of data or values about this metric\n * @param {Object} metricTags Key-value pairs of metric metadata\n *\n * @returns {void}\n */\n sendOperationalMetric(metricName, metricFields = {}, metricTags = {}) {\n const fields = {\n ...metricFields,\n browser_version: getBrowserVersion(),\n os_version: getOSVersion(),\n sdk_version: this.webex.version\n };\n\n const tags = {\n ...metricTags,\n browser: getBrowserName(),\n org_id: this.webex.credentials.getOrgId(),\n os: getOSName(),\n domain: window.location.hostname,\n client_id: this.webex.credentials.config.client_id\n };\n\n if (!metricName) {\n throw Error('Missing operational metric name. Please provide one');\n }\n\n this.webex.internal.metrics.submitClientMetrics(metricName, {\n type: ['operational'],\n fields,\n tags\n });\n }\n}\n\n// Export Metrics singleton ---------------------------------------------------\nconst instance = new Metrics();\n\nexport default instance;\n"]}
@@ -258,6 +258,8 @@ var RoapHandler = /*#__PURE__*/function (_StatelessWebexPlugin) {
258
258
 
259
259
  switch (action.type) {
260
260
  case _constants.ROAP.RECEIVE_ROAP_MSG:
261
+ _loggerProxy.default.logger.log("Roap:handler#handleAction --> RECEIVE_ROAP_MSG event captured, reciving a roap message : ".concat((0, _stringify.default)(action)));
262
+
261
263
  if (compareWithLastRoapMessage(this.lastRoapMessage, action)) {
262
264
  _loggerProxy.default.logger.warn("Roap:handler#handleAction --> duplicate roap offer from server: ".concat(action.msg.seq));
263
265
  } else {
@@ -269,19 +271,16 @@ var RoapHandler = /*#__PURE__*/function (_StatelessWebexPlugin) {
269
271
  break;
270
272
 
271
273
  case _constants.ROAP.SEND_ROAP_MSG:
274
+ _loggerProxy.default.logger.log("Roap:handler#handleAction --> SEND_ROAP_MSG event captured, sending roap message ".concat((0, _stringify.default)(action)));
275
+
272
276
  action.local = true;
273
277
  this.execute(signal, session, action, meeting, _constants.ROAP.TX_);
274
278
  break;
275
279
 
276
280
  case _constants.ROAP.SEND_ROAP_MSG_SUCCESS:
277
- // This means we got and answer and waiting for 200 ok for /participants
278
- if (_collection.default.getSessionSequence(correlationId, action.seq).ANSWER) {
279
- signal = _constants.ROAP.ROAP_SIGNAL.RX_ANSWER; // NOTE: When server send back an answer via mercury the
280
- // remote SDP is already saved sent and ok message is sent back
281
- // We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS
282
- // RoapHandler.transition(signal, session, meeting);
283
- }
284
-
281
+ // NOTE: When server send back an answer via mercury the
282
+ // remote SDP is already saved sent and ok message is sent back
283
+ // We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS
285
284
  break;
286
285
 
287
286
  case _constants.ROAP.RECEIVE_CALL_LEAVE:
@@ -1 +1 @@
1
- {"version":3,"sources":["handler.js"],"names":["checkForAndHandleErrors","action","meeting","correlationId","type","msg","messageType","errorType","RoapUtil","findError","handleError","mediaProperties","peerConnection","then","res","RoapCollection","deleteSessionSequence","seq","catch","err","LoggerProxy","logger","warn","ensureMeeting","compareWithLastRoapMessage","lastRoapMessage","currentRoapMessage","handleSessionStep","roap","session","locusUrl","sequenceId","OFFER","_OFFER_","GLARE_OFFER","remote","metricName","METRICS_OPERATIONAL_MEASURES","ROAP_GLARE_CONDITION","data","correlation_id","locus_id","split","pop","sequence","Metrics","sendOperationalMetric","info","state","RoapHandler","attrs","options","roapOk","roapAnswer","roapFinished","ROAP","ROAP_STATE","INIT","WAIT_TX_ANSWER","shouldHandleMedia","updatePeerConnection","answerSdps","locusId","locusSelfId","locusInfo","self","id","mediaId","sdps","audioMuted","isAudioMuted","videoMuted","isVideoMuted","error","ROAP_ANSWER_FAILURE","reason","message","stack","metadata","name","WAIT_TX_OK","setRemoteDescription","ERROR","GLARE","tieBreaker","log","step","ROAP_SIGNAL","GLARE_RESOLVED","perform","signal","prefix","RECEIVE_ROAP_MSG","execute","RX_","SEND_ROAP_MSG","local","TX_","SEND_ROAP_MSG_SUCCESS","getSessionSequence","ANSWER","RX_ANSWER","RECEIVE_CALL_LEAVE","deleteSession","RESET_ROAP_STATE","webex","meetings","meetingCollection","getByKey","handleAction","StatelessWebexPlugin"],"mappings":"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","sourcesContent":["/* no-param-reassign */\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_, METRICS_OPERATIONAL_MEASURES} from '../constants';\nimport Metrics from '../metrics';\n\nimport RoapUtil from './util';\nimport RoapCollection from './collection';\n\n\nconst checkForAndHandleErrors = (action, meeting, correlationId) => {\n if (action && action.type) {\n if (action.msg && action.msg.messageType && action.msg.errorType) {\n if (RoapUtil.findError(action.msg.messageType, action.msg.errorType, action.type)) {\n RoapUtil.handleError(meeting.mediaProperties.peerConnection)\n .then((res) => {\n if (res) {\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.warn(`Roap:handler#checkForAndHandleErrors --> Cannot reset the peer connection with error: ${err}`);\n });\n\n return true;\n }\n }\n if (!RoapUtil.ensureMeeting(meeting, action.type)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst compareWithLastRoapMessage = (lastRoapMessage, currentRoapMessage) => lastRoapMessage?.msg?.seq === currentRoapMessage.msg.seq && lastRoapMessage?.msg?.messageType === currentRoapMessage.msg.messageType;\n\nconst handleSessionStep = ({\n roap, session, locusUrl, correlationId\n}) => {\n const {seq: sequenceId, messageType} = roap.msg;\n\n if (session.OFFER && messageType === _OFFER_) {\n session.GLARE_OFFER = roap.msg;\n session.GLARE_OFFER.remote = !!roap.remote;\n const metricName = METRICS_OPERATIONAL_MEASURES.ROAP_GLARE_CONDITION;\n const data = {\n correlation_id: correlationId,\n locus_id: locusUrl.split('/').pop(),\n sequence: sequenceId\n };\n\n Metrics.sendOperationalMetric(metricName, data);\n\n LoggerProxy.logger.warn(`Roap:handler#handleSessionStep --> Glare condition occurred with new mercury event, sequenceId: ${sequenceId}`);\n }\n else {\n LoggerProxy.logger.info(`Roap:handler#handleSessionStep --> Save OFFER/ANSWER seq:${sequenceId} new mercury event ${messageType}local state: ${JSON.stringify(session.state.state, null, 2)}`);\n session[messageType] = roap.msg;\n session[messageType].remote = !!roap.remote;\n }\n};\n\n/**\n * @class RoapHandler\n */\nexport default class RoapHandler extends StatelessWebexPlugin {\n constructor(attrs, options, roapOk, roapAnswer, roapFinished) {\n super({}, options);\n this.attrs = attrs;\n this.options = options;\n this.roapOk = roapOk;\n this.roapFinished = roapFinished;\n this.roapAnswer = roapAnswer;\n this.lastRoapMessage = null;\n }\n\n /**\n *\n * @param {Object} session\n * @param {Meeting} meeting\n * @param {Object} action\n * @returns {null}\n */\n perform(session, meeting, action) {\n switch (session.state.state) {\n case ROAP.ROAP_STATE.INIT:\n this.roapFinished(meeting.correlationId, action.msg.seq);\n break;\n\n // TODO: (important )handle roap state for sending offers as well\n // case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n // case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n // case ROAP.ROAP_STATE.WAIT_RX_OK:\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n // eslint-disable-next-line no-warning-comments\n // TODO: sometime the you get an answer while you are creating an offer so SKIP\n // Server will send the mercury event comes back\n if (RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.updatePeerConnection(meeting, session)\n .then((answerSdps) => {\n this.roapAnswer({\n locusId: meeting.locusId,\n locusSelfId: meeting.locusInfo.self.id,\n mediaId: meeting.mediaId,\n sdps: answerSdps,\n seq: session.OFFER.seq,\n correlationId: meeting.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted()\n });\n })\n .catch((error) => {\n const metricName = METRICS_OPERATIONAL_MEASURES.ROAP_ANSWER_FAILURE;\n const data = {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack\n };\n const metadata = {\n type: error.name\n };\n\n Metrics.sendOperationalMetric(metricName, data, metadata);\n LoggerProxy.logger.error(`Roap:handler#perform --> Error occured during wait receive answer, continuing, ${error}`);\n });\n }\n break;\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (!RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.setRemoteDescription(meeting, session).then((res) => {\n this.roapOk(res);\n });\n }\n break;\n // case ROAP.ROAP_STATE.IDLE_LOCAL_OFFER:\n case ROAP.ROAP_STATE.ERROR:\n LoggerProxy.logger.error(`Roap:handler#perform --> Roap State ERROR for session: ${session}`);\n break;\n case ROAP.ROAP_STATE.GLARE:\n session.GLARE_OFFER.tieBreaker = session.GLARE_OFFER.tieBreaker || 0;\n session.OFFER.tieBreaker = session.OFFER.tieBreaker || 0;\n LoggerProxy.logger.warn('Roap:handler#perform --> Roap State resolved the GLARE condition.');\n if (session.GLARE_OFFER.tieBreaker < session.OFFER.tieBreaker) {\n // 2\n LoggerProxy.logger.log('Roap:handler#perform --> Roap State local offer won after GLARE.');\n }\n else {\n LoggerProxy.logger.log('Roap:handler#perform --> Roap State remote offer won after GLARE.');\n }\n session.state.step(ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action);\n this.perform(session, meeting);\n break;\n default:\n break;\n }\n }\n\n /**\n *\n * @param {String} signal\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} prefix\n * @returns {null}\n */\n execute(signal, session, action, meeting, prefix) {\n if (session && session.state) {\n handleSessionStep({\n roap: action,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n session\n });\n signal = ROAP.ROAP_SIGNAL[`${prefix}${action.msg.messageType}`];\n session.state.step(signal, meeting, action);\n this.perform(session, meeting, action);\n }\n }\n\n /**\n *\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} correlationId\n * @returns {Boolean}\n */\n handleAction(session, action, meeting, correlationId) {\n let signal;\n\n switch (action.type) {\n case ROAP.RECEIVE_ROAP_MSG:\n if (compareWithLastRoapMessage(this.lastRoapMessage, action)) {\n LoggerProxy.logger.warn(`Roap:handler#handleAction --> duplicate roap offer from server: ${action.msg.seq}`);\n }\n else {\n this.lastRoapMessage = action;\n action.remote = true;\n this.execute(signal, session, action, meeting, ROAP.RX_);\n }\n break;\n case ROAP.SEND_ROAP_MSG:\n action.local = true;\n this.execute(signal, session, action, meeting, ROAP.TX_);\n break;\n case ROAP.SEND_ROAP_MSG_SUCCESS:\n // This means we got and answer and waiting for 200 ok for /participants\n if (RoapCollection.getSessionSequence(correlationId, action.seq).ANSWER) {\n signal = ROAP.ROAP_SIGNAL.RX_ANSWER;\n // NOTE: When server send back an answer via mercury the\n // remote SDP is already saved sent and ok message is sent back\n // We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS\n // RoapHandler.transition(signal, session, meeting);\n }\n break;\n case ROAP.RECEIVE_CALL_LEAVE:\n RoapCollection.deleteSession(correlationId);\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RECEIVE_CALL_LEAVE event captured, cleaning up the RoapHandler for correlationId: ${correlationId}`); break;\n case ROAP.RESET_ROAP_STATE:\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RESET_ROAP_STATE event captured, resetting the RoapHandler state based on sequenceId: ${action.msg.seq}`); break;\n default:\n return true;\n }\n\n return true;\n }\n\n /**\n *\n * @param {Object} action\n * @returns {Boolean}\n */\n submit(action) {\n const {correlationId} = action;\n let {seq} = action;\n\n if (!seq && action.msg) {\n seq = action.msg.seq;\n }\n const session = RoapCollection.getSessionSequence(correlationId, seq);\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n if (checkForAndHandleErrors(action, meeting, correlationId)) {\n return true;\n }\n\n return this.handleAction(session, action, meeting, correlationId);\n }\n}\n"]}
1
+ {"version":3,"sources":["handler.js"],"names":["checkForAndHandleErrors","action","meeting","correlationId","type","msg","messageType","errorType","RoapUtil","findError","handleError","mediaProperties","peerConnection","then","res","RoapCollection","deleteSessionSequence","seq","catch","err","LoggerProxy","logger","warn","ensureMeeting","compareWithLastRoapMessage","lastRoapMessage","currentRoapMessage","handleSessionStep","roap","session","locusUrl","sequenceId","OFFER","_OFFER_","GLARE_OFFER","remote","metricName","METRICS_OPERATIONAL_MEASURES","ROAP_GLARE_CONDITION","data","correlation_id","locus_id","split","pop","sequence","Metrics","sendOperationalMetric","info","state","RoapHandler","attrs","options","roapOk","roapAnswer","roapFinished","ROAP","ROAP_STATE","INIT","WAIT_TX_ANSWER","shouldHandleMedia","updatePeerConnection","answerSdps","locusId","locusSelfId","locusInfo","self","id","mediaId","sdps","audioMuted","isAudioMuted","videoMuted","isVideoMuted","error","ROAP_ANSWER_FAILURE","reason","message","stack","metadata","name","WAIT_TX_OK","setRemoteDescription","ERROR","GLARE","tieBreaker","log","step","ROAP_SIGNAL","GLARE_RESOLVED","perform","signal","prefix","RECEIVE_ROAP_MSG","execute","RX_","SEND_ROAP_MSG","local","TX_","SEND_ROAP_MSG_SUCCESS","RECEIVE_CALL_LEAVE","deleteSession","RESET_ROAP_STATE","getSessionSequence","webex","meetings","meetingCollection","getByKey","handleAction","StatelessWebexPlugin"],"mappings":"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","sourcesContent":["/* no-param-reassign */\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_, METRICS_OPERATIONAL_MEASURES} from '../constants';\nimport Metrics from '../metrics';\n\nimport RoapUtil from './util';\nimport RoapCollection from './collection';\n\n\nconst checkForAndHandleErrors = (action, meeting, correlationId) => {\n if (action && action.type) {\n if (action.msg && action.msg.messageType && action.msg.errorType) {\n if (RoapUtil.findError(action.msg.messageType, action.msg.errorType, action.type)) {\n RoapUtil.handleError(meeting.mediaProperties.peerConnection)\n .then((res) => {\n if (res) {\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.warn(`Roap:handler#checkForAndHandleErrors --> Cannot reset the peer connection with error: ${err}`);\n });\n\n return true;\n }\n }\n if (!RoapUtil.ensureMeeting(meeting, action.type)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst compareWithLastRoapMessage = (lastRoapMessage, currentRoapMessage) => lastRoapMessage?.msg?.seq === currentRoapMessage.msg.seq && lastRoapMessage?.msg?.messageType === currentRoapMessage.msg.messageType;\n\nconst handleSessionStep = ({\n roap, session, locusUrl, correlationId\n}) => {\n const {seq: sequenceId, messageType} = roap.msg;\n\n if (session.OFFER && messageType === _OFFER_) {\n session.GLARE_OFFER = roap.msg;\n session.GLARE_OFFER.remote = !!roap.remote;\n const metricName = METRICS_OPERATIONAL_MEASURES.ROAP_GLARE_CONDITION;\n const data = {\n correlation_id: correlationId,\n locus_id: locusUrl.split('/').pop(),\n sequence: sequenceId\n };\n\n Metrics.sendOperationalMetric(metricName, data);\n\n LoggerProxy.logger.warn(`Roap:handler#handleSessionStep --> Glare condition occurred with new mercury event, sequenceId: ${sequenceId}`);\n }\n else {\n LoggerProxy.logger.info(`Roap:handler#handleSessionStep --> Save OFFER/ANSWER seq:${sequenceId} new mercury event ${messageType}local state: ${JSON.stringify(session.state.state, null, 2)}`);\n session[messageType] = roap.msg;\n session[messageType].remote = !!roap.remote;\n }\n};\n\n/**\n * @class RoapHandler\n */\nexport default class RoapHandler extends StatelessWebexPlugin {\n constructor(attrs, options, roapOk, roapAnswer, roapFinished) {\n super({}, options);\n this.attrs = attrs;\n this.options = options;\n this.roapOk = roapOk;\n this.roapFinished = roapFinished;\n this.roapAnswer = roapAnswer;\n this.lastRoapMessage = null;\n }\n\n /**\n *\n * @param {Object} session\n * @param {Meeting} meeting\n * @param {Object} action\n * @returns {null}\n */\n perform(session, meeting, action) {\n switch (session.state.state) {\n case ROAP.ROAP_STATE.INIT:\n this.roapFinished(meeting.correlationId, action.msg.seq);\n break;\n\n // TODO: (important )handle roap state for sending offers as well\n // case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n // case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n // case ROAP.ROAP_STATE.WAIT_RX_OK:\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n // eslint-disable-next-line no-warning-comments\n // TODO: sometime the you get an answer while you are creating an offer so SKIP\n // Server will send the mercury event comes back\n if (RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.updatePeerConnection(meeting, session)\n .then((answerSdps) => {\n this.roapAnswer({\n locusId: meeting.locusId,\n locusSelfId: meeting.locusInfo.self.id,\n mediaId: meeting.mediaId,\n sdps: answerSdps,\n seq: session.OFFER.seq,\n correlationId: meeting.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted()\n });\n })\n .catch((error) => {\n const metricName = METRICS_OPERATIONAL_MEASURES.ROAP_ANSWER_FAILURE;\n const data = {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack\n };\n const metadata = {\n type: error.name\n };\n\n Metrics.sendOperationalMetric(metricName, data, metadata);\n LoggerProxy.logger.error(`Roap:handler#perform --> Error occured during wait receive answer, continuing, ${error}`);\n });\n }\n break;\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (!RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.setRemoteDescription(meeting, session).then((res) => {\n this.roapOk(res);\n });\n }\n break;\n // case ROAP.ROAP_STATE.IDLE_LOCAL_OFFER:\n case ROAP.ROAP_STATE.ERROR:\n LoggerProxy.logger.error(`Roap:handler#perform --> Roap State ERROR for session: ${session}`);\n break;\n case ROAP.ROAP_STATE.GLARE:\n session.GLARE_OFFER.tieBreaker = session.GLARE_OFFER.tieBreaker || 0;\n session.OFFER.tieBreaker = session.OFFER.tieBreaker || 0;\n LoggerProxy.logger.warn('Roap:handler#perform --> Roap State resolved the GLARE condition.');\n if (session.GLARE_OFFER.tieBreaker < session.OFFER.tieBreaker) {\n // 2\n LoggerProxy.logger.log('Roap:handler#perform --> Roap State local offer won after GLARE.');\n }\n else {\n LoggerProxy.logger.log('Roap:handler#perform --> Roap State remote offer won after GLARE.');\n }\n session.state.step(ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action);\n this.perform(session, meeting);\n break;\n default:\n break;\n }\n }\n\n /**\n *\n * @param {String} signal\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} prefix\n * @returns {null}\n */\n execute(signal, session, action, meeting, prefix) {\n if (session && session.state) {\n handleSessionStep({\n roap: action,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n session\n });\n signal = ROAP.ROAP_SIGNAL[`${prefix}${action.msg.messageType}`];\n session.state.step(signal, meeting, action);\n this.perform(session, meeting, action);\n }\n }\n\n /**\n *\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} correlationId\n * @returns {Boolean}\n */\n handleAction(session, action, meeting, correlationId) {\n let signal;\n\n\n switch (action.type) {\n case ROAP.RECEIVE_ROAP_MSG:\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RECEIVE_ROAP_MSG event captured, reciving a roap message : ${JSON.stringify(action)}`);\n if (compareWithLastRoapMessage(this.lastRoapMessage, action)) {\n LoggerProxy.logger.warn(`Roap:handler#handleAction --> duplicate roap offer from server: ${action.msg.seq}`);\n }\n else {\n this.lastRoapMessage = action;\n action.remote = true;\n this.execute(signal, session, action, meeting, ROAP.RX_);\n }\n break;\n case ROAP.SEND_ROAP_MSG:\n LoggerProxy.logger.log(`Roap:handler#handleAction --> SEND_ROAP_MSG event captured, sending roap message ${JSON.stringify(action)}`);\n\n action.local = true;\n this.execute(signal, session, action, meeting, ROAP.TX_);\n break;\n case ROAP.SEND_ROAP_MSG_SUCCESS:\n // NOTE: When server send back an answer via mercury the\n // remote SDP is already saved sent and ok message is sent back\n // We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS\n break;\n case ROAP.RECEIVE_CALL_LEAVE:\n RoapCollection.deleteSession(correlationId);\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RECEIVE_CALL_LEAVE event captured, cleaning up the RoapHandler for correlationId: ${correlationId}`); break;\n case ROAP.RESET_ROAP_STATE:\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RESET_ROAP_STATE event captured, resetting the RoapHandler state based on sequenceId: ${action.msg.seq}`); break;\n default:\n return true;\n }\n\n return true;\n }\n\n /**\n *\n * @param {Object} action\n * @returns {Boolean}\n */\n submit(action) {\n const {correlationId} = action;\n let {seq} = action;\n\n if (!seq && action.msg) {\n seq = action.msg.seq;\n }\n const session = RoapCollection.getSessionSequence(correlationId, seq);\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n if (checkForAndHandleErrors(action, meeting, correlationId)) {\n return true;\n }\n\n return this.handleAction(session, action, meeting, correlationId);\n }\n}\n"]}
@@ -289,6 +289,11 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
289
289
  version: _constants.ROAP.ROAP_VERSION,
290
290
  seq: options.seq
291
291
  };
292
+ this.roapHandler.submit({
293
+ type: _constants.ROAP.SEND_ROAP_MSG,
294
+ msg: roapMessage,
295
+ correlationId: options.correlationId
296
+ });
292
297
  return this.roapRequest.sendRoap({
293
298
  roapMessage: roapMessage,
294
299
  locusSelfUrl: meeting.selfUrl,
@@ -301,9 +306,9 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
301
306
  meeting.setRoapSeq(options.seq);
302
307
 
303
308
  _this3.roapHandler.submit({
304
- type: _constants.ROAP.SEND_ROAP_MSG,
305
- msg: roapMessage,
306
- correlationId: options.correlationId
309
+ type: _constants.ROAP.SEND_ROAP_MSG_SUCCESS,
310
+ seq: roapMessage.seq,
311
+ correlationId: meeting.correlationId
307
312
  });
308
313
  });
309
314
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["index.js"],"names":["Roap","attrs","options","meeting","roapMessage","messageType","ROAP","ROAP_TYPES","OFFER","sdps","sdp","version","ROAP_VERSION","seq","roapSeq","tieBreaker","roapHandler","submit","type","SEND_ROAP_MSG","msg","correlationId","roapBody","localMedias","localSdp","roapRequest","attachRechabilityData","audioMuted","isAudioMuted","videoMuted","isVideoMuted","MeetingUtil","joinMeetingOptions","then","locus","SEND_ROAP_MSG_SUCCESS","setRoapSeq","RoapHandler","sendRoapOK","bind","sendRoapAnswer","roapFinished","RoapRequest","lastRoapOffer","data","message","LoggerProxy","logger","log","RECEIVE_ROAP_MSG","RECEIVE_CALL_LEAVE","resolve","webex","meetings","meetingCollection","getByKey","OK","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","ANSWER","session","errorType","ERROR","reconnect","mediaConnections","updateMediaConnections","sequenceId","RoapCollection","onSessionSequenceFinish","mediaNegotiatedEvent","isBusy","processNextQueuedMediaUpdate","StatelessWebexPlugin"],"mappings":"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","sourcesContent":["import {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport RoapHandler from './handler';\nimport RoapRequest from './request';\nimport RoapCollection from './collection';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} roapSeq\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs, options) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Process State Handler\n * @instance\n * @type {RoapHandler}\n * @private\n * @memberof Roap\n */\n this.roapHandler = new RoapHandler(this.attrs, this.options, this.sendRoapOK.bind(this), this.sendRoapAnswer.bind(this), this.roapFinished.bind(this));\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n this.roapRequest = new RoapRequest({}, options);\n /**\n * The last roap offer sent to server and acked\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.lastRoapOffer = {};\n }\n\n /**\n * Starts listening to mercury events for Roap messages\n * @param {object} data event object\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n roapEvent(data) {\n const msg = data.message;\n const {correlationId} = data;\n\n LoggerProxy.logger.log(`Roap:index#roapEvent --> Received Roap Message [${JSON.stringify(msg, null, 2)}]`);\n this.roapHandler.submit({\n type: ROAP.RECEIVE_ROAP_MSG,\n msg,\n correlationId\n });\n }\n\n /**\n *\n * @param {String} correlationId correlation id of a meeting\n * @param {Number} seq ROAP sequence number\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n stop(correlationId, seq) {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_CALL_LEAVE,\n seq,\n correlationId\n });\n\n return Promise.resolve();\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @private\n * @memberof Roap\n */\n sendRoapOK(options) {\n return Promise.resolve().then(() => {\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(() => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId\n });\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n meeting.setRoapSeq(options.seq);\n });\n });\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: try to merge sendRoapOk and roapAnswer\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapAnswer(options) {\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: options.sdps,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: options.audioMuted,\n videoMuted: options.videoMuted,\n meetingId: meeting.id\n })\n .then(() => {\n meeting.setRoapSeq(options.seq);\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId\n });\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} session\n * @param {Object} locus\n * @param {String} errorType\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapError(session, locus, errorType) {\n const msg = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType,\n seq: session.OFFER.seq\n };\n\n return this.roapRequest.sendRoap(msg, locus);\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapMediaRequest(options) {\n const {meeting, reconnect} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n // sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq)) ? 0 : options.roapSeq + 1,\n tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId\n });\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: reconnect ? '' : meeting.mediaId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(({locus, mediaConnections}) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\nsendRoapCallRequest = (options) => {\n const {meeting} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq)) ? 0 : options.roapSeq + 1,\n tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId\n });\n\n const roapBody = {\n localMedias: [\n {\n localSdp: JSON.stringify(this.roapRequest.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!meeting.isAudioMuted(),\n videoMuted: !!meeting.isVideoMuted()\n }))\n // mediaId: meeting.mediaId\n }\n ]\n };\n\n return MeetingUtil.joinMeetingOptions(meeting, {roapMessage: roapBody})\n .then((locus) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n};\n\n/**\n * Called when the roap sequence is finished (completed successfully or failed)\n * @param {String} correlationId id of the meeting affected\n * @param {String} sequenceId the id of the finished sequence\n * @returns {undefined}\n * @private\n * @memberof Roap\n */\nroapFinished(correlationId, sequenceId) {\n RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n meeting.mediaNegotiatedEvent();\n if (!RoapCollection.isBusy(correlationId)) {\n meeting.processNextQueuedMediaUpdate();\n }\n}\n}\n"]}
1
+ {"version":3,"sources":["index.js"],"names":["Roap","attrs","options","meeting","roapMessage","messageType","ROAP","ROAP_TYPES","OFFER","sdps","sdp","version","ROAP_VERSION","seq","roapSeq","tieBreaker","roapHandler","submit","type","SEND_ROAP_MSG","msg","correlationId","roapBody","localMedias","localSdp","roapRequest","attachRechabilityData","audioMuted","isAudioMuted","videoMuted","isVideoMuted","MeetingUtil","joinMeetingOptions","then","locus","SEND_ROAP_MSG_SUCCESS","setRoapSeq","RoapHandler","sendRoapOK","bind","sendRoapAnswer","roapFinished","RoapRequest","lastRoapOffer","data","message","LoggerProxy","logger","log","RECEIVE_ROAP_MSG","RECEIVE_CALL_LEAVE","resolve","webex","meetings","meetingCollection","getByKey","OK","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","ANSWER","session","errorType","ERROR","reconnect","mediaConnections","updateMediaConnections","sequenceId","RoapCollection","onSessionSequenceFinish","mediaNegotiatedEvent","isBusy","processNextQueuedMediaUpdate","StatelessWebexPlugin"],"mappings":"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","sourcesContent":["import {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport RoapHandler from './handler';\nimport RoapRequest from './request';\nimport RoapCollection from './collection';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} roapSeq\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs, options) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Process State Handler\n * @instance\n * @type {RoapHandler}\n * @private\n * @memberof Roap\n */\n this.roapHandler = new RoapHandler(this.attrs, this.options, this.sendRoapOK.bind(this), this.sendRoapAnswer.bind(this), this.roapFinished.bind(this));\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n this.roapRequest = new RoapRequest({}, options);\n /**\n * The last roap offer sent to server and acked\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.lastRoapOffer = {};\n }\n\n /**\n * Starts listening to mercury events for Roap messages\n * @param {object} data event object\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n roapEvent(data) {\n const msg = data.message;\n const {correlationId} = data;\n\n LoggerProxy.logger.log(`Roap:index#roapEvent --> Received Roap Message [${JSON.stringify(msg, null, 2)}]`);\n this.roapHandler.submit({\n type: ROAP.RECEIVE_ROAP_MSG,\n msg,\n correlationId\n });\n }\n\n /**\n *\n * @param {String} correlationId correlation id of a meeting\n * @param {Number} seq ROAP sequence number\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n stop(correlationId, seq) {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_CALL_LEAVE,\n seq,\n correlationId\n });\n\n return Promise.resolve();\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @private\n * @memberof Roap\n */\n sendRoapOK(options) {\n return Promise.resolve().then(() => {\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(() => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId\n });\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n meeting.setRoapSeq(options.seq);\n });\n });\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: try to merge sendRoapOk and roapAnswer\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapAnswer(options) {\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: options.sdps,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId\n });\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: options.audioMuted,\n videoMuted: options.videoMuted,\n meetingId: meeting.id\n })\n .then(() => {\n meeting.setRoapSeq(options.seq);\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} session\n * @param {Object} locus\n * @param {String} errorType\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapError(session, locus, errorType) {\n const msg = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType,\n seq: session.OFFER.seq\n };\n\n return this.roapRequest.sendRoap(msg, locus);\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapMediaRequest(options) {\n const {meeting, reconnect} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n // sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq)) ? 0 : options.roapSeq + 1,\n tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId\n });\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: reconnect ? '' : meeting.mediaId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(({locus, mediaConnections}) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\nsendRoapCallRequest = (options) => {\n const {meeting} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq)) ? 0 : options.roapSeq + 1,\n tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId\n });\n\n const roapBody = {\n localMedias: [\n {\n localSdp: JSON.stringify(this.roapRequest.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!meeting.isAudioMuted(),\n videoMuted: !!meeting.isVideoMuted()\n }))\n // mediaId: meeting.mediaId\n }\n ]\n };\n\n return MeetingUtil.joinMeetingOptions(meeting, {roapMessage: roapBody})\n .then((locus) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n};\n\n/**\n * Called when the roap sequence is finished (completed successfully or failed)\n * @param {String} correlationId id of the meeting affected\n * @param {String} sequenceId the id of the finished sequence\n * @returns {undefined}\n * @private\n * @memberof Roap\n */\nroapFinished(correlationId, sequenceId) {\n RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n meeting.mediaNegotiatedEvent();\n if (!RoapCollection.isBusy(correlationId)) {\n meeting.processNextQueuedMediaUpdate();\n }\n}\n}\n"]}
@@ -41,6 +41,8 @@ var shouldStep = function shouldStep(roap, meeting) {
41
41
  };
42
42
 
43
43
  var handleTransition = function handleTransition(value, signal, meeting) {
44
+ _loggerProxy.default.logger.log("Roap:state#handleTransition --> current ".concat(value, " to ").concat(signal));
45
+
44
46
  switch (value) {
45
47
  case _constants.ROAP.ROAP_STATE.INIT:
46
48
  if (signal === _constants.ROAP.ROAP_SIGNAL.RX_OFFER) {
@@ -1 +1 @@
1
- {"version":3,"sources":["state.js"],"names":["shouldStep","roap","meeting","messageType","msg","_OFFER_","remote","shareStatus","_REQUESTED_","mediaProperties","peerConnection","_ANSWER_","LoggerProxy","logger","log","signalingState","handleTransition","value","signal","ROAP","ROAP_STATE","INIT","ROAP_SIGNAL","RX_OFFER","WAIT_TX_ANSWER","TX_OFFER","WAIT_RX_ANSWER","WAIT_RX_OFFER","RX_ANSWER","mediaId","WAIT_TX_OK","error","GLARE","WAIT_TX_OFFER","TX_ANSWER","WAIT_RX_OK","TX_OK","RX_OK","ERROR","RoapStateMachine","createState","RoapState","StateMachine","factory","init","transitions","name","ROAP_TRANSITIONS","STEP","from","to","state","methods","onAfterStep","transition"],"mappings":"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","sourcesContent":["import StateMachine from 'javascript-state-machine';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_, _ANSWER_, _REQUESTED_} from '../constants';\n\nconst shouldStep = (roap, meeting) => {\n const {messageType} = roap.msg;\n\n if (meeting) {\n if (messageType === _OFFER_ && roap.remote && meeting.shareStatus === _REQUESTED_) {\n // The peer-connection is waiting for answer but got an offer Reset. Try to\n // send the offer later after you accept the answer\n return false;\n }\n // Assuming the mercury event has come first before the response for the event\n // we have to wait for the response and trigger the ROAP request later on\n if (!meeting.mediaProperties.peerConnection && messageType === _ANSWER_) {\n return false;\n }\n }\n LoggerProxy.logger.log('Roap:state#shouldStep --> RoapStateMachine: PeerConnectionState, ', meeting.mediaProperties.peerConnection.signalingState);\n LoggerProxy.logger.log('Roap:state#shouldStep --> RoapStateMachine: success save proceeding with transition, ', roap.msg);\n\n return true;\n};\n\nconst handleTransition = (value, signal, meeting) => {\n switch (value) {\n case ROAP.ROAP_STATE.INIT:\n if (signal === ROAP.ROAP_SIGNAL.RX_OFFER) {\n return ROAP.ROAP_STATE.WAIT_TX_ANSWER;\n }\n if (signal === ROAP.ROAP_SIGNAL.TX_OFFER) {\n return ROAP.ROAP_STATE.WAIT_RX_ANSWER;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n if (signal === ROAP.ROAP_SIGNAL.RX_ANSWER) {\n // There is a race condition where the /call response comes after mercury event from the server\n // As mercury sends roap event if it didnt get back a response. We can send the roap ok after that\n if (meeting.mediaId) {\n return ROAP.ROAP_STATE.WAIT_TX_OK;\n }\n LoggerProxy.logger.error('Roap:state#handleTransition --> Race Condition no mediaId, continuing.');\n\n return value;\n }\n\n if (signal === ROAP.ROAP_SIGNAL.RX_OFFER) {\n return ROAP.ROAP_STATE.GLARE;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_OFFER:\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n if (signal === ROAP.ROAP_SIGNAL.TX_ANSWER) {\n return ROAP.ROAP_STATE.WAIT_RX_OK;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (signal === ROAP.ROAP_SIGNAL.TX_OK) {\n return ROAP.ROAP_STATE.INIT;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_OK:\n if (signal === ROAP.ROAP_SIGNAL.RX_OK) {\n return ROAP.ROAP_STATE.INIT;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.ERROR:\n // eslint-disable-next-line no-warning-comments\n // TODO: resolve error state. Add a signal constant and handle the cleanup\n return ROAP.ROAP_STATE.INIT;\n\n case ROAP.ROAP_STATE.GLARE:\n return ROAP.ROAP_STATE.WAIT_RX_ANSWER;\n default:\n return value;\n }\n};\n\nconst RoapStateMachine = {\n /**\n * @param {Roap} roapRef\n * initializes the state machine\n * @returns {StateMachine} an instance of a state machine\n */\n createState() {\n const RoapState = StateMachine.factory({\n init: ROAP.ROAP_STATE.INIT,\n transitions: [\n {\n name: ROAP.ROAP_TRANSITIONS.STEP,\n from: '*',\n /**\n * Method to handle the transitions between states\n * @param {String} signal\n * @param {Meeting} meeting instance of a Meeting\n * @param {Object} roap\n * @returns {String} new state value\n */\n to(signal, meeting, roap) {\n const value = this.state;\n\n if (!shouldStep(roap, meeting)) {\n return value;\n }\n\n return handleTransition(value, signal, meeting);\n }\n }\n ],\n methods: {\n /**\n * Event that fires after we've transitioned to a new state\n * @param {Object} transition\n * @returns {null}\n */\n onAfterStep(transition) {\n LoggerProxy.logger.log(\n `Roap:state#onAfterStep --> RoapStateMachine->onAfterStep#fired! State changed from '${transition.from}' to '${\n transition.to\n }' with transition '${transition.transition}''.`\n );\n }\n }\n });\n\n return new RoapState();\n }\n};\n\nexport default RoapStateMachine;\n"]}
1
+ {"version":3,"sources":["state.js"],"names":["shouldStep","roap","meeting","messageType","msg","_OFFER_","remote","shareStatus","_REQUESTED_","mediaProperties","peerConnection","_ANSWER_","LoggerProxy","logger","log","signalingState","handleTransition","value","signal","ROAP","ROAP_STATE","INIT","ROAP_SIGNAL","RX_OFFER","WAIT_TX_ANSWER","TX_OFFER","WAIT_RX_ANSWER","WAIT_RX_OFFER","RX_ANSWER","mediaId","WAIT_TX_OK","error","GLARE","WAIT_TX_OFFER","TX_ANSWER","WAIT_RX_OK","TX_OK","RX_OK","ERROR","RoapStateMachine","createState","RoapState","StateMachine","factory","init","transitions","name","ROAP_TRANSITIONS","STEP","from","to","state","methods","onAfterStep","transition"],"mappings":"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","sourcesContent":["import StateMachine from 'javascript-state-machine';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_, _ANSWER_, _REQUESTED_} from '../constants';\n\nconst shouldStep = (roap, meeting) => {\n const {messageType} = roap.msg;\n\n if (meeting) {\n if (messageType === _OFFER_ && roap.remote && meeting.shareStatus === _REQUESTED_) {\n // The peer-connection is waiting for answer but got an offer Reset. Try to\n // send the offer later after you accept the answer\n return false;\n }\n // Assuming the mercury event has come first before the response for the event\n // we have to wait for the response and trigger the ROAP request later on\n if (!meeting.mediaProperties.peerConnection && messageType === _ANSWER_) {\n return false;\n }\n }\n LoggerProxy.logger.log('Roap:state#shouldStep --> RoapStateMachine: PeerConnectionState, ', meeting.mediaProperties.peerConnection.signalingState);\n LoggerProxy.logger.log('Roap:state#shouldStep --> RoapStateMachine: success save proceeding with transition, ', roap.msg);\n\n return true;\n};\n\nconst handleTransition = (value, signal, meeting) => {\n LoggerProxy.logger.log(`Roap:state#handleTransition --> current ${value} to ${signal}`);\n\n switch (value) {\n case ROAP.ROAP_STATE.INIT:\n if (signal === ROAP.ROAP_SIGNAL.RX_OFFER) {\n return ROAP.ROAP_STATE.WAIT_TX_ANSWER;\n }\n if (signal === ROAP.ROAP_SIGNAL.TX_OFFER) {\n return ROAP.ROAP_STATE.WAIT_RX_ANSWER;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n if (signal === ROAP.ROAP_SIGNAL.RX_ANSWER) {\n // There is a race condition where the /call response comes after mercury event from the server\n // As mercury sends roap event if it didnt get back a response. We can send the roap ok after that\n if (meeting.mediaId) {\n return ROAP.ROAP_STATE.WAIT_TX_OK;\n }\n LoggerProxy.logger.error('Roap:state#handleTransition --> Race Condition no mediaId, continuing.');\n\n return value;\n }\n\n if (signal === ROAP.ROAP_SIGNAL.RX_OFFER) {\n return ROAP.ROAP_STATE.GLARE;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_OFFER:\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n if (signal === ROAP.ROAP_SIGNAL.TX_ANSWER) {\n return ROAP.ROAP_STATE.WAIT_RX_OK;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (signal === ROAP.ROAP_SIGNAL.TX_OK) {\n return ROAP.ROAP_STATE.INIT;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_OK:\n if (signal === ROAP.ROAP_SIGNAL.RX_OK) {\n return ROAP.ROAP_STATE.INIT;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.ERROR:\n // eslint-disable-next-line no-warning-comments\n // TODO: resolve error state. Add a signal constant and handle the cleanup\n return ROAP.ROAP_STATE.INIT;\n\n case ROAP.ROAP_STATE.GLARE:\n return ROAP.ROAP_STATE.WAIT_RX_ANSWER;\n default:\n return value;\n }\n};\n\nconst RoapStateMachine = {\n /**\n * @param {Roap} roapRef\n * initializes the state machine\n * @returns {StateMachine} an instance of a state machine\n */\n createState() {\n const RoapState = StateMachine.factory({\n init: ROAP.ROAP_STATE.INIT,\n transitions: [\n {\n name: ROAP.ROAP_TRANSITIONS.STEP,\n from: '*',\n /**\n * Method to handle the transitions between states\n * @param {String} signal\n * @param {Meeting} meeting instance of a Meeting\n * @param {Object} roap\n * @returns {String} new state value\n */\n to(signal, meeting, roap) {\n const value = this.state;\n\n if (!shouldStep(roap, meeting)) {\n return value;\n }\n\n return handleTransition(value, signal, meeting);\n }\n }\n ],\n methods: {\n /**\n * Event that fires after we've transitioned to a new state\n * @param {Object} transition\n * @returns {null}\n */\n onAfterStep(transition) {\n LoggerProxy.logger.log(\n `Roap:state#onAfterStep --> RoapStateMachine->onAfterStep#fired! State changed from '${transition.from}' to '${\n transition.to\n }' with transition '${transition.transition}''.`\n );\n }\n }\n });\n\n return new RoapState();\n }\n};\n\nexport default RoapStateMachine;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "1.144.2",
3
+ "version": "1.146.1",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "contributors": [
@@ -24,17 +24,17 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@babel/runtime-corejs2": "^7.14.8",
27
- "@webex/webex-core": "1.144.2",
28
- "@webex/internal-plugin-mercury": "1.144.2",
27
+ "@webex/webex-core": "1.146.1",
28
+ "@webex/internal-plugin-mercury": "1.146.1",
29
29
  "webrtc-adapter": "^7.7.0",
30
30
  "lodash": "^4.17.21",
31
31
  "uuid": "^3.3.2",
32
32
  "global": "^4.4.0",
33
- "@webex/common": "1.144.2",
33
+ "@webex/common": "1.146.1",
34
34
  "bowser": "^2.11.0",
35
35
  "sdp-transform": "^2.12.0",
36
36
  "readable-stream": "^3.6.0",
37
- "@webex/common-timers": "1.144.2",
37
+ "@webex/common-timers": "1.146.1",
38
38
  "btoa": "^1.2.1",
39
39
  "javascript-state-machine": "^3.1.0",
40
40
  "envify": "^4.1.0"
package/src/constants.js CHANGED
@@ -117,6 +117,7 @@ export const _PEOPLE_ = hydraTypes.PEOPLE;
117
117
  export const _REQUESTED_ = 'REQUESTED';
118
118
  export const _RESOURCE_ROOM_ = 'RESOURCE_ROOM';
119
119
  export const _RECEIVE_ONLY_ = 'RECVONLY';
120
+ export const _REMOVE_ = 'REMOVE';
120
121
  export const _ROOM_ = hydraTypes.ROOM;
121
122
 
122
123
  export const _SIP_BRIDGE_ = 'SIP_BRIDGE';
@@ -1742,6 +1742,7 @@ export default class Meeting extends StatelessWebexPlugin {
1742
1742
  * @param {Object} invitee
1743
1743
  * @param {String} invitee.emailAddress
1744
1744
  * @param {String} invitee.email
1745
+ * @param {String} invitee.phoneNumber
1745
1746
  * @param {Boolean} [alertIfActive]
1746
1747
  * @returns {Promise} see #members.addMember
1747
1748
  * @public
@@ -1751,6 +1752,18 @@ export default class Meeting extends StatelessWebexPlugin {
1751
1752
  return this.members.addMember(invitee, alertIfActive);
1752
1753
  }
1753
1754
 
1755
+ /**
1756
+ * Cancel an outgoing phone call invitation made during a meeting
1757
+ * @param {Object} invitee
1758
+ * @param {String} invitee.phoneNumber
1759
+ * @returns {Promise} see #members.cancelPhoneInvite
1760
+ * @public
1761
+ * @memberof Meeting
1762
+ */
1763
+ cancelPhoneInvite(invitee) {
1764
+ return this.members.cancelPhoneInvite(invitee);
1765
+ }
1766
+
1754
1767
  /**
1755
1768
  * Admit the guest(s) to the call once they are waiting
1756
1769
  * @param {Array} memberIds
@@ -594,6 +594,27 @@ export default class Members extends StatelessWebexPlugin {
594
594
  return this.membersRequest.addMembers(options);
595
595
  }
596
596
 
597
+ /**
598
+ * Cancels an outgoing PSTN call to the associated meeting
599
+ * @param {String} invitee
600
+ * @returns {Promise}
601
+ * @memberof Members
602
+ */
603
+ cancelPhoneInvite(invitee) {
604
+ if (!this.locusUrl) {
605
+ return Promise.reject(new ParameterError('The associated locus url for this meeting object must be defined.'));
606
+ }
607
+ if (MembersUtil.isInvalidInvitee(invitee)) {
608
+ return Promise.reject(
609
+ new ParameterError('The invitee must be defined with a valid phoneNumber property.')
610
+ );
611
+ }
612
+ const options = MembersUtil.cancelPhoneInviteOptions(invitee, this.locusUrl);
613
+
614
+
615
+ return this.membersRequest.cancelPhoneInvite(options);
616
+ }
617
+
597
618
  /**
598
619
  * Admits waiting members (invited guests to meeting)
599
620
  * @param {Array} memberIds
@@ -668,4 +689,39 @@ export default class Members extends StatelessWebexPlugin {
668
689
 
669
690
  return this.membersRequest.transferHostToMember(options);
670
691
  }
692
+
693
+
694
+ /**
695
+ * Sends DTMF tones for the PSTN member of a meeting
696
+ * @param {String} tones a string of one or more DTMF tones to send
697
+ * @param {String} memberId member id
698
+ * @returns {Promise}
699
+ * @public
700
+ * @memberof Members
701
+ */
702
+ sendDialPadKey(tones = '', memberId = '') {
703
+ if (!tones && tones !== 0) {
704
+ return Promise.reject(new ParameterError('DMTF tones must be passed in'));
705
+ }
706
+
707
+ const member = this.membersCollection.get(memberId);
708
+
709
+ if (!member) {
710
+ return Promise.reject(new ParameterError('there is no member associated with that Id'));
711
+ }
712
+
713
+ const {locusUrl} = this;
714
+
715
+ const deviceArray = member.participant.devices;
716
+ const device = deviceArray.find(({deviceType}) => deviceType === 'SIP');
717
+ const url = device?.url;
718
+
719
+ if (locusUrl && url) {
720
+ const options = MembersUtil.genderateSendDTMFOptions(url, tones, memberId, locusUrl);
721
+
722
+ return this.membersRequest.sendDialPadKey(options);
723
+ }
724
+
725
+ return Promise.reject(new Error('Members:index#sendDialPadKey --> cannot send DTMF, meeting does not have a connection to the "locus" call control service.'));
726
+ }
671
727
  }