@webex/plugin-meetings 1.156.0 → 1.156.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.js +2 -42
- package/dist/constants.js.map +1 -1
- package/dist/meeting/index.js +31 -29
- package/dist/meeting/index.js.map +1 -1
- package/dist/meetings/index.js +5 -3
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/util.js +1 -1
- package/dist/meetings/util.js.map +1 -1
- package/dist/metrics/constants.js +50 -0
- package/dist/metrics/constants.js.map +1 -0
- package/dist/metrics/index.js +6 -52
- package/dist/metrics/index.js.map +1 -1
- package/dist/peer-connection-manager/index.js +9 -7
- package/dist/peer-connection-manager/index.js.map +1 -1
- package/dist/reconnection-manager/index.js +3 -1
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/handler.js +4 -2
- package/dist/roap/handler.js.map +1 -1
- package/package.json +5 -5
- package/src/constants.js +0 -42
- package/src/meeting/index.js +1 -1
- package/src/meetings/index.js +2 -2
- package/src/meetings/util.js +1 -1
- package/src/metrics/constants.js +45 -0
- package/src/metrics/index.js +4 -38
- package/src/peer-connection-manager/index.js +2 -2
- package/src/reconnection-manager/index.js +1 -1
- package/src/roap/handler.js +2 -1
- package/test/unit/spec/meeting/index.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.js"],"names":["NeedsRetryError","Error","NeedsRejoinError","wasSharing","error","ReconnectionManager","meeting","iceState","disconnected","resolve","timer","undefined","timeoutDuration","config","reconnection","iceReconnectionTimeout","status","RECONNECTION","STATE","DEFAULT_STATUS","tryCount","DEFAULT_TRY_COUNT","webex","maxRejoinAttempts","rejoinAttempts","autoRejoinEnabled","autoRejoin","reset","LoggerProxy","logger","log","clearTimeout","reject","setTimeout","enabled","COMPLETE","info","ReconnectInProgress","ReconnectionError","networkDisconnect","networkRetry","id","validate","Metrics","postEvent","event","eventType","MEDIA_RECONNECTING","executeReconnection","then","MEDIA_RECOVERED","data","recoveredBy","RECOVERED_BY_NEW","catch","reconnectError","reconnect","message","reconnectMetric","CALL_ABORTED","errors","category","errorObjects","expected","errorCode","fatal","name","mediaEngine","shownToUser","rejoinMeeting","IN_PROGRESS","reconnectMercuryWebSocket","internal","device","url","FAILURE","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","meetings","syncMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","media","previousCorrelationId","correlationId","join","rejoin","RoapCollection","deleteSession","Media","stopTracks","mediaProperties","shareTrack","isSharing","NO_SHARE","mediaDirection","sendShare","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","reason","SHARE_STOPPED_REASON","MEETING_REJOIN","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_MAX_REJOIN_FAILURE","locus_id","locusUrl","split","pop","stack","setupPeerConnection","attachMedia","meetingId","remoteQualityLevel","enableRtx","enableExtmap","peerConnection","setRemoteStream","roap","sendRoapMediaRequest","sdp","roapSeq","mercury","connected","disconnect","connect","PeerConnectionManager","close","unsetPeerConnection","reInitiatePeerconnection","setPeerConnectionEvents","statsAnalyzer","updatePeerconnection"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable no-warning-comments */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport {\n EVENT_TRIGGERS,\n BEHAVIORAL_METRICS,\n RECONNECTION,\n SHARE_STATUS,\n SHARE_STOPPED_REASON,\n _CALL_,\n _LEFT_,\n _ID_\n} from '../constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectInProgress from '../common/errors/reconnection-in-progress';\nimport PeerConnectionManager from '../peer-connection-manager';\nimport {eventType, reconnection, errorObjects} from '../metrics/config';\nimport Media from '../media';\nimport Metrics from '../metrics';\nimport RoapCollection from '../roap/collection';\n\n/**\n * Used to indicate that the reconnect logic needs to be retried.\n *\n * @class NeedsRetryError\n * @extends {Error}\n */\nclass NeedsRetryError extends Error {}\n\n/**\n * Used to indicate that the meeting needs to be rejoined, not just media reconnected\n *\n * @class NeedsRejoinError\n * @extends {Error}\n */\nclass NeedsRejoinError extends Error {\n /**\n * Creates an instance of NeedsRejoinError.\n * @param {Object} params\n * @param {boolean} params.wasSharing\n * @param {Error} params.error\n * @memberof NeedsRejoinError\n */\n constructor({wasSharing, error = new Error('Meeting needs to be rejoined')}) {\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n*/\nexport default class ReconnectionManager {\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting) {\n /**\n * Stores ICE reconnection state data.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n this.iceState = {\n disconnected: false,\n resolve: () => {},\n timer: undefined,\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout\n };\n\n /**\n * @instance\n * @type {String}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n /**\n * @instance\n * @type {Number}\n * @private\n * @memberof ReconnectionManager\n */\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO : change this logic to not save the meeting instance\n // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date\n this.webex = meeting.webex;\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO: try removing the circular dependency for meeting and reconnection manager\n // try moving this to meetings collection\n this.meeting = meeting;\n\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * Sets the iceState to connected and clears any disconnect timeouts and\n * related timeout data within the iceState.\n *\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n iceReconnected() {\n if (this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');\n\n this.iceState.resolve();\n this.iceState.resolve = () => {};\n\n if (this.iceState.timer) {\n clearTimeout(this.iceState.timer);\n delete this.iceState.timer;\n }\n\n this.iceState.disconnected = false;\n }\n }\n\n /**\n * Set the iceState to disconnected and generates a timeout that waits for the\n * iceState to reconnect and then resolves. If the ice state is already\n * processing a reconnect, it immediately resolves. Rejects if the timeout\n * duration is reached.\n *\n * @returns {Promise<undefined>}\n * @public\n * @memberof ReconnectionManager\n */\n waitForIceReconnect() {\n if (!this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect');\n\n this.iceState.disconnected = true;\n\n return new Promise((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n }\n else {\n this.iceState.disconnected = false;\n reject(new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`));\n }\n }, this.iceState.timeoutDuration);\n\n this.iceState.resolve = resolve;\n });\n }\n\n // return a resolved promise to prevent multiple catch executions of reconnect\n return Promise.resolve();\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n cleanUp() {\n this.reset();\n this.meeting = null;\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectionError}\n * @private\n * @memberof ReconnectionManager\n */\n validate() {\n if (this.meeting.config.reconnection.enabled) {\n if (\n this.status === RECONNECTION.STATE.DEFAULT_STATUS ||\n this.status === RECONNECTION.STATE.COMPLETE\n ) {\n return true;\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection already in progress.');\n\n throw new ReconnectInProgress('Reconnection already in progress.');\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection is not enabled.');\n\n throw new ReconnectionError('Reconnection is not enabled.');\n }\n\n /**\n * Initiates a media reconnect for the active meeting\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @param {boolean} [reconnectOptions.networkRetry=false] indicates if we are retrying the reconnect\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n async reconnect({networkDisconnect = false, networkRetry = false} = {}) {\n LoggerProxy.logger.info(`ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`);\n // First, validate that we can reconnect, if not, it will throw an error\n try {\n this.validate();\n }\n catch (error) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection unable to begin.', error);\n throw error;\n }\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect start metric.');\n Metrics.postEvent({\n event: eventType.MEDIA_RECONNECTING,\n meeting: this.meeting\n });\n }\n\n return this.executeReconnection({networkDisconnect})\n .then(() => {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect success metric.');\n Metrics.postEvent({\n event: eventType.MEDIA_RECOVERED,\n meeting: this.meeting,\n data: {recoveredBy: reconnection.RECOVERED_BY_NEW}\n });\n })\n .catch((reconnectError) => {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.');\n // Reset our reconnect status since we are looping back to the beginning\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n\n // This is a network retry, so we should not log START metrics again\n return this.reconnect({networkDisconnect: true, networkRetry: true});\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error('ReconnectionManager:index#reconnect --> Reconnection failed.', reconnectError.message);\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect abort metric.');\n\n const reconnectMetric = {\n event: eventType.CALL_ABORTED,\n meeting: this.meeting,\n data: {\n errors: [\n {\n category: errorObjects.category.expected,\n errorCode: 2008,\n fatal: true,\n name: errorObjects.name.mediaEngine,\n shownToUser: false\n }\n ]\n }\n };\n\n Metrics.postEvent(reconnectMetric);\n if (reconnectError instanceof NeedsRejoinError) {\n // send call aborded event with catogery as expected as we are trying to rejoin\n\n if (this.autoRejoinEnabled) {\n return this.rejoinMeeting(reconnectError.wasSharing);\n }\n }\n\n\n throw reconnectError;\n });\n }\n\n /**\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @returns {Promise}\n * @throws {NeedsRetryError}\n * @private\n * @memberof ReconnectionManager\n */\n async executeReconnection({networkDisconnect = false}) {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.');\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Websocket reconnected.', this.webex.internal.device.url);\n }\n catch (error) {\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.');\n this.status = RECONNECTION.STATE.FAILURE;\n throw (error);\n }\n }\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Updating meeting data from server.');\n await this.webex.meetings.syncMeetings();\n }\n catch (syncError) {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.', syncError);\n throw (new NeedsRetryError(syncError));\n }\n\n // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object\n // So that on rejoin it known what parametrs it was using\n if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely ');\n\n throw new Error('Unable to rejoin a meeting already ended or inactive .');\n }\n\n LoggerProxy.logger.info(`ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`);\n\n // If the meeting state was left, no longer reconnect media\n if (this.meeting.state === _LEFT_) {\n if (this.meeting.type === _CALL_) {\n throw new Error('Unable to rejoin a call in LEFT state.');\n }\n\n throw (new NeedsRejoinError({wasSharing}));\n }\n\n try {\n const media = await this.reconnectMedia();\n\n LoggerProxy.logger.log('ReconnectionManager:index#executeReconnection --> Media reestablished');\n this.status = RECONNECTION.STATE.COMPLETE;\n\n return media;\n }\n catch (error) {\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Media reestablishment failed');\n this.status = RECONNECTION.STATE.FAILURE;\n\n throw (error);\n }\n }\n\n /**\n * Rejoins a meeting after detecting the member was in a LEFT state\n *\n * @async\n * @param {boolean} wasSharing\n * @returns {Promise}\n */\n async rejoinMeeting(wasSharing = false) {\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin');\n const previousCorrelationId = this.meeting.correlationId;\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n RoapCollection.deleteSession(previousCorrelationId);\n\n if (wasSharing) {\n // Stop the share streams if user tried to rejoin\n Media.stopTracks(this.meeting.mediaProperties.shareTrack);\n this.meeting.isSharing = false;\n if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {\n this.meeting.shareStatus = SHARE_STATUS.NO_SHARE;\n }\n this.meeting.mediaProperties.mediaDirection.sendShare = false;\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'rejoinMeeting'\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason: SHARE_STOPPED_REASON.MEETING_REJOIN\n }\n );\n }\n }\n catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(`ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`, joinError);\n this.rejoinMeeting();\n }\n else {\n LoggerProxy.logger.error('ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.', joinError);\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE,\n {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack\n }\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n }\n catch (mediaError) {\n LoggerProxy.logger.error('ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.', mediaError);\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n reconnectMedia() {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media');\n\n ReconnectionManager.setupPeerConnection(this.meeting);\n\n return Media.attachMedia(this.meeting.mediaProperties, {\n meetingId: this.meeting.id,\n remoteQualityLevel: this.meeting.mediaProperties.remoteQualityLevel,\n enableRtx: this.meeting.config.enableRtx,\n enableExtmap: this.meeting.config.enableExtmap\n })\n .then((peerConnection) => this.meeting.setRemoteStream(peerConnection))\n .then(() => {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> Sending ROAP media request');\n\n return this.meeting.roap\n .sendRoapMediaRequest({\n sdp: this.meeting.mediaProperties.peerConnection.sdp,\n roapSeq: this.meeting.roapSeq,\n meeting: this.meeting,\n reconnect: true\n });\n });\n }\n\n /**\n * Attempt to Reconnect Mercury Websocket\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMercuryWebSocket() {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.');\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.');\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.');\n }\n catch (disconnectError) {\n // If we can't disconnect, the sdk is in such a bad state that reconnecting is not going to happen.\n LoggerProxy.logger.error('ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.', disconnectError);\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.');\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.');\n }\n catch (connectError) {\n LoggerProxy.logger.error('ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.', connectError);\n\n throw (connectError);\n }\n }\n\n /**\n * @param {Meeting} meeting\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n static setupPeerConnection(meeting) {\n LoggerProxy.logger.log('ReconnectionManager:index#setupPeerConnection --> Begin resetting peer connection');\n // close pcs, unset to null and create a new one with out closing any streams\n PeerConnectionManager.close(meeting.mediaProperties.peerConnection);\n meeting.mediaProperties.unsetPeerConnection();\n meeting.mediaProperties.reInitiatePeerconnection();\n PeerConnectionManager.setPeerConnectionEvents(meeting);\n // update the peerconnection in the stats manager when ever we reconnect\n meeting.statsAnalyzer.updatePeerconnection(meeting.mediaProperties.peerConnection);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["index.js"],"names":["NeedsRetryError","Error","NeedsRejoinError","wasSharing","error","ReconnectionManager","meeting","iceState","disconnected","resolve","timer","undefined","timeoutDuration","config","reconnection","iceReconnectionTimeout","status","RECONNECTION","STATE","DEFAULT_STATUS","tryCount","DEFAULT_TRY_COUNT","webex","maxRejoinAttempts","rejoinAttempts","autoRejoinEnabled","autoRejoin","reset","LoggerProxy","logger","log","clearTimeout","reject","setTimeout","enabled","COMPLETE","info","ReconnectInProgress","ReconnectionError","networkDisconnect","networkRetry","id","validate","Metrics","postEvent","event","eventType","MEDIA_RECONNECTING","executeReconnection","then","MEDIA_RECOVERED","data","recoveredBy","RECOVERED_BY_NEW","catch","reconnectError","reconnect","message","reconnectMetric","CALL_ABORTED","errors","category","errorObjects","expected","errorCode","fatal","name","mediaEngine","shownToUser","rejoinMeeting","IN_PROGRESS","reconnectMercuryWebSocket","internal","device","url","FAILURE","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","meetings","syncMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","media","previousCorrelationId","correlationId","join","rejoin","RoapCollection","deleteSession","Media","stopTracks","mediaProperties","shareTrack","isSharing","NO_SHARE","mediaDirection","sendShare","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","reason","SHARE_STOPPED_REASON","MEETING_REJOIN","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_MAX_REJOIN_FAILURE","locus_id","locusUrl","split","pop","stack","setupPeerConnection","attachMedia","meetingId","remoteQualityLevel","enableRtx","enableExtmap","peerConnection","setRemoteStream","roap","sendRoapMediaRequest","sdp","roapSeq","mercury","connected","disconnect","connect","PeerConnectionManager","close","unsetPeerConnection","reInitiatePeerconnection","setPeerConnectionEvents","statsAnalyzer","updatePeerconnection"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable no-warning-comments */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport {\n EVENT_TRIGGERS,\n RECONNECTION,\n SHARE_STATUS,\n SHARE_STOPPED_REASON,\n _CALL_,\n _LEFT_,\n _ID_\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectInProgress from '../common/errors/reconnection-in-progress';\nimport PeerConnectionManager from '../peer-connection-manager';\nimport {eventType, reconnection, errorObjects} from '../metrics/config';\nimport Media from '../media';\nimport Metrics from '../metrics';\nimport RoapCollection from '../roap/collection';\n\n/**\n * Used to indicate that the reconnect logic needs to be retried.\n *\n * @class NeedsRetryError\n * @extends {Error}\n */\nclass NeedsRetryError extends Error {}\n\n/**\n * Used to indicate that the meeting needs to be rejoined, not just media reconnected\n *\n * @class NeedsRejoinError\n * @extends {Error}\n */\nclass NeedsRejoinError extends Error {\n /**\n * Creates an instance of NeedsRejoinError.\n * @param {Object} params\n * @param {boolean} params.wasSharing\n * @param {Error} params.error\n * @memberof NeedsRejoinError\n */\n constructor({wasSharing, error = new Error('Meeting needs to be rejoined')}) {\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n*/\nexport default class ReconnectionManager {\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting) {\n /**\n * Stores ICE reconnection state data.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n this.iceState = {\n disconnected: false,\n resolve: () => {},\n timer: undefined,\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout\n };\n\n /**\n * @instance\n * @type {String}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n /**\n * @instance\n * @type {Number}\n * @private\n * @memberof ReconnectionManager\n */\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO : change this logic to not save the meeting instance\n // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date\n this.webex = meeting.webex;\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO: try removing the circular dependency for meeting and reconnection manager\n // try moving this to meetings collection\n this.meeting = meeting;\n\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * Sets the iceState to connected and clears any disconnect timeouts and\n * related timeout data within the iceState.\n *\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n iceReconnected() {\n if (this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');\n\n this.iceState.resolve();\n this.iceState.resolve = () => {};\n\n if (this.iceState.timer) {\n clearTimeout(this.iceState.timer);\n delete this.iceState.timer;\n }\n\n this.iceState.disconnected = false;\n }\n }\n\n /**\n * Set the iceState to disconnected and generates a timeout that waits for the\n * iceState to reconnect and then resolves. If the ice state is already\n * processing a reconnect, it immediately resolves. Rejects if the timeout\n * duration is reached.\n *\n * @returns {Promise<undefined>}\n * @public\n * @memberof ReconnectionManager\n */\n waitForIceReconnect() {\n if (!this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect');\n\n this.iceState.disconnected = true;\n\n return new Promise((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n }\n else {\n this.iceState.disconnected = false;\n reject(new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`));\n }\n }, this.iceState.timeoutDuration);\n\n this.iceState.resolve = resolve;\n });\n }\n\n // return a resolved promise to prevent multiple catch executions of reconnect\n return Promise.resolve();\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n cleanUp() {\n this.reset();\n this.meeting = null;\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectionError}\n * @private\n * @memberof ReconnectionManager\n */\n validate() {\n if (this.meeting.config.reconnection.enabled) {\n if (\n this.status === RECONNECTION.STATE.DEFAULT_STATUS ||\n this.status === RECONNECTION.STATE.COMPLETE\n ) {\n return true;\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection already in progress.');\n\n throw new ReconnectInProgress('Reconnection already in progress.');\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection is not enabled.');\n\n throw new ReconnectionError('Reconnection is not enabled.');\n }\n\n /**\n * Initiates a media reconnect for the active meeting\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @param {boolean} [reconnectOptions.networkRetry=false] indicates if we are retrying the reconnect\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n async reconnect({networkDisconnect = false, networkRetry = false} = {}) {\n LoggerProxy.logger.info(`ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`);\n // First, validate that we can reconnect, if not, it will throw an error\n try {\n this.validate();\n }\n catch (error) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection unable to begin.', error);\n throw error;\n }\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect start metric.');\n Metrics.postEvent({\n event: eventType.MEDIA_RECONNECTING,\n meeting: this.meeting\n });\n }\n\n return this.executeReconnection({networkDisconnect})\n .then(() => {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect success metric.');\n Metrics.postEvent({\n event: eventType.MEDIA_RECOVERED,\n meeting: this.meeting,\n data: {recoveredBy: reconnection.RECOVERED_BY_NEW}\n });\n })\n .catch((reconnectError) => {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.');\n // Reset our reconnect status since we are looping back to the beginning\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n\n // This is a network retry, so we should not log START metrics again\n return this.reconnect({networkDisconnect: true, networkRetry: true});\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error('ReconnectionManager:index#reconnect --> Reconnection failed.', reconnectError.message);\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect abort metric.');\n\n const reconnectMetric = {\n event: eventType.CALL_ABORTED,\n meeting: this.meeting,\n data: {\n errors: [\n {\n category: errorObjects.category.expected,\n errorCode: 2008,\n fatal: true,\n name: errorObjects.name.mediaEngine,\n shownToUser: false\n }\n ]\n }\n };\n\n Metrics.postEvent(reconnectMetric);\n if (reconnectError instanceof NeedsRejoinError) {\n // send call aborded event with catogery as expected as we are trying to rejoin\n\n if (this.autoRejoinEnabled) {\n return this.rejoinMeeting(reconnectError.wasSharing);\n }\n }\n\n\n throw reconnectError;\n });\n }\n\n /**\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @returns {Promise}\n * @throws {NeedsRetryError}\n * @private\n * @memberof ReconnectionManager\n */\n async executeReconnection({networkDisconnect = false}) {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.');\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Websocket reconnected.', this.webex.internal.device.url);\n }\n catch (error) {\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.');\n this.status = RECONNECTION.STATE.FAILURE;\n throw (error);\n }\n }\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Updating meeting data from server.');\n await this.webex.meetings.syncMeetings();\n }\n catch (syncError) {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.', syncError);\n throw (new NeedsRetryError(syncError));\n }\n\n // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object\n // So that on rejoin it known what parametrs it was using\n if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely ');\n\n throw new Error('Unable to rejoin a meeting already ended or inactive .');\n }\n\n LoggerProxy.logger.info(`ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`);\n\n // If the meeting state was left, no longer reconnect media\n if (this.meeting.state === _LEFT_) {\n if (this.meeting.type === _CALL_) {\n throw new Error('Unable to rejoin a call in LEFT state.');\n }\n\n throw (new NeedsRejoinError({wasSharing}));\n }\n\n try {\n const media = await this.reconnectMedia();\n\n LoggerProxy.logger.log('ReconnectionManager:index#executeReconnection --> Media reestablished');\n this.status = RECONNECTION.STATE.COMPLETE;\n\n return media;\n }\n catch (error) {\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Media reestablishment failed');\n this.status = RECONNECTION.STATE.FAILURE;\n\n throw (error);\n }\n }\n\n /**\n * Rejoins a meeting after detecting the member was in a LEFT state\n *\n * @async\n * @param {boolean} wasSharing\n * @returns {Promise}\n */\n async rejoinMeeting(wasSharing = false) {\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin');\n const previousCorrelationId = this.meeting.correlationId;\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n RoapCollection.deleteSession(previousCorrelationId);\n\n if (wasSharing) {\n // Stop the share streams if user tried to rejoin\n Media.stopTracks(this.meeting.mediaProperties.shareTrack);\n this.meeting.isSharing = false;\n if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {\n this.meeting.shareStatus = SHARE_STATUS.NO_SHARE;\n }\n this.meeting.mediaProperties.mediaDirection.sendShare = false;\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'rejoinMeeting'\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason: SHARE_STOPPED_REASON.MEETING_REJOIN\n }\n );\n }\n }\n catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(`ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`, joinError);\n this.rejoinMeeting();\n }\n else {\n LoggerProxy.logger.error('ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.', joinError);\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE,\n {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack\n }\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n }\n catch (mediaError) {\n LoggerProxy.logger.error('ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.', mediaError);\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n reconnectMedia() {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media');\n\n ReconnectionManager.setupPeerConnection(this.meeting);\n\n return Media.attachMedia(this.meeting.mediaProperties, {\n meetingId: this.meeting.id,\n remoteQualityLevel: this.meeting.mediaProperties.remoteQualityLevel,\n enableRtx: this.meeting.config.enableRtx,\n enableExtmap: this.meeting.config.enableExtmap\n })\n .then((peerConnection) => this.meeting.setRemoteStream(peerConnection))\n .then(() => {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> Sending ROAP media request');\n\n return this.meeting.roap\n .sendRoapMediaRequest({\n sdp: this.meeting.mediaProperties.peerConnection.sdp,\n roapSeq: this.meeting.roapSeq,\n meeting: this.meeting,\n reconnect: true\n });\n });\n }\n\n /**\n * Attempt to Reconnect Mercury Websocket\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMercuryWebSocket() {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.');\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.');\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.');\n }\n catch (disconnectError) {\n // If we can't disconnect, the sdk is in such a bad state that reconnecting is not going to happen.\n LoggerProxy.logger.error('ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.', disconnectError);\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.');\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.');\n }\n catch (connectError) {\n LoggerProxy.logger.error('ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.', connectError);\n\n throw (connectError);\n }\n }\n\n /**\n * @param {Meeting} meeting\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n static setupPeerConnection(meeting) {\n LoggerProxy.logger.log('ReconnectionManager:index#setupPeerConnection --> Begin resetting peer connection');\n // close pcs, unset to null and create a new one with out closing any streams\n PeerConnectionManager.close(meeting.mediaProperties.peerConnection);\n meeting.mediaProperties.unsetPeerConnection();\n meeting.mediaProperties.reInitiatePeerconnection();\n PeerConnectionManager.setPeerConnectionEvents(meeting);\n // update the peerconnection in the stats manager when ever we reconnect\n meeting.statsAnalyzer.updatePeerconnection(meeting.mediaProperties.peerConnection);\n }\n}\n"]}
|
package/dist/roap/handler.js
CHANGED
|
@@ -32,6 +32,8 @@ var _constants = require("../constants");
|
|
|
32
32
|
|
|
33
33
|
var _metrics = _interopRequireDefault(require("../metrics"));
|
|
34
34
|
|
|
35
|
+
var _constants2 = _interopRequireDefault(require("../metrics/constants"));
|
|
36
|
+
|
|
35
37
|
var _util = _interopRequireDefault(require("./util"));
|
|
36
38
|
|
|
37
39
|
var _collection = _interopRequireDefault(require("./collection"));
|
|
@@ -82,7 +84,7 @@ var handleSessionStep = function handleSessionStep(_ref) {
|
|
|
82
84
|
if (session.OFFER && messageType === _constants._OFFER_) {
|
|
83
85
|
session.GLARE_OFFER = roap.msg;
|
|
84
86
|
session.GLARE_OFFER.remote = !!roap.remote;
|
|
85
|
-
var metricName =
|
|
87
|
+
var metricName = _constants2.default.ROAP_GLARE_CONDITION;
|
|
86
88
|
var data = {
|
|
87
89
|
correlation_id: correlationId,
|
|
88
90
|
locus_id: locusUrl.split('/').pop(),
|
|
@@ -162,7 +164,7 @@ var RoapHandler = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
162
164
|
videoMuted: meeting.isVideoMuted()
|
|
163
165
|
});
|
|
164
166
|
}).catch(function (error) {
|
|
165
|
-
var metricName =
|
|
167
|
+
var metricName = _constants2.default.ROAP_ANSWER_FAILURE;
|
|
166
168
|
var data = {
|
|
167
169
|
correlation_id: meeting.correlationId,
|
|
168
170
|
locus_id: meeting.locusUrl.split('/').pop(),
|
package/dist/roap/handler.js.map
CHANGED
|
@@ -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","BEHAVIORAL_METRICS","ROAP_GLARE_CONDITION","data","correlation_id","locus_id","split","pop","sequence","Metrics","sendBehavioralMetric","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_, BEHAVIORAL_METRICS} 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 = BEHAVIORAL_METRICS.ROAP_GLARE_CONDITION;\n const data = {\n correlation_id: correlationId,\n locus_id: locusUrl.split('/').pop(),\n sequence: sequenceId\n };\n\n Metrics.sendBehavioralMetric(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 = BEHAVIORAL_METRICS.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.sendBehavioralMetric(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"]}
|
|
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","BEHAVIORAL_METRICS","ROAP_GLARE_CONDITION","data","correlation_id","locus_id","split","pop","sequence","Metrics","sendBehavioralMetric","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_} from '../constants';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\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 = BEHAVIORAL_METRICS.ROAP_GLARE_CONDITION;\n const data = {\n correlation_id: correlationId,\n locus_id: locusUrl.split('/').pop(),\n sequence: sequenceId\n };\n\n Metrics.sendBehavioralMetric(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 = BEHAVIORAL_METRICS.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.sendBehavioralMetric(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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/plugin-meetings",
|
|
3
|
-
"version": "1.156.
|
|
3
|
+
"version": "1.156.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"contributors": [
|
|
@@ -24,18 +24,18 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@babel/runtime-corejs2": "^7.14.8",
|
|
27
|
-
"@webex/webex-core": "1.156.
|
|
28
|
-
"@webex/internal-plugin-mercury": "1.156.
|
|
27
|
+
"@webex/webex-core": "1.156.3",
|
|
28
|
+
"@webex/internal-plugin-mercury": "1.156.3",
|
|
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
33
|
"ip-anonymize": "^0.1.0",
|
|
34
|
-
"@webex/common": "1.156.
|
|
34
|
+
"@webex/common": "1.156.3",
|
|
35
35
|
"bowser": "^2.11.0",
|
|
36
36
|
"sdp-transform": "^2.12.0",
|
|
37
37
|
"readable-stream": "^3.6.0",
|
|
38
|
-
"@webex/common-timers": "1.156.
|
|
38
|
+
"@webex/common-timers": "1.156.3",
|
|
39
39
|
"btoa": "^1.2.1",
|
|
40
40
|
"javascript-state-machine": "^3.1.0",
|
|
41
41
|
"envify": "^4.1.0"
|
package/src/constants.js
CHANGED
|
@@ -1207,48 +1207,6 @@ export const MEDIA_DEVICES = {
|
|
|
1207
1207
|
CAMERA: 'camera'
|
|
1208
1208
|
};
|
|
1209
1209
|
|
|
1210
|
-
// Metrics constants ----------------------------------------------------------
|
|
1211
|
-
|
|
1212
|
-
export const BEHAVIORAL_METRICS = {
|
|
1213
|
-
MEETINGS_REGISTRATION_FAILED: 'js_sdk_meetings_registration_failed',
|
|
1214
|
-
MEETINGS_REGISTRATION_SUCCESS: 'js_sdk_meetings_registration_success',
|
|
1215
|
-
MERCURY_CONNECTION_FAILURE: 'js_sdk_mercury_connection_failure',
|
|
1216
|
-
MERCURY_CONNECTION_RESTORED: 'js_sdk_mercury_connection_restored',
|
|
1217
|
-
JOIN_SUCCESS: 'js_sdk_join_success',
|
|
1218
|
-
JOIN_FAILURE: 'js_sdk_join_failures',
|
|
1219
|
-
ADD_MEDIA_SUCCESS: 'js_sdk_add_media_success',
|
|
1220
|
-
ADD_MEDIA_FAILURE: 'js_sdk_add_media_failures',
|
|
1221
|
-
CONNECTION_SUCCESS: 'js_sdk_connection_success',
|
|
1222
|
-
CONNECTION_FAILURE: 'js_sdk_connection_failures',
|
|
1223
|
-
MEETING_LEAVE_FAILURE: 'js_sdk_meeting_leave_failure',
|
|
1224
|
-
GET_USER_MEDIA_FAILURE: 'js_sdk_get_user_media_failures',
|
|
1225
|
-
GET_DISPLAY_MEDIA_FAILURE: 'js_sdk_get_display_media_failures',
|
|
1226
|
-
JOIN_WITH_MEDIA_FAILURE: 'js_sdk_join_with_media_failures',
|
|
1227
|
-
|
|
1228
|
-
DISCONNECT_DUE_TO_INACTIVITY: 'js_sdk_disconnect_due_to_inactivity',
|
|
1229
|
-
MEETING_MEDIA_INACTIVE: 'js_sdk_meeting_media_inactive',
|
|
1230
|
-
MEETING_RECONNECT_FAILURE: 'js_sdk_meeting_reconnect_failures',
|
|
1231
|
-
MEETING_MAX_REJOIN_FAILURE: 'js_sdk_meeting_max_rejoin_failure',
|
|
1232
|
-
MEETING_SHARE_FAILURE: 'js_sdk_meeting_share_failures',
|
|
1233
|
-
MEETING_START_WHITEBOARD_SHARE_FAILURE: 'js_sdk_meeting_start_whiteboard_share_failures',
|
|
1234
|
-
MEETING_STOP_WHITEBOARD_SHARE_FAILURE: 'js_sdk_meeting_stop_whiteboard_share_failures',
|
|
1235
|
-
MUTE_AUDIO_FAILURE: 'js_sdk_mute_audio_failures',
|
|
1236
|
-
MUTE_VIDEO_FAILURE: 'js_sdk_mute_video_failures',
|
|
1237
|
-
SET_MEETING_QUALITY_FAILURE: 'js_sdk_set_meeting_quality_failures',
|
|
1238
|
-
STOP_FLOOR_REQUEST_FAILURE: 'js_sdk_stop_floor_request_failures',
|
|
1239
|
-
ADD_DIAL_IN_FAILURE: 'js_sdk_add_dial_in_failure',
|
|
1240
|
-
ADD_DIAL_OUT_FAILURE: 'js_sdk_add_dial_out_failure',
|
|
1241
|
-
UPDATE_MEDIA_FAILURE: 'js_sdk_update_media_failures',
|
|
1242
|
-
UNMUTE_AUDIO_FAILURE: 'js_sdk_unmute_audio_failures',
|
|
1243
|
-
UNMUTE_VIDEO_FAILURE: 'js_sdk_unmute_video_failures',
|
|
1244
|
-
ROAP_ANSWER_FAILURE: 'js_sdk_roap_answer_failures',
|
|
1245
|
-
ROAP_GLARE_CONDITION: 'js_sdk_roap_glar_condition',
|
|
1246
|
-
PEERCONNECTION_FAILURE: 'js_sdk_peerConnection_failures',
|
|
1247
|
-
INVALID_ICE_CANDIDATE: 'js_sdk_invalid_ice_candidate',
|
|
1248
|
-
UPLOAD_LOGS_FAILURE: 'js_sdk_upload_logs_failure',
|
|
1249
|
-
RECEIVE_TRANSCRIPTION_FAILURE: 'js_sdk_receive_transcription_failure'
|
|
1250
|
-
};
|
|
1251
|
-
|
|
1252
1210
|
export const METRICS_JOIN_TIMES_MAX_DURATION = 1200000;
|
|
1253
1211
|
|
|
1254
1212
|
export const PSTN_STATUS = {
|
package/src/meeting/index.js
CHANGED
|
@@ -56,7 +56,6 @@ import {
|
|
|
56
56
|
MEETING_STATE,
|
|
57
57
|
MEETINGS,
|
|
58
58
|
METRICS_JOIN_TIMES_MAX_DURATION,
|
|
59
|
-
BEHAVIORAL_METRICS,
|
|
60
59
|
MQA_STATS,
|
|
61
60
|
NETWORK_STATUS,
|
|
62
61
|
ONLINE,
|
|
@@ -76,6 +75,7 @@ import {
|
|
|
76
75
|
VIDEO,
|
|
77
76
|
HTTP_VERBS
|
|
78
77
|
} from '../constants';
|
|
78
|
+
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
79
79
|
import ParameterError from '../common/errors/parameter';
|
|
80
80
|
import MediaError from '../common/errors/media';
|
|
81
81
|
import {MeetingInfoV2PasswordError, MeetingInfoV2CaptchaError} from '../meeting-info/meeting-info-v2';
|
package/src/meetings/index.js
CHANGED
|
@@ -37,9 +37,9 @@ import {
|
|
|
37
37
|
_ID_,
|
|
38
38
|
MEETING_REMOVED_REASON,
|
|
39
39
|
_CONVERSATION_URL_,
|
|
40
|
-
CONVERSATION_URL
|
|
41
|
-
BEHAVIORAL_METRICS
|
|
40
|
+
CONVERSATION_URL
|
|
42
41
|
} from '../constants';
|
|
42
|
+
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
43
43
|
import MeetingInfo from '../meeting-info';
|
|
44
44
|
import MeetingInfoV2 from '../meeting-info/meeting-info-v2';
|
|
45
45
|
import Meeting from '../meeting';
|
package/src/meetings/util.js
CHANGED
|
@@ -84,7 +84,7 @@ MeetingsUtil.hasH264Codec = async () => {
|
|
|
84
84
|
pc.close();
|
|
85
85
|
}
|
|
86
86
|
catch (error) {
|
|
87
|
-
LoggerProxy.logger.
|
|
87
|
+
LoggerProxy.logger.warn('Meetings:util#hasH264Codec --> Error creating peerConnection for H.264 test.');
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
return hasCodec;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
|
|
2
|
+
// Metrics constants ----------------------------------------------------------
|
|
3
|
+
|
|
4
|
+
const BEHAVIORAL_METRICS = {
|
|
5
|
+
MEETINGS_REGISTRATION_FAILED: 'js_sdk_meetings_registration_failed',
|
|
6
|
+
MEETINGS_REGISTRATION_SUCCESS: 'js_sdk_meetings_registration_success',
|
|
7
|
+
MERCURY_CONNECTION_FAILURE: 'js_sdk_mercury_connection_failure',
|
|
8
|
+
MERCURY_CONNECTION_RESTORED: 'js_sdk_mercury_connection_restored',
|
|
9
|
+
JOIN_SUCCESS: 'js_sdk_join_success',
|
|
10
|
+
JOIN_FAILURE: 'js_sdk_join_failures',
|
|
11
|
+
ADD_MEDIA_SUCCESS: 'js_sdk_add_media_success',
|
|
12
|
+
ADD_MEDIA_FAILURE: 'js_sdk_add_media_failures',
|
|
13
|
+
CONNECTION_SUCCESS: 'js_sdk_connection_success',
|
|
14
|
+
CONNECTION_FAILURE: 'js_sdk_connection_failures',
|
|
15
|
+
MEETING_LEAVE_FAILURE: 'js_sdk_meeting_leave_failure',
|
|
16
|
+
GET_USER_MEDIA_FAILURE: 'js_sdk_get_user_media_failures',
|
|
17
|
+
GET_DISPLAY_MEDIA_FAILURE: 'js_sdk_get_display_media_failures',
|
|
18
|
+
JOIN_WITH_MEDIA_FAILURE: 'js_sdk_join_with_media_failures',
|
|
19
|
+
|
|
20
|
+
DISCONNECT_DUE_TO_INACTIVITY: 'js_sdk_disconnect_due_to_inactivity',
|
|
21
|
+
MEETING_MEDIA_INACTIVE: 'js_sdk_meeting_media_inactive',
|
|
22
|
+
MEETING_RECONNECT_FAILURE: 'js_sdk_meeting_reconnect_failures',
|
|
23
|
+
MEETING_MAX_REJOIN_FAILURE: 'js_sdk_meeting_max_rejoin_failure',
|
|
24
|
+
MEETING_SHARE_FAILURE: 'js_sdk_meeting_share_failures',
|
|
25
|
+
MEETING_START_WHITEBOARD_SHARE_FAILURE: 'js_sdk_meeting_start_whiteboard_share_failures',
|
|
26
|
+
MEETING_STOP_WHITEBOARD_SHARE_FAILURE: 'js_sdk_meeting_stop_whiteboard_share_failures',
|
|
27
|
+
MUTE_AUDIO_FAILURE: 'js_sdk_mute_audio_failures',
|
|
28
|
+
MUTE_VIDEO_FAILURE: 'js_sdk_mute_video_failures',
|
|
29
|
+
SET_MEETING_QUALITY_FAILURE: 'js_sdk_set_meeting_quality_failures',
|
|
30
|
+
STOP_FLOOR_REQUEST_FAILURE: 'js_sdk_stop_floor_request_failures',
|
|
31
|
+
ADD_DIAL_IN_FAILURE: 'js_sdk_add_dial_in_failure',
|
|
32
|
+
ADD_DIAL_OUT_FAILURE: 'js_sdk_add_dial_out_failure',
|
|
33
|
+
UPDATE_MEDIA_FAILURE: 'js_sdk_update_media_failures',
|
|
34
|
+
UNMUTE_AUDIO_FAILURE: 'js_sdk_unmute_audio_failures',
|
|
35
|
+
UNMUTE_VIDEO_FAILURE: 'js_sdk_unmute_video_failures',
|
|
36
|
+
ROAP_ANSWER_FAILURE: 'js_sdk_roap_answer_failures',
|
|
37
|
+
ROAP_GLARE_CONDITION: 'js_sdk_roap_glar_condition',
|
|
38
|
+
PEERCONNECTION_FAILURE: 'js_sdk_peerConnection_failures',
|
|
39
|
+
INVALID_ICE_CANDIDATE: 'js_sdk_invalid_ice_candidate',
|
|
40
|
+
UPLOAD_LOGS_FAILURE: 'js_sdk_upload_logs_failure',
|
|
41
|
+
RECEIVE_TRANSCRIPTION_FAILURE: 'js_sdk_receive_transcription_failure'
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
export {BEHAVIORAL_METRICS as default};
|
package/src/metrics/index.js
CHANGED
|
@@ -14,7 +14,7 @@ import BrowserDetection from '../common/browser-detection';
|
|
|
14
14
|
|
|
15
15
|
import {
|
|
16
16
|
error, eventType, errorCodes as ERROR_CODE, OS_NAME, UNKNOWN, CLIENT_NAME,
|
|
17
|
-
mediaType
|
|
17
|
+
mediaType
|
|
18
18
|
} from './config';
|
|
19
19
|
|
|
20
20
|
const OSMap = {
|
|
@@ -504,44 +504,10 @@ class Metrics {
|
|
|
504
504
|
* @returns {void}
|
|
505
505
|
*/
|
|
506
506
|
sendBehavioralMetric(metricName, metricFields = {}, metricTags = {}) {
|
|
507
|
-
const fields = {
|
|
508
|
-
...metricFields,
|
|
509
|
-
browser_version: getBrowserVersion(),
|
|
510
|
-
os_version: getOSVersion(),
|
|
511
|
-
sdk_version: this.webex.version,
|
|
512
|
-
platform: PLATFORM
|
|
513
|
-
};
|
|
514
|
-
|
|
515
|
-
const context = {
|
|
516
|
-
app: {
|
|
517
|
-
version: this.webex.version
|
|
518
|
-
},
|
|
519
|
-
locale: 'en-US',
|
|
520
|
-
os: {
|
|
521
|
-
name: getOSName(),
|
|
522
|
-
version: getOSVersion()
|
|
523
|
-
}
|
|
524
|
-
};
|
|
525
|
-
|
|
526
|
-
const tags = {
|
|
527
|
-
...metricTags,
|
|
528
|
-
browser: getBrowserName(),
|
|
529
|
-
org_id: this.webex.credentials.getOrgId(),
|
|
530
|
-
os: getOSName(),
|
|
531
|
-
domain: window.location.hostname,
|
|
532
|
-
client_id: this.webex.credentials.config.client_id,
|
|
533
|
-
user_id: this.webex.internal.device.userId
|
|
534
|
-
};
|
|
535
|
-
|
|
536
|
-
if (!metricName) {
|
|
537
|
-
throw Error('Missing behavioral metric name. Please provide one');
|
|
538
|
-
}
|
|
539
|
-
|
|
540
507
|
this.webex.internal.metrics.submitClientMetrics(metricName, {
|
|
541
|
-
type:
|
|
542
|
-
fields,
|
|
543
|
-
tags
|
|
544
|
-
context
|
|
508
|
+
type: this.webex.config.metrics.type,
|
|
509
|
+
fields: metricFields,
|
|
510
|
+
tags: metricTags
|
|
545
511
|
});
|
|
546
512
|
}
|
|
547
513
|
}
|
|
@@ -20,9 +20,9 @@ import {
|
|
|
20
20
|
PEER_CONNECTION_STATE,
|
|
21
21
|
OFFER,
|
|
22
22
|
QUALITY_LEVELS,
|
|
23
|
-
MAX_FRAMESIZES
|
|
24
|
-
BEHAVIORAL_METRICS
|
|
23
|
+
MAX_FRAMESIZES
|
|
25
24
|
} from '../constants';
|
|
25
|
+
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
26
26
|
import {error, eventType} from '../metrics/config';
|
|
27
27
|
import MediaError from '../common/errors/media';
|
|
28
28
|
import ParameterError from '../common/errors/parameter';
|
|
@@ -8,7 +8,6 @@ import LoggerProxy from '../common/logs/logger-proxy';
|
|
|
8
8
|
import Trigger from '../common/events/trigger-proxy';
|
|
9
9
|
import {
|
|
10
10
|
EVENT_TRIGGERS,
|
|
11
|
-
BEHAVIORAL_METRICS,
|
|
12
11
|
RECONNECTION,
|
|
13
12
|
SHARE_STATUS,
|
|
14
13
|
SHARE_STOPPED_REASON,
|
|
@@ -16,6 +15,7 @@ import {
|
|
|
16
15
|
_LEFT_,
|
|
17
16
|
_ID_
|
|
18
17
|
} from '../constants';
|
|
18
|
+
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
19
19
|
import ReconnectionError from '../common/errors/reconnection';
|
|
20
20
|
import ReconnectInProgress from '../common/errors/reconnection-in-progress';
|
|
21
21
|
import PeerConnectionManager from '../peer-connection-manager';
|
package/src/roap/handler.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
import {StatelessWebexPlugin} from '@webex/webex-core';
|
|
3
3
|
|
|
4
4
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
5
|
-
import {ROAP, _OFFER_
|
|
5
|
+
import {ROAP, _OFFER_} from '../constants';
|
|
6
6
|
import Metrics from '../metrics';
|
|
7
|
+
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
7
8
|
|
|
8
9
|
import RoapUtil from './util';
|
|
9
10
|
import RoapCollection from './collection';
|
|
@@ -30,13 +30,13 @@ import Metrics from '@webex/plugin-meetings/src/metrics';
|
|
|
30
30
|
import {
|
|
31
31
|
FLOOR_ACTION,
|
|
32
32
|
SHARE_STATUS,
|
|
33
|
-
BEHAVIORAL_METRICS,
|
|
34
33
|
MEETING_INFO_FAILURE_REASON,
|
|
35
34
|
PASSWORD_STATUS,
|
|
36
35
|
EVENTS,
|
|
37
36
|
EVENT_TRIGGERS,
|
|
38
37
|
_SIP_URI_
|
|
39
38
|
} from '@webex/plugin-meetings/src/constants';
|
|
39
|
+
import {BEHAVIORAL_METRICS} from '@webex/plugin-meetings/src/metrics/constants';
|
|
40
40
|
|
|
41
41
|
import {
|
|
42
42
|
UserNotJoinedError,
|