@webex/plugin-meetings 3.11.0-next.46 → 3.11.0-next.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/aiEnableRequest/index.js +1 -1
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/interceptors/dataChannelAuthToken.js +103 -46
  5. package/dist/interceptors/dataChannelAuthToken.js.map +1 -1
  6. package/dist/interceptors/utils.js +27 -0
  7. package/dist/interceptors/utils.js.map +1 -0
  8. package/dist/interpretation/index.js +1 -1
  9. package/dist/interpretation/siLanguage.js +1 -1
  10. package/dist/meeting/index.js +4 -6
  11. package/dist/meeting/index.js.map +1 -1
  12. package/dist/meeting/request.js +2 -2
  13. package/dist/meeting/request.js.map +1 -1
  14. package/dist/multistream/mediaRequestManager.js +9 -60
  15. package/dist/multistream/mediaRequestManager.js.map +1 -1
  16. package/dist/reconnection-manager/index.js +0 -1
  17. package/dist/reconnection-manager/index.js.map +1 -1
  18. package/dist/types/interceptors/dataChannelAuthToken.d.ts +8 -0
  19. package/dist/types/interceptors/utils.d.ts +1 -0
  20. package/dist/types/multistream/mediaRequestManager.d.ts +0 -23
  21. package/dist/webinar/index.js +8 -2
  22. package/dist/webinar/index.js.map +1 -1
  23. package/package.json +4 -3
  24. package/src/interceptors/dataChannelAuthToken.ts +28 -0
  25. package/src/interceptors/utils.ts +16 -0
  26. package/src/meeting/index.ts +5 -5
  27. package/src/meeting/request.ts +4 -4
  28. package/src/multistream/mediaRequestManager.ts +3 -53
  29. package/src/reconnection-manager/index.ts +0 -1
  30. package/src/webinar/index.ts +5 -0
  31. package/test/unit/spec/interceptors/dataChannelAuthToken.ts +69 -0
  32. package/test/unit/spec/interceptors/utils.ts +75 -0
  33. package/test/unit/spec/meeting/index.js +6 -6
  34. package/test/unit/spec/meeting/request.js +18 -12
  35. package/test/unit/spec/multistream/mediaRequestManager.ts +2 -85
  36. package/test/unit/spec/reconnection-manager/index.js +4 -8
  37. package/test/unit/spec/webinar/index.ts +18 -0
@@ -1 +1 @@
1
- {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_triggerProxy","_constants","_constants2","_reconnection","_reconnectionNotStarted","_metrics","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","NeedsRetryError","_Error","_classCallCheck2","arguments","_inherits2","_createClass2","_wrapNativeSuper2","Error","NeedsRejoinError","_Error2","_ref","_this","wasSharing","_ref$error","error","_defineProperty2","ReconnectionManager","exports","meeting","iceState","disconnected","resolve","timer","undefined","timeoutDuration","config","reconnection","iceReconnectionTimeout","status","RECONNECTION","STATE","DEFAULT_STATUS","webex","maxRejoinAttempts","rejoinAttempts","autoRejoinEnabled","autoRejoin","reset","key","value","resetReconnectionTimer","clearTimeout","iceReconnected","LoggerProxy","logger","log","waitForIceReconnect","_this2","_promise","reject","setTimeout","concat","cleanUp","_stopLocalShareStream","_asyncToGenerator2","_regenerator","mark","_callee","reason","wrap","_context","prev","next","unpublishStreams","mediaProperties","shareVideoStream","shareAudioStream","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","stop","stopLocalShareStream","_x","isReconnectInProgress","IN_PROGRESS","canStartReconnection","enabled","info","_reconnect","_callee2","_this3","_ref2","_ref2$networkDisconne","networkDisconnect","_ref2$networkRetry","networkRetry","completionCallback","triggerEvent","_args2","_t","_t2","_t3","_context2","length","id","event","payload","ReconnectionNotStartedError","MEETING_RECONNECTION_STARTING","internal","newMetrics","submitClientEvent","name","options","meetingId","meetings","startReachability","executeReconnection","reconnect","abrupt","message","errors","category","errorCode","fatal","shownToUser","rejoinMeeting","MEETING_RECONNECTION_SUCCESS","recoveredBy","MEETING_RECONNECTION_FAILURE","ReconnectionError","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_RECONNECT_FAILURE","correlation_id","correlationId","locus_id","locusUrl","split","pop","stack","finish","_executeReconnection","_callee3","_ref3","_ref3$networkDisconne","media","_t4","_t5","_t6","_context3","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","SHARE_STOPPED_REASON","MEDIA_RECONNECTION","reconnectMercuryWebSocket","device","url","FAILURE","syncMeetings","keepOnlyLocusMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","sent","_x2","_rejoinMeeting","_callee4","_args4","_t7","_t8","_context4","join","rejoin","MEETING_REJOIN","MEETING_MAX_REJOIN_FAILURE","_reconnectMedia","_callee5","_turnServerResult$tur","turnServerResult","iceServers","_context5","roap","doTurnDiscovery","turnServerInfo","urls","push","username","credential","password","webrtcMediaConnection","isMultistream","_values","mediaRequestManagers","forEach","mediaRequestManager","clearPreviousRequests","commit","_reconnectMercuryWebSocket","_callee6","_t9","_t0","_context6","mercury","connected","disconnect","connect"],"sources":["index.ts"],"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 RECONNECTION_STATE,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectionNotStartedError from '../common/errors/reconnection-not-started';\nimport Metrics from '../metrics';\nimport Meeting from '../meeting';\nimport {MediaRequestManager} from '../multistream/mediaRequestManager';\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 wasSharing: any;\n\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({\n wasSharing,\n error = new Error('Meeting needs to be rejoined'),\n }: {\n wasSharing?: boolean;\n error?: Error;\n }) {\n // @ts-ignore\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n */\nexport default class ReconnectionManager {\n autoRejoinEnabled: any;\n iceState: any;\n maxRejoinAttempts: any;\n meeting: any;\n rejoinAttempts: any;\n shareStatus: any;\n status: any;\n webex: any;\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting: 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 // @ts-ignore\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout,\n };\n\n /**\n * @instance\n * @type {RECONNECTION_STATE}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\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 // @ts-ignore\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 // @ts-ignore\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = 0;\n // @ts-ignore\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {void}\n */\n resetReconnectionTimer() {\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\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 public iceReconnected() {\n if (this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');\n\n this.resetReconnectionTimer();\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 public waitForIceReconnect() {\n if (!this.iceState.disconnected) {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'\n );\n\n this.iceState.disconnected = true;\n\n return new Promise<void>((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n } else {\n this.iceState.disconnected = false;\n reject(\n new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)\n );\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 public reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.rejoinAttempts = 0;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public cleanUp() {\n this.reset();\n }\n\n /**\n * Stop the local share stream.\n *\n * @param {string} reason a {@link SHARE_STOPPED_REASON}\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n private async stopLocalShareStream(reason: string) {\n await this.meeting.unpublishStreams([\n this.meeting.mediaProperties.shareVideoStream,\n this.meeting.mediaProperties.shareAudioStream,\n ]);\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'stopLocalShareStream',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason,\n }\n );\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {Boolean} true if reconnection operation is in progress\n */\n isReconnectInProgress() {\n return this.status === RECONNECTION.STATE.IN_PROGRESS;\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectInProgress, ReconnectionDisabled}\n * @private\n * @memberof ReconnectionManager\n */\n private canStartReconnection() {\n if (this.meeting.config.reconnection.enabled) {\n if (this.status === RECONNECTION.STATE.DEFAULT_STATUS) {\n return true;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#canStartReconnection --> Reconnection already in progress.'\n );\n\n return false;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#canStartReconnection --> Reconnection is not enabled.'\n );\n\n return false;\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 * @param {Function} [completionCallback] callback that gets called when reconnection is started successfully\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public async reconnect(\n {\n networkDisconnect = false,\n networkRetry = false,\n }: {\n networkDisconnect?: boolean;\n networkRetry?: boolean;\n } = {},\n completionCallback: (() => Promise<void>) | undefined = undefined\n ) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`\n );\n\n const triggerEvent = (event, payload = undefined) =>\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'reconnect',\n },\n event,\n payload\n );\n\n if (!this.canStartReconnection()) {\n throw new ReconnectionNotStartedError();\n }\n\n try {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_STARTING);\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.reconnecting',\n options: {\n meetingId: this.meeting.id,\n },\n });\n }\n\n try {\n await this.webex.meetings.startReachability('reconnection');\n } catch (err) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reachability failed, continuing with reconnection attempt, err: ',\n err\n );\n }\n\n try {\n await this.executeReconnection({networkDisconnect});\n } catch (reconnectError) {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'\n );\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 await this.reconnect({networkDisconnect: true, networkRetry: true}, completionCallback);\n\n return;\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnect --> Reconnection failed.',\n reconnectError.message\n );\n\n // send call aborted event with category as expected as we are trying to rejoin\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.aborted',\n payload: {\n errors: [\n {\n category: 'expected',\n errorCode: 2008,\n fatal: true,\n name: 'media-engine',\n shownToUser: false,\n },\n ],\n },\n options: {\n meetingId: this.meeting.id,\n },\n });\n\n if (reconnectError instanceof NeedsRejoinError && this.autoRejoinEnabled) {\n await this.rejoinMeeting(reconnectError.wasSharing);\n\n return;\n }\n\n throw reconnectError;\n }\n\n // finalize the reconnection process by calling the completionCallback\n if (completionCallback) {\n await completionCallback();\n }\n\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_SUCCESS);\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.recovered',\n payload: {\n recoveredBy: 'new',\n },\n options: {\n meetingId: this.meeting.id,\n },\n });\n } catch (error) {\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_FAILURE, {\n error: new ReconnectionError('Reconnection failure event', error),\n });\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_RECONNECT_FAILURE, {\n correlation_id: this.meeting.correlationId,\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n throw new ReconnectionError('Reconnection failure event', error);\n } finally {\n this.reset();\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 private async executeReconnection({networkDisconnect = false}: {networkDisconnect?: boolean}) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'\n );\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n if (wasSharing) {\n await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEDIA_RECONNECTION);\n }\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Websocket reconnected.',\n this.webex.internal.device.url\n );\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw error;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'\n );\n await this.webex.meetings.syncMeetings({keepOnlyLocusMeetings: false});\n } catch (syncError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',\n syncError\n );\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(\n 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.'\n );\n\n throw new Error('Unable to rejoin a meeting already ended or inactive.');\n }\n\n LoggerProxy.logger.info(\n `ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`\n );\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(\n 'ReconnectionManager:index#executeReconnection --> webRTC media connection renewed and local sdp offer sent'\n );\n\n return media;\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> failed to renew webRTC media connection or initiate offer'\n );\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(\n 'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'\n );\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n if (wasSharing) {\n await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEETING_REJOIN);\n }\n } catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,\n joinError\n );\n this.rejoinMeeting();\n } else {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',\n joinError\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack,\n });\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n } catch (mediaError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',\n mediaError\n );\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMedia() {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> do turn discovery');\n\n // do the TURN server discovery again and ignore reachability results since the TURN server might change\n const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true, true);\n\n const iceServers = [];\n\n if (turnServerResult.turnServerInfo?.urls.length > 0) {\n iceServers.push({\n urls: turnServerResult.turnServerInfo.urls,\n username: turnServerResult.turnServerInfo.username || '',\n credential: turnServerResult.turnServerInfo.password || '',\n });\n }\n\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#reconnectMedia --> renew webRTC media connection and send local sdp offer'\n );\n\n await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);\n\n // resend media requests\n if (this.meeting.isMultistream) {\n Object.values(this.meeting.mediaRequestManagers).forEach(\n (mediaRequestManager: MediaRequestManager) => {\n mediaRequestManager.clearPreviousRequests();\n mediaRequestManager.commit();\n }\n );\n }\n }\n\n /**\n * Attempt to Reconnect Mercury Websocket\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n private async reconnectMercuryWebSocket() {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.'\n );\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.'\n );\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info(\n '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(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.',\n disconnectError\n );\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'\n );\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.'\n );\n } catch (connectError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.',\n connectError\n );\n\n throw connectError;\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAMA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAUA,IAAAG,WAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,aAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,uBAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,QAAA,GAAAP,sBAAA,CAAAC,OAAA;AAAiC,SAAAO,WAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,WAAAD,CAAA,OAAAE,gBAAA,CAAAC,OAAA,EAAAH,CAAA,OAAAI,2BAAA,CAAAD,OAAA,EAAAJ,CAAA,EAAAM,yBAAA,KAAAC,kBAAA,CAAAN,CAAA,EAAAC,CAAA,YAAAC,gBAAA,CAAAC,OAAA,EAAAJ,CAAA,EAAAQ,WAAA,IAAAP,CAAA,CAAAQ,KAAA,CAAAT,CAAA,EAAAE,CAAA;AAAA,SAAAI,0BAAA,cAAAN,CAAA,IAAAU,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAN,kBAAA,CAAAG,OAAA,iCAAAV,CAAA,aAAAM,yBAAA,YAAAA,0BAAA,aAAAN,CAAA,UArBjC;AACA;AACA,GAFA,CAIA;AAqBA;AACA;AACA;AACA;AACA;AACA;AALA,IAMMc,eAAe,0BAAAC,MAAA;EAAA,SAAAD,gBAAA;IAAA,IAAAE,gBAAA,CAAAZ,OAAA,QAAAU,eAAA;IAAA,OAAAf,UAAA,OAAAe,eAAA,EAAAG,SAAA;EAAA;EAAA,IAAAC,UAAA,CAAAd,OAAA,EAAAU,eAAA,EAAAC,MAAA;EAAA,WAAAI,aAAA,CAAAf,OAAA,EAAAU,eAAA;AAAA,mBAAAM,iBAAA,CAAAhB,OAAA,EAASiB,KAAK;AAEnC;AACA;AACA;AACA;AACA;AACA;AALA,IAMMC,gBAAgB,0BAAAC,OAAA;EAGpB;AACF;AACA;AACA;AACA;AACA;AACA;EACE,SAAAD,iBAAAE,IAAA,EAMG;IAAA,IAAAC,KAAA;IAAA,IALDC,UAAU,GAAAF,IAAA,CAAVE,UAAU;MAAAC,UAAA,GAAAH,IAAA,CACVI,KAAK;MAALA,KAAK,GAAAD,UAAA,cAAG,IAAIN,KAAK,CAAC,8BAA8B,CAAC,GAAAM,UAAA;IAAA,IAAAX,gBAAA,CAAAZ,OAAA,QAAAkB,gBAAA;IAKjD;IACAG,KAAA,GAAA1B,UAAA,OAAAuB,gBAAA,GAAMM,KAAK;IAAE,IAAAC,gBAAA,CAAAzB,OAAA,EAAAqB,KAAA;IAEbA,KAAA,CAAKC,UAAU,GAAGA,UAAU;IAAC,OAAAD,KAAA;EAC/B;EAAC,IAAAP,UAAA,CAAAd,OAAA,EAAAkB,gBAAA,EAAAC,OAAA;EAAA,WAAAJ,aAAA,CAAAf,OAAA,EAAAkB,gBAAA;AAAA,mBAAAF,iBAAA,CAAAhB,OAAA,EArB4BiB,KAAK;AAwBpC;AACA;AACA;AACA;AAHA,IAIqBS,mBAAmB,GAAAC,OAAA,CAAA3B,OAAA;EAStC;AACF;AACA;EACE,SAAA0B,oBAAYE,OAAgB,EAAE;IAAA,IAAAhB,gBAAA,CAAAZ,OAAA,QAAA0B,mBAAA;IAAA,IAAAD,gBAAA,CAAAzB,OAAA;IAAA,IAAAyB,gBAAA,CAAAzB,OAAA;IAAA,IAAAyB,gBAAA,CAAAzB,OAAA;IAAA,IAAAyB,gBAAA,CAAAzB,OAAA;IAAA,IAAAyB,gBAAA,CAAAzB,OAAA;IAAA,IAAAyB,gBAAA,CAAAzB,OAAA;IAAA,IAAAyB,gBAAA,CAAAzB,OAAA;IAAA,IAAAyB,gBAAA,CAAAzB,OAAA;IAC5B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACI,IAAI,CAAC6B,QAAQ,GAAG;MACdC,YAAY,EAAE,KAAK;MACnBC,OAAO,EAAE,SAATA,OAAOA,CAAA,EAAQ,CAAC,CAAC;MACjBC,KAAK,EAAEC,SAAS;MAChB;MACAC,eAAe,EAAEN,OAAO,CAACO,MAAM,CAACC,YAAY,CAACC;IAC/C,CAAC;;IAED;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,MAAM,GAAGC,uBAAY,CAACC,KAAK,CAACC,cAAc;IAC/C;AACJ;AACA;AACA;AACA;AACA;IACI;IACA;IACA;IACA,IAAI,CAACC,KAAK,GAAGd,OAAO,CAACc,KAAK;IAC1B;AACJ;AACA;AACA;AACA;AACA;IACI;IACA;IACA,IAAI,CAACd,OAAO,GAAGA,OAAO;;IAEtB;IACA,IAAI,CAACe,iBAAiB,GAAGf,OAAO,CAACO,MAAM,CAACC,YAAY,CAACO,iBAAiB;IACtE,IAAI,CAACC,cAAc,GAAG,CAAC;IACvB;IACA,IAAI,CAACC,iBAAiB,GAAGjB,OAAO,CAACO,MAAM,CAACC,YAAY,CAACU,UAAU;;IAE/D;IACA,IAAI,CAACC,KAAK,CAAC,CAAC;EACd;;EAEA;AACF;AACA;AACA;AACA;EAJE,WAAAhC,aAAA,CAAAf,OAAA,EAAA0B,mBAAA;IAAAsB,GAAA;IAAAC,KAAA,EAKA,SAAAC,sBAAsBA,CAAA,EAAG;MACvB,IAAI,CAACrB,QAAQ,CAACE,OAAO,CAAC,CAAC;MACvB,IAAI,CAACF,QAAQ,CAACE,OAAO,GAAG,YAAM,CAAC,CAAC;MAEhC,IAAI,IAAI,CAACF,QAAQ,CAACG,KAAK,EAAE;QACvBmB,YAAY,CAAC,IAAI,CAACtB,QAAQ,CAACG,KAAK,CAAC;QACjC,OAAO,IAAI,CAACH,QAAQ,CAACG,KAAK;MAC5B;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAgB,GAAA;IAAAC,KAAA,EAQA,SAAOG,cAAcA,CAAA,EAAG;MACtB,IAAI,IAAI,CAACvB,QAAQ,CAACC,YAAY,EAAE;QAC9BuB,oBAAW,CAACC,MAAM,CAACC,GAAG,CAAC,kEAAkE,CAAC;QAE1F,IAAI,CAACL,sBAAsB,CAAC,CAAC;QAE7B,IAAI,CAACrB,QAAQ,CAACC,YAAY,GAAG,KAAK;MACpC;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EATE;IAAAkB,GAAA;IAAAC,KAAA,EAUA,SAAOO,mBAAmBA,CAAA,EAAG;MAAA,IAAAC,MAAA;MAC3B,IAAI,CAAC,IAAI,CAAC5B,QAAQ,CAACC,YAAY,EAAE;QAC/BuB,oBAAW,CAACC,MAAM,CAACC,GAAG,CACpB,6EACF,CAAC;QAED,IAAI,CAAC1B,QAAQ,CAACC,YAAY,GAAG,IAAI;QAEjC,OAAO,IAAA4B,QAAA,CAAA1D,OAAA,CAAkB,UAAC+B,OAAO,EAAE4B,MAAM,EAAK;UAC5CF,MAAI,CAAC5B,QAAQ,CAACG,KAAK,GAAG4B,UAAU,CAAC,YAAM;YACrC,IAAIH,MAAI,CAAC5B,QAAQ,CAACC,YAAY,KAAK,KAAK,EAAE;cACxCC,OAAO,CAAC,CAAC;YACX,CAAC,MAAM;cACL0B,MAAI,CAAC5B,QAAQ,CAACC,YAAY,GAAG,KAAK;cAClC6B,MAAM,CACJ,IAAI1C,KAAK,sCAAA4C,MAAA,CAAsCJ,MAAI,CAAC5B,QAAQ,CAACK,eAAe,OAAI,CAClF,CAAC;YACH;UACF,CAAC,EAAEuB,MAAI,CAAC5B,QAAQ,CAACK,eAAe,CAAC;UAEjCuB,MAAI,CAAC5B,QAAQ,CAACE,OAAO,GAAGA,OAAO;QACjC,CAAC,CAAC;MACJ;;MAEA;MACA,OAAO2B,QAAA,CAAA1D,OAAA,CAAQ+B,OAAO,CAAC,CAAC;IAC1B;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAiB,GAAA;IAAAC,KAAA,EAKA,SAAOF,KAAKA,CAAA,EAAG;MACb,IAAI,CAACT,MAAM,GAAGC,uBAAY,CAACC,KAAK,CAACC,cAAc;MAC/C,IAAI,CAACG,cAAc,GAAG,CAAC;IACzB;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAI,GAAA;IAAAC,KAAA,EAKA,SAAOa,OAAOA,CAAA,EAAG;MACf,IAAI,CAACf,KAAK,CAAC,CAAC;IACd;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAC,GAAA;IAAAC,KAAA;MAAA,IAAAc,qBAAA,OAAAC,kBAAA,CAAAhE,OAAA,eAAAiE,YAAA,CAAAjE,OAAA,CAAAkE,IAAA,CAQA,SAAAC,QAAmCC,MAAc;QAAA,OAAAH,YAAA,CAAAjE,OAAA,CAAAqE,IAAA,WAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cAAAF,QAAA,CAAAE,IAAA;cAAA,OACzC,IAAI,CAAC5C,OAAO,CAAC6C,gBAAgB,CAAC,CAClC,IAAI,CAAC7C,OAAO,CAAC8C,eAAe,CAACC,gBAAgB,EAC7C,IAAI,CAAC/C,OAAO,CAAC8C,eAAe,CAACE,gBAAgB,CAC9C,CAAC;YAAA;cACFC,qBAAO,CAACC,OAAO,CACb,IAAI,CAAClD,OAAO,EACZ;gBACEmD,IAAI,EAAE,4BAA4B;gBAClCC,QAAQ,EAAE;cACZ,CAAC,EACDC,yBAAc,CAACC,6BAA6B,EAC5C;gBACEd,MAAM,EAANA;cACF,CACF,CAAC;YAAC;YAAA;cAAA,OAAAE,QAAA,CAAAa,IAAA;UAAA;QAAA,GAAAhB,OAAA;MAAA,CACH;MAAA,SAhBaiB,oBAAoBA,CAAAC,EAAA;QAAA,OAAAtB,qBAAA,CAAA1D,KAAA,OAAAQ,SAAA;MAAA;MAAA,OAApBuE,oBAAoB;IAAA;IAkBlC;AACF;AACA;AACA;AACA;IAJE;EAAA;IAAApC,GAAA;IAAAC,KAAA,EAKA,SAAAqC,qBAAqBA,CAAA,EAAG;MACtB,OAAO,IAAI,CAAChD,MAAM,KAAKC,uBAAY,CAACC,KAAK,CAAC+C,WAAW;IACvD;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAvC,GAAA;IAAAC,KAAA,EAMA,SAAQuC,oBAAoBA,CAAA,EAAG;MAC7B,IAAI,IAAI,CAAC5D,OAAO,CAACO,MAAM,CAACC,YAAY,CAACqD,OAAO,EAAE;QAC5C,IAAI,IAAI,CAACnD,MAAM,KAAKC,uBAAY,CAACC,KAAK,CAACC,cAAc,EAAE;UACrD,OAAO,IAAI;QACb;QAEAY,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,sFACF,CAAC;QAED,OAAO,KAAK;MACd;MAEArC,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,iFACF,CAAC;MAED,OAAO,KAAK;IACd;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EATE;IAAA1C,GAAA;IAAAC,KAAA;MAAA,IAAA0C,UAAA,OAAA3B,kBAAA,CAAAhE,OAAA,eAAAiE,YAAA,CAAAjE,OAAA,CAAAkE,IAAA,CAUA,SAAA0B,SAAA;QAAA,IAAAC,MAAA;QAAA,IAAAC,KAAA;UAAAC,qBAAA;UAAAC,iBAAA;UAAAC,kBAAA;UAAAC,YAAA;UAAAC,kBAAA;UAAAC,YAAA;UAAAC,MAAA,GAAAxF,SAAA;UAAAyF,EAAA;UAAAC,GAAA;UAAAC,GAAA;QAAA,OAAAvC,YAAA,CAAAjE,OAAA,CAAAqE,IAAA,WAAAoC,SAAA;UAAA,kBAAAA,SAAA,CAAAlC,IAAA,GAAAkC,SAAA,CAAAjC,IAAA;YAAA;cAAAsB,KAAA,GAAAO,MAAA,CAAAK,MAAA,QAAAL,MAAA,QAAApE,SAAA,GAAAoE,MAAA,MAOM,CAAC,CAAC,EAAAN,qBAAA,GAAAD,KAAA,CALJE,iBAAiB,EAAjBA,iBAAiB,GAAAD,qBAAA,cAAG,KAAK,GAAAA,qBAAA,EAAAE,kBAAA,GAAAH,KAAA,CACzBI,YAAY,EAAZA,YAAY,GAAAD,kBAAA,cAAG,KAAK,GAAAA,kBAAA;cAKtBE,kBAAqD,GAAAE,MAAA,CAAAK,MAAA,QAAAL,MAAA,QAAApE,SAAA,GAAAoE,MAAA,MAAGpE,SAAS;cAEjEoB,oBAAW,CAACC,MAAM,CAACoC,IAAI,2EAAA7B,MAAA,CACqD,IAAI,CAACjC,OAAO,CAAC+E,EAAE,MAC3F,CAAC;cAEKP,YAAY,GAAG,SAAfA,YAAYA,CAAIQ,KAAK;gBAAA,IAAEC,OAAO,GAAAhG,SAAA,CAAA6F,MAAA,QAAA7F,SAAA,QAAAoB,SAAA,GAAApB,SAAA,MAAGoB,SAAS;gBAAA,OAC9C4C,qBAAO,CAACC,OAAO,CACbe,MAAI,CAACjE,OAAO,EACZ;kBACEmD,IAAI,EAAE,4BAA4B;kBAClCC,QAAQ,EAAE;gBACZ,CAAC,EACD4B,KAAK,EACLC,OACF,CAAC;cAAA;cAAA,IAEE,IAAI,CAACrB,oBAAoB,CAAC,CAAC;gBAAAiB,SAAA,CAAAjC,IAAA;gBAAA;cAAA;cAAA,MACxB,IAAIsC,+BAA2B,CAAC,CAAC;YAAA;cAAAL,SAAA,CAAAlC,IAAA;cAIvC,IAAI,CAACjC,MAAM,GAAGC,uBAAY,CAACC,KAAK,CAAC+C,WAAW;cAE5Ca,YAAY,CAACnB,yBAAc,CAAC8B,6BAA6B,CAAC;cAE1D,IAAI,CAACb,YAAY,EAAE;gBACjB;gBACA7C,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,yEACF,CAAC;;gBAED;gBACA,IAAI,CAAChD,KAAK,CAACsE,QAAQ,CAACC,UAAU,CAACC,iBAAiB,CAAC;kBAC/CC,IAAI,EAAE,2BAA2B;kBACjCC,OAAO,EAAE;oBACPC,SAAS,EAAE,IAAI,CAACzF,OAAO,CAAC+E;kBAC1B;gBACF,CAAC,CAAC;cACJ;cAACF,SAAA,CAAAlC,IAAA;cAAAkC,SAAA,CAAAjC,IAAA;cAAA,OAGO,IAAI,CAAC9B,KAAK,CAAC4E,QAAQ,CAACC,iBAAiB,CAAC,cAAc,CAAC;YAAA;cAAAd,SAAA,CAAAjC,IAAA;cAAA;YAAA;cAAAiC,SAAA,CAAAlC,IAAA;cAAA+B,EAAA,GAAAG,SAAA;cAE3DpD,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,0GAA0G,EAAAY,EAE5G,CAAC;YAAC;cAAAG,SAAA,CAAAlC,IAAA;cAAAkC,SAAA,CAAAjC,IAAA;cAAA,OAII,IAAI,CAACgD,mBAAmB,CAAC;gBAACxB,iBAAiB,EAAjBA;cAAiB,CAAC,CAAC;YAAA;cAAAS,SAAA,CAAAjC,IAAA;cAAA;YAAA;cAAAiC,SAAA,CAAAlC,IAAA;cAAAgC,GAAA,GAAAE,SAAA;cAAA,MAE/CF,GAAA,YAA0B7F,eAAe;gBAAA+F,SAAA,CAAAjC,IAAA;gBAAA;cAAA;cAC3CnB,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,gFACF,CAAC;cACD;cACA,IAAI,CAACpD,MAAM,GAAGC,uBAAY,CAACC,KAAK,CAACC,cAAc;;cAE/C;cAAAgE,SAAA,CAAAjC,IAAA;cAAA,OACM,IAAI,CAACiD,SAAS,CAAC;gBAACzB,iBAAiB,EAAE,IAAI;gBAAEE,YAAY,EAAE;cAAI,CAAC,EAAEC,kBAAkB,CAAC;YAAA;cAAA,OAAAM,SAAA,CAAAiB,MAAA;YAAA;cAKzF;cACArE,oBAAW,CAACC,MAAM,CAAC9B,KAAK,CACtB,8DAA8D,EAC9D+E,GAAA,CAAeoB,OACjB,CAAC;;cAED;cACA;cACA,IAAI,CAACjF,KAAK,CAACsE,QAAQ,CAACC,UAAU,CAACC,iBAAiB,CAAC;gBAC/CC,IAAI,EAAE,qBAAqB;gBAC3BN,OAAO,EAAE;kBACPe,MAAM,EAAE,CACN;oBACEC,QAAQ,EAAE,UAAU;oBACpBC,SAAS,EAAE,IAAI;oBACfC,KAAK,EAAE,IAAI;oBACXZ,IAAI,EAAE,cAAc;oBACpBa,WAAW,EAAE;kBACf,CAAC;gBAEL,CAAC;gBACDZ,OAAO,EAAE;kBACPC,SAAS,EAAE,IAAI,CAACzF,OAAO,CAAC+E;gBAC1B;cACF,CAAC,CAAC;cAAC,MAECJ,GAAA,YAA0BrF,gBAAgB,IAAI,IAAI,CAAC2B,iBAAiB;gBAAA4D,SAAA,CAAAjC,IAAA;gBAAA;cAAA;cAAAiC,SAAA,CAAAjC,IAAA;cAAA,OAChE,IAAI,CAACyD,aAAa,CAAC1B,GAAA,CAAejF,UAAU,CAAC;YAAA;cAAA,OAAAmF,SAAA,CAAAiB,MAAA;YAAA;cAAA,MAAAnB,GAAA;YAAA;cAAA,KASnDJ,kBAAkB;gBAAAM,SAAA,CAAAjC,IAAA;gBAAA;cAAA;cAAAiC,SAAA,CAAAjC,IAAA;cAAA,OACd2B,kBAAkB,CAAC,CAAC;YAAA;cAG5BC,YAAY,CAACnB,yBAAc,CAACiD,4BAA4B,CAAC;;cAEzD;cACA,IAAI,CAACxF,KAAK,CAACsE,QAAQ,CAACC,UAAU,CAACC,iBAAiB,CAAC;gBAC/CC,IAAI,EAAE,wBAAwB;gBAC9BN,OAAO,EAAE;kBACPsB,WAAW,EAAE;gBACf,CAAC;gBACDf,OAAO,EAAE;kBACPC,SAAS,EAAE,IAAI,CAACzF,OAAO,CAAC+E;gBAC1B;cACF,CAAC,CAAC;cAACF,SAAA,CAAAjC,IAAA;cAAA;YAAA;cAAAiC,SAAA,CAAAlC,IAAA;cAAAiC,GAAA,GAAAC,SAAA;cAEHL,YAAY,CAACnB,yBAAc,CAACmD,4BAA4B,EAAE;gBACxD5G,KAAK,EAAE,IAAI6G,qBAAiB,CAAC,4BAA4B,EAAA7B,GAAO;cAClE,CAAC,CAAC;cAEF8B,gBAAO,CAACC,oBAAoB,CAACC,mBAAkB,CAACC,yBAAyB,EAAE;gBACzEC,cAAc,EAAE,IAAI,CAAC9G,OAAO,CAAC+G,aAAa;gBAC1CC,QAAQ,EAAE,IAAI,CAAChH,OAAO,CAACiH,QAAQ,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAAC,CAAC;gBAChD3E,MAAM,EAAEoC,GAAA,CAAMmB,OAAO;gBACrBqB,KAAK,EAAExC,GAAA,CAAMwC;cACf,CAAC,CAAC;cAAC,MAEG,IAAIX,qBAAiB,CAAC,4BAA4B,EAAA7B,GAAO,CAAC;YAAA;cAAAC,SAAA,CAAAlC,IAAA;cAEhE,IAAI,CAACxB,KAAK,CAAC,CAAC;cAAC,OAAA0D,SAAA,CAAAwC,MAAA;YAAA;YAAA;cAAA,OAAAxC,SAAA,CAAAtB,IAAA;UAAA;QAAA,GAAAS,QAAA;MAAA,CAEhB;MAAA,SA9IY6B,SAASA,CAAA;QAAA,OAAA9B,UAAA,CAAAtF,KAAA,OAAAQ,SAAA;MAAA;MAAA,OAAT4G,SAAS;IAAA;IAgJtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IAPE;EAAA;IAAAzE,GAAA;IAAAC,KAAA;MAAA,IAAAiG,oBAAA,OAAAlF,kBAAA,CAAAhE,OAAA,eAAAiE,YAAA,CAAAjE,OAAA,CAAAkE,IAAA,CAQA,SAAAiF,SAAAC,KAAA;QAAA,IAAAC,qBAAA,EAAArD,iBAAA,EAAA1E,UAAA,EAAAgI,KAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA;QAAA,OAAAxF,YAAA,CAAAjE,OAAA,CAAAqE,IAAA,WAAAqF,SAAA;UAAA,kBAAAA,SAAA,CAAAnF,IAAA,GAAAmF,SAAA,CAAAlF,IAAA;YAAA;cAAA6E,qBAAA,GAAAD,KAAA,CAAmCpD,iBAAiB,EAAjBA,iBAAiB,GAAAqD,qBAAA,cAAG,KAAK,GAAAA,qBAAA;cAC1DhG,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,uFACF,CAAC;cAEKpE,UAAU,GAAG,IAAI,CAACM,OAAO,CAAC+H,WAAW,KAAKC,uBAAY,CAACC,kBAAkB;cAAA,KAE3EvI,UAAU;gBAAAoI,SAAA,CAAAlF,IAAA;gBAAA;cAAA;cAAAkF,SAAA,CAAAlF,IAAA;cAAA,OACN,IAAI,CAACY,oBAAoB,CAAC0E,+BAAoB,CAACC,kBAAkB,CAAC;YAAA;cAAA,KAGtE/D,iBAAiB;gBAAA0D,SAAA,CAAAlF,IAAA;gBAAA;cAAA;cAAAkF,SAAA,CAAAnF,IAAA;cAAAmF,SAAA,CAAAlF,IAAA;cAAA,OAEX,IAAI,CAACwF,yBAAyB,CAAC,CAAC;YAAA;cACtC3G,oBAAW,CAACC,MAAM,CAAC9B,KAAK,CACtB,0EAA0E,EAC1E,IAAI,CAACkB,KAAK,CAACsE,QAAQ,CAACiD,MAAM,CAACC,GAC7B,CAAC;cAACR,SAAA,CAAAlF,IAAA;cAAA;YAAA;cAAAkF,SAAA,CAAAnF,IAAA;cAAAgF,GAAA,GAAAG,SAAA;cAEFrG,oBAAW,CAACC,MAAM,CAAC9B,KAAK,CACtB,gGACF,CAAC;cACD,IAAI,CAACc,MAAM,GAAGC,uBAAY,CAACC,KAAK,CAAC2H,OAAO;cAAC,MAAAZ,GAAA;YAAA;cAAAG,SAAA,CAAAnF,IAAA;cAM3ClB,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,sFACF,CAAC;cAACgE,SAAA,CAAAlF,IAAA;cAAA,OACI,IAAI,CAAC9B,KAAK,CAAC4E,QAAQ,CAAC8C,YAAY,CAAC;gBAACC,qBAAqB,EAAE;cAAK,CAAC,CAAC;YAAA;cAAAX,SAAA,CAAAlF,IAAA;cAAA;YAAA;cAAAkF,SAAA,CAAAnF,IAAA;cAAAiF,GAAA,GAAAE,SAAA;cAEtErG,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,0FAA0F,EAAA8D,GAE5F,CAAC;cAAC,MACI,IAAI9I,eAAe,CAAA8I,GAAU,CAAC;YAAA;cAAA,MAKlC,CAAC,IAAI,CAAC5H,OAAO,IAAI,CAAC,IAAI,CAACc,KAAK,CAAC4E,QAAQ,CAACgD,gBAAgB,CAACC,eAAI,EAAE,IAAI,CAAC3I,OAAO,CAAC+E,EAAE,CAAC;gBAAA+C,SAAA,CAAAlF,IAAA;gBAAA;cAAA;cAC/EnB,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,4GACF,CAAC;cAAC,MAEI,IAAIzE,KAAK,CAAC,uDAAuD,CAAC;YAAA;cAG1EoC,oBAAW,CAACC,MAAM,CAACoC,IAAI,kFAAA7B,MAAA,CAC4D,IAAI,CAACjC,OAAO,CAAC4I,KAAK,CACrG,CAAC;;cAED;cAAA,MACI,IAAI,CAAC5I,OAAO,CAAC4I,KAAK,KAAKC,iBAAM;gBAAAf,SAAA,CAAAlF,IAAA;gBAAA;cAAA;cAAA,MAC3B,IAAI,CAAC5C,OAAO,CAAC8I,IAAI,KAAKC,iBAAM;gBAAAjB,SAAA,CAAAlF,IAAA;gBAAA;cAAA;cAAA,MACxB,IAAIvD,KAAK,CAAC,wCAAwC,CAAC;YAAA;cAAA,MAGrD,IAAIC,gBAAgB,CAAC;gBAACI,UAAU,EAAVA;cAAU,CAAC,CAAC;YAAA;cAAAoI,SAAA,CAAAnF,IAAA;cAAAmF,SAAA,CAAAlF,IAAA;cAAA,OAIpB,IAAI,CAACoG,cAAc,CAAC,CAAC;YAAA;cAAnCtB,KAAK,GAAAI,SAAA,CAAAmB,IAAA;cAEXxH,oBAAW,CAACC,MAAM,CAACC,GAAG,CACpB,4GACF,CAAC;cAAC,OAAAmG,SAAA,CAAAhC,MAAA,WAEK4B,KAAK;YAAA;cAAAI,SAAA,CAAAnF,IAAA;cAAAkF,GAAA,GAAAC,SAAA;cAEZrG,oBAAW,CAACC,MAAM,CAAC9B,KAAK,CACtB,6GACF,CAAC;cACD,IAAI,CAACc,MAAM,GAAGC,uBAAY,CAACC,KAAK,CAAC2H,OAAO;cAAC,MAAAV,GAAA;YAAA;YAAA;cAAA,OAAAC,SAAA,CAAAvE,IAAA;UAAA;QAAA,GAAAgE,QAAA;MAAA,CAI5C;MAAA,SA/Ea3B,mBAAmBA,CAAAsD,GAAA;QAAA,OAAA5B,oBAAA,CAAA7I,KAAA,OAAAQ,SAAA;MAAA;MAAA,OAAnB2G,mBAAmB;IAAA;IAiFjC;AACF;AACA;AACA;AACA;AACA;AACA;IANE;EAAA;IAAAxE,GAAA;IAAAC,KAAA;MAAA,IAAA8H,cAAA,OAAA/G,kBAAA,CAAAhE,OAAA,eAAAiE,YAAA,CAAAjE,OAAA,CAAAkE,IAAA,CAOA,SAAA8G,SAAA;QAAA,IAAA1J,UAAA;UAAA2J,MAAA,GAAApK,SAAA;UAAAqK,GAAA;UAAAC,GAAA;QAAA,OAAAlH,YAAA,CAAAjE,OAAA,CAAAqE,IAAA,WAAA+G,SAAA;UAAA,kBAAAA,SAAA,CAAA7G,IAAA,GAAA6G,SAAA,CAAA5G,IAAA;YAAA;cAAoBlD,UAAU,GAAA2J,MAAA,CAAAvE,MAAA,QAAAuE,MAAA,QAAAhJ,SAAA,GAAAgJ,MAAA,MAAG,KAAK;cAAAG,SAAA,CAAA7G,IAAA;cAElClB,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,sEACF,CAAC;cAAC0F,SAAA,CAAA5G,IAAA;cAAA,OAEI,IAAI,CAAC5C,OAAO,CAACyJ,IAAI,CAAC;gBAACC,MAAM,EAAE;cAAI,CAAC,CAAC;YAAA;cACvCjI,oBAAW,CAACC,MAAM,CAACoC,IAAI,CAAC,8DAA8D,CAAC;cAAC,KAEpFpE,UAAU;gBAAA8J,SAAA,CAAA5G,IAAA;gBAAA;cAAA;cAAA4G,SAAA,CAAA5G,IAAA;cAAA,OACN,IAAI,CAACY,oBAAoB,CAAC0E,+BAAoB,CAACyB,cAAc,CAAC;YAAA;cAAAH,SAAA,CAAA5G,IAAA;cAAA;YAAA;cAAA4G,SAAA,CAAA7G,IAAA;cAAA2G,GAAA,GAAAE,SAAA;cAGtE,IAAI,CAACxI,cAAc,IAAI,CAAC;cAAC,MACrB,IAAI,CAACA,cAAc,IAAI,IAAI,CAACD,iBAAiB;gBAAAyI,SAAA,CAAA5G,IAAA;gBAAA;cAAA;cAC/CnB,oBAAW,CAACC,MAAM,CAACoC,IAAI,mFAAA7B,MAAA,CAC6D,IAAI,CAACjB,cAAc,kBAAAsI,GAEvG,CAAC;cACD,IAAI,CAACjD,aAAa,CAAC,CAAC;cAACmD,SAAA,CAAA5G,IAAA;cAAA;YAAA;cAErBnB,oBAAW,CAACC,MAAM,CAAC9B,KAAK,CACtB,0FAA0F,EAAA0J,GAE5F,CAAC;cACD5C,gBAAO,CAACC,oBAAoB,CAACC,mBAAkB,CAACgD,0BAA0B,EAAE;gBAC1E5C,QAAQ,EAAE,IAAI,CAAChH,OAAO,CAACiH,QAAQ,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAAC,CAAC;gBAChD3E,MAAM,EAAE8G,GAAA,CAAUvD,OAAO;gBACzBqB,KAAK,EAAEkC,GAAA,CAAUlC;cACnB,CAAC,CAAC;cACF,IAAI,CAAC1G,MAAM,GAAGC,uBAAY,CAACC,KAAK,CAAC2H,OAAO;cAAC,MAAAe,GAAA;YAAA;cAAAE,SAAA,CAAA7G,IAAA;cAAA6G,SAAA,CAAA5G,IAAA;cAAA,OAMrC,IAAI,CAACoG,cAAc,CAAC,CAAC;YAAA;cAAAQ,SAAA,CAAA5G,IAAA;cAAA;YAAA;cAAA4G,SAAA,CAAA7G,IAAA;cAAA4G,GAAA,GAAAC,SAAA;cAE3B/H,oBAAW,CAACC,MAAM,CAAC9B,KAAK,CACtB,0FAA0F,EAAA2J,GAE5F,CAAC;cAAC,MAAAA,GAAA;YAAA;YAAA;cAAA,OAAAC,SAAA,CAAAjG,IAAA;UAAA;QAAA,GAAA6F,QAAA;MAAA,CAGL;MAAA,SA5CK/C,aAAaA,CAAA;QAAA,OAAA8C,cAAA,CAAA1K,KAAA,OAAAQ,SAAA;MAAA;MAAA,OAAboH,aAAa;IAAA;IA8CnB;AACF;AACA;AACA;AACA;IAJE;EAAA;IAAAjF,GAAA;IAAAC,KAAA;MAAA,IAAAwI,eAAA,OAAAzH,kBAAA,CAAAhE,OAAA,eAAAiE,YAAA,CAAAjE,OAAA,CAAAkE,IAAA,CAKA,SAAAwH,SAAA;QAAA,IAAAC,qBAAA;QAAA,IAAAC,gBAAA,EAAAC,UAAA;QAAA,OAAA5H,YAAA,CAAAjE,OAAA,CAAAqE,IAAA,WAAAyH,SAAA;UAAA,kBAAAA,SAAA,CAAAvH,IAAA,GAAAuH,SAAA,CAAAtH,IAAA;YAAA;cACEnB,oBAAW,CAACC,MAAM,CAACC,GAAG,CAAC,gEAAgE,CAAC;;cAExF;cAAAuI,SAAA,CAAAtH,IAAA;cAAA,OAC+B,IAAI,CAAC5C,OAAO,CAACmK,IAAI,CAACC,eAAe,CAAC,IAAI,CAACpK,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;YAAA;cAApFgK,gBAAgB,GAAAE,SAAA,CAAAjB,IAAA;cAEhBgB,UAAU,GAAG,EAAE;cAErB,IAAI,EAAAF,qBAAA,GAAAC,gBAAgB,CAACK,cAAc,cAAAN,qBAAA,uBAA/BA,qBAAA,CAAiCO,IAAI,CAACxF,MAAM,IAAG,CAAC,EAAE;gBACpDmF,UAAU,CAACM,IAAI,CAAC;kBACdD,IAAI,EAAEN,gBAAgB,CAACK,cAAc,CAACC,IAAI;kBAC1CE,QAAQ,EAAER,gBAAgB,CAACK,cAAc,CAACG,QAAQ,IAAI,EAAE;kBACxDC,UAAU,EAAET,gBAAgB,CAACK,cAAc,CAACK,QAAQ,IAAI;gBAC1D,CAAC,CAAC;cACJ;cAEAjJ,oBAAW,CAACC,MAAM,CAACC,GAAG,CACpB,qGACF,CAAC;cAACuI,SAAA,CAAAtH,IAAA;cAAA,OAEI,IAAI,CAAC5C,OAAO,CAAC8C,eAAe,CAAC6H,qBAAqB,CAAC9E,SAAS,CAACoE,UAAU,CAAC;YAAA;cAE9E;cACA,IAAI,IAAI,CAACjK,OAAO,CAAC4K,aAAa,EAAE;gBAC9B,IAAAC,OAAA,CAAAzM,OAAA,EAAc,IAAI,CAAC4B,OAAO,CAAC8K,oBAAoB,CAAC,CAACC,OAAO,CACtD,UAACC,mBAAwC,EAAK;kBAC5CA,mBAAmB,CAACC,qBAAqB,CAAC,CAAC;kBAC3CD,mBAAmB,CAACE,MAAM,CAAC,CAAC;gBAC9B,CACF,CAAC;cACH;YAAC;YAAA;cAAA,OAAAhB,SAAA,CAAA3G,IAAA;UAAA;QAAA,GAAAuG,QAAA;MAAA,CACF;MAAA,SA/BKd,cAAcA,CAAA;QAAA,OAAAa,eAAA,CAAApL,KAAA,OAAAQ,SAAA;MAAA;MAAA,OAAd+J,cAAc;IAAA;IAiCpB;AACF;AACA;AACA;AACA;AACA;IALE;EAAA;IAAA5H,GAAA;IAAAC,KAAA;MAAA,IAAA8J,0BAAA,OAAA/I,kBAAA,CAAAhE,OAAA,eAAAiE,YAAA,CAAAjE,OAAA,CAAAkE,IAAA,CAMA,SAAA8I,SAAA;QAAA,IAAAC,GAAA,EAAAC,GAAA;QAAA,OAAAjJ,YAAA,CAAAjE,OAAA,CAAAqE,IAAA,WAAA8I,SAAA;UAAA,kBAAAA,SAAA,CAAA5I,IAAA,GAAA4I,SAAA,CAAA3I,IAAA;YAAA;cACEnB,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,iFACF,CAAC;cACD;cAAA,KACI,IAAI,CAAChD,KAAK,CAACsE,QAAQ,CAACoG,OAAO,CAACC,SAAS;gBAAAF,SAAA,CAAA3I,IAAA;gBAAA;cAAA;cACvCnB,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,2FACF,CAAC;cAACyH,SAAA,CAAA5I,IAAA;cAAA4I,SAAA,CAAA3I,IAAA;cAAA,OAEM,IAAI,CAAC9B,KAAK,CAACsE,QAAQ,CAACoG,OAAO,CAACE,UAAU,CAAC,CAAC;YAAA;cAC9CjK,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,8FACF,CAAC;cAACyH,SAAA,CAAA3I,IAAA;cAAA;YAAA;cAAA2I,SAAA,CAAA5I,IAAA;cAAA0I,GAAA,GAAAE,SAAA;cAEF;cACA9J,oBAAW,CAACC,MAAM,CAAC9B,KAAK,CACtB,yGAAyG,EAAAyL,GAE3G,CAAC;cAAC,MAAAA,GAAA;YAAA;cAAAE,SAAA,CAAA5I,IAAA;cAMJlB,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,+EACF,CAAC;cAACyH,SAAA,CAAA3I,IAAA;cAAA,OACI,IAAI,CAAC9B,KAAK,CAACsE,QAAQ,CAACoG,OAAO,CAACG,OAAO,CAAC,CAAC;YAAA;cAC3ClK,oBAAW,CAACC,MAAM,CAACoC,IAAI,CACrB,2FACF,CAAC;cAACyH,SAAA,CAAA3I,IAAA;cAAA;YAAA;cAAA2I,SAAA,CAAA5I,IAAA;cAAA2I,GAAA,GAAAC,SAAA;cAEF9J,oBAAW,CAACC,MAAM,CAAC9B,KAAK,CACtB,oGAAoG,EAAA0L,GAEtG,CAAC;cAAC,MAAAA,GAAA;YAAA;YAAA;cAAA,OAAAC,SAAA,CAAAhI,IAAA;UAAA;QAAA,GAAA6H,QAAA;MAAA,CAIL;MAAA,SAxCahD,yBAAyBA,CAAA;QAAA,OAAA+C,0BAAA,CAAA1M,KAAA,OAAAQ,SAAA;MAAA;MAAA,OAAzBmJ,yBAAyB;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_triggerProxy","_constants","_constants2","_reconnection","_reconnectionNotStarted","_metrics","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","NeedsRetryError","_Error","_classCallCheck2","arguments","_inherits2","_createClass2","_wrapNativeSuper2","Error","NeedsRejoinError","_Error2","_ref","_this","wasSharing","_ref$error","error","_defineProperty2","ReconnectionManager","exports","meeting","iceState","disconnected","resolve","timer","undefined","timeoutDuration","config","reconnection","iceReconnectionTimeout","status","RECONNECTION","STATE","DEFAULT_STATUS","webex","maxRejoinAttempts","rejoinAttempts","autoRejoinEnabled","autoRejoin","reset","key","value","resetReconnectionTimer","clearTimeout","iceReconnected","LoggerProxy","logger","log","waitForIceReconnect","_this2","_promise","reject","setTimeout","concat","cleanUp","_stopLocalShareStream","_asyncToGenerator2","_regenerator","mark","_callee","reason","wrap","_context","prev","next","unpublishStreams","mediaProperties","shareVideoStream","shareAudioStream","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","stop","stopLocalShareStream","_x","isReconnectInProgress","IN_PROGRESS","canStartReconnection","enabled","info","_reconnect","_callee2","_this3","_ref2","_ref2$networkDisconne","networkDisconnect","_ref2$networkRetry","networkRetry","completionCallback","triggerEvent","_args2","_t","_t2","_t3","_context2","length","id","event","payload","ReconnectionNotStartedError","MEETING_RECONNECTION_STARTING","internal","newMetrics","submitClientEvent","name","options","meetingId","meetings","startReachability","executeReconnection","reconnect","abrupt","message","errors","category","errorCode","fatal","shownToUser","rejoinMeeting","MEETING_RECONNECTION_SUCCESS","recoveredBy","MEETING_RECONNECTION_FAILURE","ReconnectionError","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_RECONNECT_FAILURE","correlation_id","correlationId","locus_id","locusUrl","split","pop","stack","finish","_executeReconnection","_callee3","_ref3","_ref3$networkDisconne","media","_t4","_t5","_t6","_context3","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","SHARE_STOPPED_REASON","MEDIA_RECONNECTION","reconnectMercuryWebSocket","device","url","FAILURE","syncMeetings","keepOnlyLocusMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","sent","_x2","_rejoinMeeting","_callee4","_args4","_t7","_t8","_context4","join","rejoin","MEETING_REJOIN","MEETING_MAX_REJOIN_FAILURE","_reconnectMedia","_callee5","_turnServerResult$tur","turnServerResult","iceServers","_context5","roap","doTurnDiscovery","turnServerInfo","urls","push","username","credential","password","webrtcMediaConnection","isMultistream","_values","mediaRequestManagers","forEach","mediaRequestManager","commit","_reconnectMercuryWebSocket","_callee6","_t9","_t0","_context6","mercury","connected","disconnect","connect"],"sources":["index.ts"],"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 RECONNECTION_STATE,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectionNotStartedError from '../common/errors/reconnection-not-started';\nimport Metrics from '../metrics';\nimport Meeting from '../meeting';\nimport {MediaRequestManager} from '../multistream/mediaRequestManager';\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 wasSharing: any;\n\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({\n wasSharing,\n error = new Error('Meeting needs to be rejoined'),\n }: {\n wasSharing?: boolean;\n error?: Error;\n }) {\n // @ts-ignore\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n */\nexport default class ReconnectionManager {\n autoRejoinEnabled: any;\n iceState: any;\n maxRejoinAttempts: any;\n meeting: any;\n rejoinAttempts: any;\n shareStatus: any;\n status: any;\n webex: any;\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting: 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 // @ts-ignore\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout,\n };\n\n /**\n * @instance\n * @type {RECONNECTION_STATE}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\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 // @ts-ignore\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 // @ts-ignore\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = 0;\n // @ts-ignore\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {void}\n */\n resetReconnectionTimer() {\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\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 public iceReconnected() {\n if (this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');\n\n this.resetReconnectionTimer();\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 public waitForIceReconnect() {\n if (!this.iceState.disconnected) {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'\n );\n\n this.iceState.disconnected = true;\n\n return new Promise<void>((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n } else {\n this.iceState.disconnected = false;\n reject(\n new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)\n );\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 public reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.rejoinAttempts = 0;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public cleanUp() {\n this.reset();\n }\n\n /**\n * Stop the local share stream.\n *\n * @param {string} reason a {@link SHARE_STOPPED_REASON}\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n private async stopLocalShareStream(reason: string) {\n await this.meeting.unpublishStreams([\n this.meeting.mediaProperties.shareVideoStream,\n this.meeting.mediaProperties.shareAudioStream,\n ]);\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'stopLocalShareStream',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason,\n }\n );\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {Boolean} true if reconnection operation is in progress\n */\n isReconnectInProgress() {\n return this.status === RECONNECTION.STATE.IN_PROGRESS;\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectInProgress, ReconnectionDisabled}\n * @private\n * @memberof ReconnectionManager\n */\n private canStartReconnection() {\n if (this.meeting.config.reconnection.enabled) {\n if (this.status === RECONNECTION.STATE.DEFAULT_STATUS) {\n return true;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#canStartReconnection --> Reconnection already in progress.'\n );\n\n return false;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#canStartReconnection --> Reconnection is not enabled.'\n );\n\n return false;\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 * @param {Function} [completionCallback] callback that gets called when reconnection is started successfully\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public async reconnect(\n {\n networkDisconnect = false,\n networkRetry = false,\n }: {\n networkDisconnect?: boolean;\n networkRetry?: boolean;\n } = {},\n completionCallback: (() => Promise<void>) | undefined = undefined\n ) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`\n );\n\n const triggerEvent = (event, payload = undefined) =>\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'reconnect',\n },\n event,\n payload\n );\n\n if (!this.canStartReconnection()) {\n throw new ReconnectionNotStartedError();\n }\n\n try {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_STARTING);\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.reconnecting',\n options: {\n meetingId: this.meeting.id,\n },\n });\n }\n\n try {\n await this.webex.meetings.startReachability('reconnection');\n } catch (err) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reachability failed, continuing with reconnection attempt, err: ',\n err\n );\n }\n\n try {\n await this.executeReconnection({networkDisconnect});\n } catch (reconnectError) {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'\n );\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 await this.reconnect({networkDisconnect: true, networkRetry: true}, completionCallback);\n\n return;\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnect --> Reconnection failed.',\n reconnectError.message\n );\n\n // send call aborted event with category as expected as we are trying to rejoin\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.aborted',\n payload: {\n errors: [\n {\n category: 'expected',\n errorCode: 2008,\n fatal: true,\n name: 'media-engine',\n shownToUser: false,\n },\n ],\n },\n options: {\n meetingId: this.meeting.id,\n },\n });\n\n if (reconnectError instanceof NeedsRejoinError && this.autoRejoinEnabled) {\n await this.rejoinMeeting(reconnectError.wasSharing);\n\n return;\n }\n\n throw reconnectError;\n }\n\n // finalize the reconnection process by calling the completionCallback\n if (completionCallback) {\n await completionCallback();\n }\n\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_SUCCESS);\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.recovered',\n payload: {\n recoveredBy: 'new',\n },\n options: {\n meetingId: this.meeting.id,\n },\n });\n } catch (error) {\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_FAILURE, {\n error: new ReconnectionError('Reconnection failure event', error),\n });\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_RECONNECT_FAILURE, {\n correlation_id: this.meeting.correlationId,\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n throw new ReconnectionError('Reconnection failure event', error);\n } finally {\n this.reset();\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 private async executeReconnection({networkDisconnect = false}: {networkDisconnect?: boolean}) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'\n );\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n if (wasSharing) {\n await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEDIA_RECONNECTION);\n }\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Websocket reconnected.',\n this.webex.internal.device.url\n );\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw error;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'\n );\n await this.webex.meetings.syncMeetings({keepOnlyLocusMeetings: false});\n } catch (syncError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',\n syncError\n );\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(\n 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.'\n );\n\n throw new Error('Unable to rejoin a meeting already ended or inactive.');\n }\n\n LoggerProxy.logger.info(\n `ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`\n );\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(\n 'ReconnectionManager:index#executeReconnection --> webRTC media connection renewed and local sdp offer sent'\n );\n\n return media;\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> failed to renew webRTC media connection or initiate offer'\n );\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(\n 'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'\n );\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n if (wasSharing) {\n await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEETING_REJOIN);\n }\n } catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,\n joinError\n );\n this.rejoinMeeting();\n } else {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',\n joinError\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack,\n });\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n } catch (mediaError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',\n mediaError\n );\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMedia() {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> do turn discovery');\n\n // do the TURN server discovery again and ignore reachability results since the TURN server might change\n const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true, true);\n\n const iceServers = [];\n\n if (turnServerResult.turnServerInfo?.urls.length > 0) {\n iceServers.push({\n urls: turnServerResult.turnServerInfo.urls,\n username: turnServerResult.turnServerInfo.username || '',\n credential: turnServerResult.turnServerInfo.password || '',\n });\n }\n\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#reconnectMedia --> renew webRTC media connection and send local sdp offer'\n );\n\n await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);\n\n // resend media requests\n if (this.meeting.isMultistream) {\n Object.values(this.meeting.mediaRequestManagers).forEach(\n (mediaRequestManager: MediaRequestManager) => {\n mediaRequestManager.commit();\n }\n );\n }\n }\n\n /**\n * Attempt to Reconnect Mercury Websocket\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n private async reconnectMercuryWebSocket() {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.'\n );\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.'\n );\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info(\n '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(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.',\n disconnectError\n );\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'\n );\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.'\n );\n } catch (connectError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.',\n connectError\n );\n\n throw connectError;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -15,6 +15,14 @@ export default class DataChannelAuthTokenInterceptor extends Interceptor {
15
15
  static create(): DataChannelAuthTokenInterceptor;
16
16
  private getRetryKey;
17
17
  private getHeader;
18
+ /**
19
+ * Intercepts outgoing requests and refreshes the Data-Channel-Auth-Token
20
+ * if the current JWT token is expired before the request is sent.
21
+ *
22
+ * @param {Object} options - The original request options.
23
+ * @returns {Promise<Object>} Updated request options with refreshed token if needed.
24
+ */
25
+ onRequest(options: any): Promise<any>;
18
26
  /**
19
27
  * Intercept responses and, on 401/403 with `Data-Channel-Auth-Token` header,
20
28
  * attempt to refresh the data channel token and retry the original request once.
@@ -0,0 +1 @@
1
+ export declare const isJwtTokenExpired: (token: string) => boolean;
@@ -50,29 +50,12 @@ export declare class MediaRequestManager {
50
50
  private degradationPreferences;
51
51
  private sourceUpdateListener;
52
52
  private debouncedSourceUpdateListener;
53
- private previousStreamRequests;
54
53
  private trimRequestsToNumOfSources;
55
54
  private numTotalSources;
56
55
  private numLiveSources;
57
56
  constructor(sendMediaRequestsCallback: SendMediaRequestsCallback, options: Options);
58
57
  setDegradationPreferences(degradationPreferences: DegradationPreferences): void;
59
58
  private getDegradedClientRequests;
60
- /**
61
- * Returns true if two stream requests are the same, false otherwise.
62
- *
63
- * @param {StreamRequest} streamRequestA - Stream request A for comparison.
64
- * @param {StreamRequest} streamRequestB - Stream request B for comparison.
65
- * @returns {boolean} - Whether they are equal.
66
- */
67
- isEqual(streamRequestA: StreamRequest, streamRequestB: StreamRequest): boolean;
68
- /**
69
- * Compares new stream requests to previous ones and determines
70
- * if they are the same.
71
- *
72
- * @param {StreamRequest[]} newRequests - Array with new requests.
73
- * @returns {boolean} - True if they are equal, false otherwise.
74
- */
75
- private checkIsNewRequestsEqualToPrev;
76
59
  /**
77
60
  * Returns the maxPayloadBitsPerSecond per Stream
78
61
  *
@@ -94,12 +77,6 @@ export declare class MediaRequestManager {
94
77
  * @returns {number} maxMbps
95
78
  */
96
79
  private getH264MaxMbps;
97
- /**
98
- * Clears the previous stream requests.
99
- *
100
- * @returns {void}
101
- */
102
- clearPreviousRequests(): void;
103
80
  /** Modifies the passed in clientRequests and makes sure that in total they don't ask
104
81
  * for more streams than there are available.
105
82
  *
@@ -159,7 +159,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
159
159
  updatePSDataChannel: function updatePSDataChannel() {
160
160
  var _this2 = this;
161
161
  return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
162
- var meeting, isPracticeSession, _ref2, _ref2$url, url, _ref2$info, _ref2$info2, _ref2$info2$practiceS, practiceSessionDatachannelUrl, _ref2$self, _ref2$self2, _ref2$self2$practiceS, practiceSessionDatachannelToken, currentToken, finalToken;
162
+ var meeting, isPracticeSession, _ref2, _ref2$url, url, _ref2$info, _ref2$info2, _ref2$info2$practiceS, practiceSessionDatachannelUrl, _ref2$self, _ref2$self2, _ref2$self2$practiceS, practiceSessionDatachannelToken, currentToken, finalToken, isCaptionBoxOn;
163
163
  return _regenerator.default.wrap(function (_context2) {
164
164
  while (1) switch (_context2.prev = _context2.next) {
165
165
  case 0:
@@ -178,6 +178,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
178
178
  _ref2 = (meeting === null || meeting === void 0 ? void 0 : meeting.locusInfo) || {}, _ref2$url = _ref2.url, url = _ref2$url === void 0 ? undefined : _ref2$url, _ref2$info = _ref2.info, _ref2$info2 = _ref2$info === void 0 ? {} : _ref2$info, _ref2$info2$practiceS = _ref2$info2.practiceSessionDatachannelUrl, practiceSessionDatachannelUrl = _ref2$info2$practiceS === void 0 ? undefined : _ref2$info2$practiceS, _ref2$self = _ref2.self, _ref2$self2 = _ref2$self === void 0 ? {} : _ref2$self, _ref2$self2$practiceS = _ref2$self2.practiceSessionDatachannelToken, practiceSessionDatachannelToken = _ref2$self2$practiceS === void 0 ? undefined : _ref2$self2$practiceS; // @ts-ignore
179
179
  currentToken = _this2.webex.internal.llm.getDatachannelToken(_internalPluginLlm.DataChannelTokenType.PracticeSession);
180
180
  finalToken = currentToken !== null && currentToken !== void 0 ? currentToken : practiceSessionDatachannelToken;
181
+ isCaptionBoxOn = _this2.webex.internal.voicea.getIsCaptionBoxOn();
181
182
  if (!currentToken && practiceSessionDatachannelToken) {
182
183
  // @ts-ignore
183
184
  _this2.webex.internal.llm.setDatachannelToken(practiceSessionDatachannelToken, _internalPluginLlm.DataChannelTokenType.PracticeSession);
@@ -213,6 +214,11 @@ var Webinar = _webexCore.WebexPlugin.extend({
213
214
  _this2.webex.internal.llm.on("event:relay.event:".concat(_constants.LLM_PRACTICE_SESSION), meeting === null || meeting === void 0 ? void 0 : meeting.processRelayEvent);
214
215
  // @ts-ignore - Fix type
215
216
  (_this2$webex$internal = _this2.webex.internal.voicea) === null || _this2$webex$internal === void 0 ? void 0 : (_this2$webex$internal2 = _this2$webex$internal.announce) === null || _this2$webex$internal2 === void 0 ? void 0 : _this2$webex$internal2.call(_this2$webex$internal);
217
+ if (isCaptionBoxOn) {
218
+ _this2.webex.internal.voicea.updateSubchannelSubscriptions({
219
+ subscribe: ['transcription']
220
+ });
221
+ }
216
222
  _loggerProxy.default.logger.info("Webinar:index#updatePSDataChannel --> enabled to receive relay events for default session for ".concat(_constants.LLM_PRACTICE_SESSION, "!"));
217
223
  return _promise.default.resolve(registerAndConnectResult);
218
224
  }));
@@ -612,7 +618,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
612
618
  }, _callee0);
613
619
  }))();
614
620
  },
615
- version: "3.11.0-next.46"
621
+ version: "3.11.0-next.48"
616
622
  });
617
623
  var _default = exports.default = Webinar;
618
624
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_webexCore","require","_uuid","_interopRequireDefault","_lodash","_internalPluginLlm","_constants","_collection","_loggerProxy","_utils","Webinar","WebexPlugin","extend","namespace","MEETINGS","collections","webinar","WebinarCollection","props","locusUrl","webcastInstanceUrl","canManageWebcast","selfIsPanelist","selfIsAttendee","practiceSessionEnabled","meetingId","cleanUp","cleanupPSDataChannel","locusUrlUpdate","set","updateWebcastUrl","payload","get","updateCanManageWebcast","updateRoleChanged","oldRoles","newRoles","isPromoted","includes","SELF_ROLES","ATTENDEE","PANELIST","isDemoted","MODERATOR","updateStatusByRole","_ref","meeting","webex","meetings","getMeetingByType","_ID_","shareStatus","SHARE_STATUS","WHITEBOARD_SHARE_ACTIVE","_meeting$locusInfo","_meeting$locusInfo2","locusInfo","updateMediaShares","mediaShares","updatePSDataChannel","isJoinPracticeSessionDataChannel","_this","_asyncToGenerator2","default","_regenerator","mark","_callee","wrap","_context","prev","next","internal","llm","disconnectLLM","code","reason","LLM_PRACTICE_SESSION","off","concat","processRelayEvent","stop","_this2","_callee2","isPracticeSession","_ref2","_ref2$url","url","_ref2$info","_ref2$info2","_ref2$info2$practiceS","practiceSessionDatachannelUrl","_ref2$self","_ref2$self2","_ref2$self2$practiceS","practiceSessionDatachannelToken","currentToken","finalToken","_context2","isJoined","abrupt","undefined","info","self","getDatachannelToken","DataChannelTokenType","PracticeSession","setDatachannelToken","isConnected","getLocusUrl","getDatachannelUrl","registerAndConnect","then","registerAndConnectResult","_this2$webex$internal","_this2$webex$internal2","on","voicea","announce","call","LoggerProxy","logger","_promise","resolve","setPracticeSessionState","enabled","request","method","HTTP_VERBS","PATCH","uri","body","practiceSession","catch","error","updatePracticeSessionStatus","startWebcast","layout","_this3","_callee3","_t","_t2","_t3","_t4","_t5","_t6","_t7","_t8","_context3","Error","PUT","_defineProperty2","credentials","getUserToken","sent","config","trackingIdPrefix","uuid","v4","toString","authorization","trackingId","HEADERS","CONTENT_TYPE","CONTENT_TYPE_VALUE","APPLICATION_JSON","action","meetingInfo","locusId","correlationId","headers","stopWebcast","_this4","_callee4","_t9","_t0","_t1","_t10","_t11","_t12","_t13","_t14","_context4","queryWebcastLayout","_this5","_callee5","_t15","_t16","_t17","_t18","_t19","_t20","_context5","GET","updateWebcastLayout","_this6","_callee6","_t21","_t22","_t23","_t24","_t25","_t26","_t27","_t28","_context6","videoLayout","contentLayout","syncStageLayout","syncStageInMeeting","viewAllWebcastAttendees","_this7","_callee7","_t29","_t30","_t31","_t32","_t33","_t34","_context7","searchWebcastAttendees","_arguments","arguments","_this8","_callee8","queryString","_t35","_t36","_t37","_t38","_t39","_t40","_context8","length","encodeURIComponent","expelWebcastAttendee","participantId","_this9","_callee9","_t41","_t42","_t43","_t44","_t45","_t46","_context9","DELETE","searchLargeScaleWebinarAttendees","_this0","_callee0","_payload$limit","_meeting$locusInfo3","_meeting$locusInfo3$l","_meeting$locusInfo3$l2","_meeting$locusInfo3$l3","rawParams","attendeeSearchUrl","_t47","_t48","_t49","_t50","_t51","_t52","_context0","search_text","limit","DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT","links","resources","attendeeSearch","URLSearchParams","sanitizeParams","version","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin, config} from '@webex/webex-core';\nimport uuid from 'uuid';\nimport {get} from 'lodash';\nimport {DataChannelTokenType} from '@webex/internal-plugin-llm';\nimport {\n _ID_,\n HEADERS,\n HTTP_VERBS,\n MEETINGS,\n SELF_ROLES,\n SHARE_STATUS,\n DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT,\n LLM_PRACTICE_SESSION,\n} from '../constants';\n\nimport WebinarCollection from './collection';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {sanitizeParams} from './utils';\n\n/**\n * @class Webinar\n */\nconst Webinar = WebexPlugin.extend({\n namespace: MEETINGS,\n collections: {\n webinar: WebinarCollection,\n },\n\n props: {\n locusUrl: 'string', // appears current webinar's locus url\n webcastInstanceUrl: 'string', // current webinar's webcast instance url\n canManageWebcast: 'boolean', // appears the ability to manage webcast\n selfIsPanelist: 'boolean', // self is panelist\n selfIsAttendee: 'boolean', // self is attendee\n practiceSessionEnabled: 'boolean', // practice session enabled\n meetingId: 'string',\n },\n\n /**\n * Calls this to clean up listeners\n * @returns {void}\n */\n cleanUp() {\n this.cleanupPSDataChannel();\n },\n\n /**\n * Update the current locus url of the webinar\n * @param {string} locusUrl\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n },\n\n /**\n * Update the current webcast instance url of the meeting\n * @param {object} payload\n * @returns {void}\n */\n updateWebcastUrl(payload) {\n this.set('webcastInstanceUrl', get(payload, 'resources.webcastInstance.url'));\n },\n\n /**\n * Update whether self has capability to manage start/stop webcast (only host can manage it)\n * @param {boolean} canManageWebcast\n * @returns {void}\n */\n updateCanManageWebcast(canManageWebcast) {\n this.set('canManageWebcast', canManageWebcast);\n },\n\n /**\n * Updates user roles and manages associated state transitions\n * @param {object} payload\n * @param {string[]} payload.oldRoles - Previous roles of the user\n * @param {string[]} payload.newRoles - New roles of the user\n * @returns {{isPromoted: boolean, isDemoted: boolean}} Role transition states\n */\n updateRoleChanged(payload) {\n const oldRoles = get(payload, 'oldRoles', []);\n const newRoles = get(payload, 'newRoles', []);\n\n const isPromoted =\n oldRoles.includes(SELF_ROLES.ATTENDEE) && newRoles.includes(SELF_ROLES.PANELIST);\n const isDemoted =\n (oldRoles.includes(SELF_ROLES.PANELIST) && newRoles.includes(SELF_ROLES.ATTENDEE)) ||\n (!oldRoles.includes(SELF_ROLES.ATTENDEE) && newRoles.includes(SELF_ROLES.ATTENDEE)); // for attendee just join meeting case\n this.set('selfIsPanelist', newRoles.includes(SELF_ROLES.PANELIST));\n this.set('selfIsAttendee', newRoles.includes(SELF_ROLES.ATTENDEE));\n this.updateCanManageWebcast(newRoles.includes(SELF_ROLES.MODERATOR));\n this.updateStatusByRole({isPromoted, isDemoted});\n\n return {isPromoted, isDemoted};\n },\n\n /**\n * should join practice session data channel or not\n * @param {Object} {isPromoted: boolean, isDemoted: boolean}} Role transition states\n * @returns {void}\n */\n updateStatusByRole({isPromoted, isDemoted}) {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n\n if (\n (isDemoted && meeting?.shareStatus === SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE) ||\n isPromoted\n ) {\n // attendees in webinar should subscribe streaming for whiteboard sharing\n // while panelist still need subscribe native mode so trigger force update here\n meeting?.locusInfo?.updateMediaShares(meeting?.locusInfo?.mediaShares, true);\n }\n\n this.updatePSDataChannel();\n },\n\n /**\n * should join practice session data channel or not\n * @returns {boolean}\n */\n isJoinPracticeSessionDataChannel() {\n return this.selfIsPanelist && this.practiceSessionEnabled;\n },\n\n /**\n * Disconnects the practice session data channel and removes its relay listener.\n * @returns {Promise<void>}\n */\n async cleanupPSDataChannel() {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n\n // @ts-ignore - Fix type\n await this.webex.internal.llm.disconnectLLM(\n {\n code: 3050,\n reason: 'done (permanent)',\n },\n LLM_PRACTICE_SESSION\n );\n // @ts-ignore - Fix type\n this.webex.internal.llm.off(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n },\n\n /**\n * Connects to low latency mercury and reconnects if the address has changed\n * It will also disconnect if called when the meeting has ended\n * @returns {Promise}\n */\n async updatePSDataChannel() {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n const isPracticeSession = meeting?.isJoined() && this.isJoinPracticeSessionDataChannel();\n\n if (!isPracticeSession) {\n await this.cleanupPSDataChannel();\n\n return undefined;\n }\n\n // @ts-ignore - Fix type\n const {\n url = undefined,\n info: {practiceSessionDatachannelUrl = undefined} = {},\n self: {practiceSessionDatachannelToken = undefined} = {},\n } = meeting?.locusInfo || {};\n\n // @ts-ignore\n const currentToken = this.webex.internal.llm.getDatachannelToken(\n DataChannelTokenType.PracticeSession\n );\n\n const finalToken = currentToken ?? practiceSessionDatachannelToken;\n\n if (!currentToken && practiceSessionDatachannelToken) {\n // @ts-ignore\n this.webex.internal.llm.setDatachannelToken(\n practiceSessionDatachannelToken,\n DataChannelTokenType.PracticeSession\n );\n }\n\n if (!practiceSessionDatachannelUrl) {\n return undefined;\n }\n // @ts-ignore - Fix type\n if (this.webex.internal.llm.isConnected(LLM_PRACTICE_SESSION)) {\n if (\n // @ts-ignore - Fix type\n url === this.webex.internal.llm.getLocusUrl(LLM_PRACTICE_SESSION) &&\n // @ts-ignore - Fix type\n practiceSessionDatachannelUrl ===\n this.webex.internal.llm.getDatachannelUrl(LLM_PRACTICE_SESSION)\n ) {\n return undefined;\n }\n\n await this.cleanupPSDataChannel();\n }\n\n // @ts-ignore - Fix type\n return this.webex.internal.llm\n .registerAndConnect(url, practiceSessionDatachannelUrl, finalToken, LLM_PRACTICE_SESSION)\n .then((registerAndConnectResult) => {\n // @ts-ignore - Fix type\n this.webex.internal.llm.off(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n // @ts-ignore - Fix type\n this.webex.internal.llm.on(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n // @ts-ignore - Fix type\n this.webex.internal.voicea?.announce?.();\n LoggerProxy.logger.info(\n `Webinar:index#updatePSDataChannel --> enabled to receive relay events for default session for ${LLM_PRACTICE_SESSION}!`\n );\n\n return Promise.resolve(registerAndConnectResult);\n });\n },\n\n /**\n * start or stop practice session for webinar\n * @param {boolean} enabled\n * @returns {Promise}\n */\n setPracticeSessionState(enabled) {\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/controls`,\n body: {\n practiceSession: {\n enabled,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#setPracticeSessionState failed', error);\n throw error;\n });\n },\n\n /**\n * update practice session status\n * @param {object} payload\n * @returns {void}\n */\n updatePracticeSessionStatus(payload) {\n this.set('practiceSessionEnabled', !!payload?.enabled);\n this.updatePSDataChannel().then(() => {});\n },\n\n /**\n * start webcast mode for webinar\n * @param {object} meeting\n * @param {object} layout\n * @returns {Promise}\n */\n async startWebcast(meeting, layout) {\n if (!meeting) {\n LoggerProxy.logger.error(\n `Meeting:webinar#startWebcast failed --> meeting parameter : ${meeting}`\n );\n throw new Error('Meeting parameter does not meet expectations');\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/streaming`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n action: 'start',\n meetingInfo: {\n locusId: meeting.locusId,\n correlationId: meeting.correlationId,\n },\n layout,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#startWebcast failed', error);\n throw error;\n });\n },\n\n /**\n * stop webcast mode for webinar\n * @returns {Promise}\n */\n async stopWebcast() {\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/streaming`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n action: 'stop',\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#stopWebcast failed', error);\n throw error;\n });\n },\n\n /**\n * query webcast layout for webinar\n * @returns {Promise}\n */\n async queryWebcastLayout() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/layout`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#queryWebcastLayout failed', error);\n throw error;\n });\n },\n\n /**\n * update webcast layout for webinar\n * @param {object} layout\n * @returns {Promise}\n */\n async updateWebcastLayout(layout) {\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/layout`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n videoLayout: layout.videoLayout,\n contentLayout: layout.contentLayout,\n syncStageLayout: layout.syncStageLayout,\n syncStageInMeeting: layout.syncStageInMeeting,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#updateWebcastLayout failed', error);\n throw error;\n });\n },\n\n /**\n * view all webcast attendees\n * @param {string} queryString\n * @returns {Promise}\n */\n async viewAllWebcastAttendees() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/attendees`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#viewAllWebcastAttendees failed', error);\n throw error;\n });\n },\n\n /**\n * search webcast attendees by query string\n * @param {string} queryString\n * @returns {Promise}\n */\n async searchWebcastAttendees(queryString = '') {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/attendees?keyword=${encodeURIComponent(queryString)}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#searchWebcastAttendees failed', error);\n throw error;\n });\n },\n\n /**\n * expel webcast attendee by participantId\n * @param {string} participantId\n * @returns {Promise}\n */\n async expelWebcastAttendee(participantId) {\n return this.request({\n method: HTTP_VERBS.DELETE,\n uri: `${this.webcastInstanceUrl}/attendees/${participantId}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#expelWebcastAttendee failed', error);\n throw error;\n });\n },\n\n /**\n * search large scale webinar attendees\n * @param {object} payload\n * @param {string} payload.queryString\n * @param {number} payload.limit\n * @param {string} payload.next\n * @returns {Promise}\n */\n async searchLargeScaleWebinarAttendees(payload) {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n const rawParams = {\n search_text: payload?.queryString,\n limit: payload?.limit ?? DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT,\n next: payload?.next,\n };\n const attendeeSearchUrl = meeting?.locusInfo?.links?.resources?.attendeeSearch?.url;\n if (!attendeeSearchUrl) {\n LoggerProxy.logger.error(`Meeting:webinar5k#searchLargeScaleWebinarAttendees failed`);\n throw new Error('Meeting:webinar5k#Attendee search url is not available');\n }\n\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${attendeeSearchUrl}?${new URLSearchParams(sanitizeParams(rawParams)).toString()}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar5k#searchLargeScaleWebinarAttendees failed', error);\n throw error;\n });\n },\n});\n\nexport default Webinar;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_webexCore","require","_uuid","_interopRequireDefault","_lodash","_internalPluginLlm","_constants","_collection","_loggerProxy","_utils","Webinar","WebexPlugin","extend","namespace","MEETINGS","collections","webinar","WebinarCollection","props","locusUrl","webcastInstanceUrl","canManageWebcast","selfIsPanelist","selfIsAttendee","practiceSessionEnabled","meetingId","cleanUp","cleanupPSDataChannel","locusUrlUpdate","set","updateWebcastUrl","payload","get","updateCanManageWebcast","updateRoleChanged","oldRoles","newRoles","isPromoted","includes","SELF_ROLES","ATTENDEE","PANELIST","isDemoted","MODERATOR","updateStatusByRole","_ref","meeting","webex","meetings","getMeetingByType","_ID_","shareStatus","SHARE_STATUS","WHITEBOARD_SHARE_ACTIVE","_meeting$locusInfo","_meeting$locusInfo2","locusInfo","updateMediaShares","mediaShares","updatePSDataChannel","isJoinPracticeSessionDataChannel","_this","_asyncToGenerator2","default","_regenerator","mark","_callee","wrap","_context","prev","next","internal","llm","disconnectLLM","code","reason","LLM_PRACTICE_SESSION","off","concat","processRelayEvent","stop","_this2","_callee2","isPracticeSession","_ref2","_ref2$url","url","_ref2$info","_ref2$info2","_ref2$info2$practiceS","practiceSessionDatachannelUrl","_ref2$self","_ref2$self2","_ref2$self2$practiceS","practiceSessionDatachannelToken","currentToken","finalToken","isCaptionBoxOn","_context2","isJoined","abrupt","undefined","info","self","getDatachannelToken","DataChannelTokenType","PracticeSession","voicea","getIsCaptionBoxOn","setDatachannelToken","isConnected","getLocusUrl","getDatachannelUrl","registerAndConnect","then","registerAndConnectResult","_this2$webex$internal","_this2$webex$internal2","on","announce","call","updateSubchannelSubscriptions","subscribe","LoggerProxy","logger","_promise","resolve","setPracticeSessionState","enabled","request","method","HTTP_VERBS","PATCH","uri","body","practiceSession","catch","error","updatePracticeSessionStatus","startWebcast","layout","_this3","_callee3","_t","_t2","_t3","_t4","_t5","_t6","_t7","_t8","_context3","Error","PUT","_defineProperty2","credentials","getUserToken","sent","config","trackingIdPrefix","uuid","v4","toString","authorization","trackingId","HEADERS","CONTENT_TYPE","CONTENT_TYPE_VALUE","APPLICATION_JSON","action","meetingInfo","locusId","correlationId","headers","stopWebcast","_this4","_callee4","_t9","_t0","_t1","_t10","_t11","_t12","_t13","_t14","_context4","queryWebcastLayout","_this5","_callee5","_t15","_t16","_t17","_t18","_t19","_t20","_context5","GET","updateWebcastLayout","_this6","_callee6","_t21","_t22","_t23","_t24","_t25","_t26","_t27","_t28","_context6","videoLayout","contentLayout","syncStageLayout","syncStageInMeeting","viewAllWebcastAttendees","_this7","_callee7","_t29","_t30","_t31","_t32","_t33","_t34","_context7","searchWebcastAttendees","_arguments","arguments","_this8","_callee8","queryString","_t35","_t36","_t37","_t38","_t39","_t40","_context8","length","encodeURIComponent","expelWebcastAttendee","participantId","_this9","_callee9","_t41","_t42","_t43","_t44","_t45","_t46","_context9","DELETE","searchLargeScaleWebinarAttendees","_this0","_callee0","_payload$limit","_meeting$locusInfo3","_meeting$locusInfo3$l","_meeting$locusInfo3$l2","_meeting$locusInfo3$l3","rawParams","attendeeSearchUrl","_t47","_t48","_t49","_t50","_t51","_t52","_context0","search_text","limit","DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT","links","resources","attendeeSearch","URLSearchParams","sanitizeParams","version","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin, config} from '@webex/webex-core';\nimport uuid from 'uuid';\nimport {get} from 'lodash';\nimport {DataChannelTokenType} from '@webex/internal-plugin-llm';\nimport {\n _ID_,\n HEADERS,\n HTTP_VERBS,\n MEETINGS,\n SELF_ROLES,\n SHARE_STATUS,\n DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT,\n LLM_PRACTICE_SESSION,\n} from '../constants';\n\nimport WebinarCollection from './collection';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {sanitizeParams} from './utils';\n\n/**\n * @class Webinar\n */\nconst Webinar = WebexPlugin.extend({\n namespace: MEETINGS,\n collections: {\n webinar: WebinarCollection,\n },\n\n props: {\n locusUrl: 'string', // appears current webinar's locus url\n webcastInstanceUrl: 'string', // current webinar's webcast instance url\n canManageWebcast: 'boolean', // appears the ability to manage webcast\n selfIsPanelist: 'boolean', // self is panelist\n selfIsAttendee: 'boolean', // self is attendee\n practiceSessionEnabled: 'boolean', // practice session enabled\n meetingId: 'string',\n },\n\n /**\n * Calls this to clean up listeners\n * @returns {void}\n */\n cleanUp() {\n this.cleanupPSDataChannel();\n },\n\n /**\n * Update the current locus url of the webinar\n * @param {string} locusUrl\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n },\n\n /**\n * Update the current webcast instance url of the meeting\n * @param {object} payload\n * @returns {void}\n */\n updateWebcastUrl(payload) {\n this.set('webcastInstanceUrl', get(payload, 'resources.webcastInstance.url'));\n },\n\n /**\n * Update whether self has capability to manage start/stop webcast (only host can manage it)\n * @param {boolean} canManageWebcast\n * @returns {void}\n */\n updateCanManageWebcast(canManageWebcast) {\n this.set('canManageWebcast', canManageWebcast);\n },\n\n /**\n * Updates user roles and manages associated state transitions\n * @param {object} payload\n * @param {string[]} payload.oldRoles - Previous roles of the user\n * @param {string[]} payload.newRoles - New roles of the user\n * @returns {{isPromoted: boolean, isDemoted: boolean}} Role transition states\n */\n updateRoleChanged(payload) {\n const oldRoles = get(payload, 'oldRoles', []);\n const newRoles = get(payload, 'newRoles', []);\n\n const isPromoted =\n oldRoles.includes(SELF_ROLES.ATTENDEE) && newRoles.includes(SELF_ROLES.PANELIST);\n const isDemoted =\n (oldRoles.includes(SELF_ROLES.PANELIST) && newRoles.includes(SELF_ROLES.ATTENDEE)) ||\n (!oldRoles.includes(SELF_ROLES.ATTENDEE) && newRoles.includes(SELF_ROLES.ATTENDEE)); // for attendee just join meeting case\n this.set('selfIsPanelist', newRoles.includes(SELF_ROLES.PANELIST));\n this.set('selfIsAttendee', newRoles.includes(SELF_ROLES.ATTENDEE));\n this.updateCanManageWebcast(newRoles.includes(SELF_ROLES.MODERATOR));\n this.updateStatusByRole({isPromoted, isDemoted});\n\n return {isPromoted, isDemoted};\n },\n\n /**\n * should join practice session data channel or not\n * @param {Object} {isPromoted: boolean, isDemoted: boolean}} Role transition states\n * @returns {void}\n */\n updateStatusByRole({isPromoted, isDemoted}) {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n\n if (\n (isDemoted && meeting?.shareStatus === SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE) ||\n isPromoted\n ) {\n // attendees in webinar should subscribe streaming for whiteboard sharing\n // while panelist still need subscribe native mode so trigger force update here\n meeting?.locusInfo?.updateMediaShares(meeting?.locusInfo?.mediaShares, true);\n }\n\n this.updatePSDataChannel();\n },\n\n /**\n * should join practice session data channel or not\n * @returns {boolean}\n */\n isJoinPracticeSessionDataChannel() {\n return this.selfIsPanelist && this.practiceSessionEnabled;\n },\n\n /**\n * Disconnects the practice session data channel and removes its relay listener.\n * @returns {Promise<void>}\n */\n async cleanupPSDataChannel() {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n\n // @ts-ignore - Fix type\n await this.webex.internal.llm.disconnectLLM(\n {\n code: 3050,\n reason: 'done (permanent)',\n },\n LLM_PRACTICE_SESSION\n );\n // @ts-ignore - Fix type\n this.webex.internal.llm.off(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n },\n\n /**\n * Connects to low latency mercury and reconnects if the address has changed\n * It will also disconnect if called when the meeting has ended\n * @returns {Promise}\n */\n async updatePSDataChannel() {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n const isPracticeSession = meeting?.isJoined() && this.isJoinPracticeSessionDataChannel();\n\n if (!isPracticeSession) {\n await this.cleanupPSDataChannel();\n\n return undefined;\n }\n\n // @ts-ignore - Fix type\n const {\n url = undefined,\n info: {practiceSessionDatachannelUrl = undefined} = {},\n self: {practiceSessionDatachannelToken = undefined} = {},\n } = meeting?.locusInfo || {};\n\n // @ts-ignore\n const currentToken = this.webex.internal.llm.getDatachannelToken(\n DataChannelTokenType.PracticeSession\n );\n\n const finalToken = currentToken ?? practiceSessionDatachannelToken;\n\n const isCaptionBoxOn = this.webex.internal.voicea.getIsCaptionBoxOn();\n\n if (!currentToken && practiceSessionDatachannelToken) {\n // @ts-ignore\n this.webex.internal.llm.setDatachannelToken(\n practiceSessionDatachannelToken,\n DataChannelTokenType.PracticeSession\n );\n }\n\n if (!practiceSessionDatachannelUrl) {\n return undefined;\n }\n // @ts-ignore - Fix type\n if (this.webex.internal.llm.isConnected(LLM_PRACTICE_SESSION)) {\n if (\n // @ts-ignore - Fix type\n url === this.webex.internal.llm.getLocusUrl(LLM_PRACTICE_SESSION) &&\n // @ts-ignore - Fix type\n practiceSessionDatachannelUrl ===\n this.webex.internal.llm.getDatachannelUrl(LLM_PRACTICE_SESSION)\n ) {\n return undefined;\n }\n\n await this.cleanupPSDataChannel();\n }\n\n // @ts-ignore - Fix type\n return this.webex.internal.llm\n .registerAndConnect(url, practiceSessionDatachannelUrl, finalToken, LLM_PRACTICE_SESSION)\n .then((registerAndConnectResult) => {\n // @ts-ignore - Fix type\n this.webex.internal.llm.off(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n // @ts-ignore - Fix type\n this.webex.internal.llm.on(\n `event:relay.event:${LLM_PRACTICE_SESSION}`,\n meeting?.processRelayEvent\n );\n // @ts-ignore - Fix type\n this.webex.internal.voicea?.announce?.();\n if (isCaptionBoxOn) {\n this.webex.internal.voicea.updateSubchannelSubscriptions({subscribe: ['transcription']});\n }\n LoggerProxy.logger.info(\n `Webinar:index#updatePSDataChannel --> enabled to receive relay events for default session for ${LLM_PRACTICE_SESSION}!`\n );\n\n return Promise.resolve(registerAndConnectResult);\n });\n },\n\n /**\n * start or stop practice session for webinar\n * @param {boolean} enabled\n * @returns {Promise}\n */\n setPracticeSessionState(enabled) {\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/controls`,\n body: {\n practiceSession: {\n enabled,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#setPracticeSessionState failed', error);\n throw error;\n });\n },\n\n /**\n * update practice session status\n * @param {object} payload\n * @returns {void}\n */\n updatePracticeSessionStatus(payload) {\n this.set('practiceSessionEnabled', !!payload?.enabled);\n this.updatePSDataChannel().then(() => {});\n },\n\n /**\n * start webcast mode for webinar\n * @param {object} meeting\n * @param {object} layout\n * @returns {Promise}\n */\n async startWebcast(meeting, layout) {\n if (!meeting) {\n LoggerProxy.logger.error(\n `Meeting:webinar#startWebcast failed --> meeting parameter : ${meeting}`\n );\n throw new Error('Meeting parameter does not meet expectations');\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/streaming`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n action: 'start',\n meetingInfo: {\n locusId: meeting.locusId,\n correlationId: meeting.correlationId,\n },\n layout,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#startWebcast failed', error);\n throw error;\n });\n },\n\n /**\n * stop webcast mode for webinar\n * @returns {Promise}\n */\n async stopWebcast() {\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/streaming`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n action: 'stop',\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#stopWebcast failed', error);\n throw error;\n });\n },\n\n /**\n * query webcast layout for webinar\n * @returns {Promise}\n */\n async queryWebcastLayout() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/layout`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#queryWebcastLayout failed', error);\n throw error;\n });\n },\n\n /**\n * update webcast layout for webinar\n * @param {object} layout\n * @returns {Promise}\n */\n async updateWebcastLayout(layout) {\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/layout`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n videoLayout: layout.videoLayout,\n contentLayout: layout.contentLayout,\n syncStageLayout: layout.syncStageLayout,\n syncStageInMeeting: layout.syncStageInMeeting,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#updateWebcastLayout failed', error);\n throw error;\n });\n },\n\n /**\n * view all webcast attendees\n * @param {string} queryString\n * @returns {Promise}\n */\n async viewAllWebcastAttendees() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/attendees`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#viewAllWebcastAttendees failed', error);\n throw error;\n });\n },\n\n /**\n * search webcast attendees by query string\n * @param {string} queryString\n * @returns {Promise}\n */\n async searchWebcastAttendees(queryString = '') {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/attendees?keyword=${encodeURIComponent(queryString)}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#searchWebcastAttendees failed', error);\n throw error;\n });\n },\n\n /**\n * expel webcast attendee by participantId\n * @param {string} participantId\n * @returns {Promise}\n */\n async expelWebcastAttendee(participantId) {\n return this.request({\n method: HTTP_VERBS.DELETE,\n uri: `${this.webcastInstanceUrl}/attendees/${participantId}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#expelWebcastAttendee failed', error);\n throw error;\n });\n },\n\n /**\n * search large scale webinar attendees\n * @param {object} payload\n * @param {string} payload.queryString\n * @param {number} payload.limit\n * @param {string} payload.next\n * @returns {Promise}\n */\n async searchLargeScaleWebinarAttendees(payload) {\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n const rawParams = {\n search_text: payload?.queryString,\n limit: payload?.limit ?? DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT,\n next: payload?.next,\n };\n const attendeeSearchUrl = meeting?.locusInfo?.links?.resources?.attendeeSearch?.url;\n if (!attendeeSearchUrl) {\n LoggerProxy.logger.error(`Meeting:webinar5k#searchLargeScaleWebinarAttendees failed`);\n throw new Error('Meeting:webinar5k#Attendee search url is not available');\n }\n\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${attendeeSearchUrl}?${new URLSearchParams(sanitizeParams(rawParams)).toString()}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar5k#searchLargeScaleWebinarAttendees failed', error);\n throw error;\n });\n },\n});\n\nexport default Webinar;\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -65,12 +65,12 @@
65
65
  "@webex/internal-media-core": "2.23.1",
66
66
  "@webex/internal-plugin-conversation": "3.11.0-next.11",
67
67
  "@webex/internal-plugin-device": "3.11.0-next.8",
68
- "@webex/internal-plugin-llm": "3.11.0-next.11",
68
+ "@webex/internal-plugin-llm": "3.11.0-next.12",
69
69
  "@webex/internal-plugin-mercury": "3.11.0-next.10",
70
70
  "@webex/internal-plugin-metrics": "3.11.0-next.8",
71
71
  "@webex/internal-plugin-support": "3.11.0-next.11",
72
72
  "@webex/internal-plugin-user": "3.11.0-next.8",
73
- "@webex/internal-plugin-voicea": "3.11.0-next.12",
73
+ "@webex/internal-plugin-voicea": "3.11.0-next.13",
74
74
  "@webex/media-helpers": "3.11.0-next.4",
75
75
  "@webex/plugin-people": "3.11.0-next.10",
76
76
  "@webex/plugin-rooms": "3.11.0-next.11",
@@ -84,6 +84,7 @@
84
84
  "global": "^4.4.0",
85
85
  "ip-anonymize": "^0.1.0",
86
86
  "javascript-state-machine": "^3.1.0",
87
+ "jose": "^5.8.0",
87
88
  "jwt-decode": "3.1.2",
88
89
  "lodash": "^4.17.21",
89
90
  "uuid": "^3.3.2",
@@ -93,5 +94,5 @@
93
94
  "//": [
94
95
  "TODO: upgrade jwt-decode when moving to node 18"
95
96
  ],
96
- "version": "3.11.0-next.46"
97
+ "version": "3.11.0-next.48"
97
98
  }
@@ -5,6 +5,7 @@
5
5
  import {Interceptor} from '@webex/http-core';
6
6
  import LoggerProxy from '../common/logs/logger-proxy';
7
7
  import {DATA_CHANNEL_AUTH_HEADER, MAX_RETRY, RETRY_INTERVAL, RETRY_KEY} from './constant';
8
+ import {isJwtTokenExpired} from './utils';
8
9
 
9
10
  /*!
10
11
  * Copyright (c) 2015-2026 Cisco Systems, Inc. See LICENSE file.
@@ -69,6 +70,33 @@ export default class DataChannelAuthTokenInterceptor extends Interceptor {
69
70
  return key ? headers[key] : undefined;
70
71
  }
71
72
 
73
+ /**
74
+ * Intercepts outgoing requests and refreshes the Data-Channel-Auth-Token
75
+ * if the current JWT token is expired before the request is sent.
76
+ *
77
+ * @param {Object} options - The original request options.
78
+ * @returns {Promise<Object>} Updated request options with refreshed token if needed.
79
+ */
80
+ async onRequest(options) {
81
+ const token = this.getHeader(options.headers, DATA_CHANNEL_AUTH_HEADER);
82
+ const enabled = await this._isDataChannelTokenEnabled();
83
+
84
+ if (!token || !enabled) {
85
+ return options;
86
+ }
87
+
88
+ if (isJwtTokenExpired(token)) {
89
+ try {
90
+ const newToken = await this._refreshDataChannelToken();
91
+ options.headers[DATA_CHANNEL_AUTH_HEADER] = newToken;
92
+ } catch (e) {
93
+ LoggerProxy.logger.warn(`DataChannelAuthTokenInterceptor: refresh failed: ${e.message}`);
94
+ }
95
+ }
96
+
97
+ return options;
98
+ }
99
+
72
100
  /**
73
101
  * Intercept responses and, on 401/403 with `Data-Channel-Auth-Token` header,
74
102
  * attempt to refresh the data channel token and retry the original request once.
@@ -0,0 +1,16 @@
1
+ import * as jose from 'jose';
2
+
3
+ const EXPIRY_BUFFER = 30 * 1000;
4
+
5
+ // eslint-disable-next-line import/prefer-default-export
6
+ export const isJwtTokenExpired = (token: string): boolean => {
7
+ try {
8
+ const payload = jose.decodeJwt(token);
9
+
10
+ if (!payload?.exp) return false;
11
+
12
+ return payload.exp * 1000 < Date.now() + EXPIRY_BUFFER;
13
+ } catch {
14
+ return true;
15
+ }
16
+ };
@@ -10317,12 +10317,12 @@ export default class Meeting extends StatelessWebexPlugin {
10317
10317
  } catch (e) {
10318
10318
  const msg = e?.message || String(e);
10319
10319
 
10320
- const err = Object.assign(new Error(`Failed to refresh data channel token: ${msg}`), {
10321
- statusCode: e?.statusCode,
10322
- original: e,
10323
- });
10320
+ LoggerProxy.logger.warn(
10321
+ `Meeting:index#refreshDataChannelToken --> DataChannel token refresh failed (likely locus changed or participant left): ${msg}`,
10322
+ {statusCode: e?.statusCode}
10323
+ );
10324
10324
 
10325
- throw err;
10325
+ return null;
10326
10326
  }
10327
10327
  }
10328
10328