@webex/plugin-meetings 3.11.0 → 3.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aiEnableRequest/index.js +184 -0
- package/dist/aiEnableRequest/index.js.map +1 -0
- package/dist/aiEnableRequest/utils.js +36 -0
- package/dist/aiEnableRequest/utils.js.map +1 -0
- package/dist/annotation/index.js +14 -5
- package/dist/annotation/index.js.map +1 -1
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +28 -6
- package/dist/constants.js.map +1 -1
- package/dist/hashTree/constants.js +3 -1
- package/dist/hashTree/constants.js.map +1 -1
- package/dist/hashTree/hashTree.js +18 -0
- package/dist/hashTree/hashTree.js.map +1 -1
- package/dist/hashTree/hashTreeParser.js +709 -380
- package/dist/hashTree/hashTreeParser.js.map +1 -1
- package/dist/hashTree/types.js +4 -2
- package/dist/hashTree/types.js.map +1 -1
- package/dist/hashTree/utils.js +10 -0
- package/dist/hashTree/utils.js.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/interceptors/constant.js +12 -0
- package/dist/interceptors/constant.js.map +1 -0
- package/dist/interceptors/dataChannelAuthToken.js +290 -0
- package/dist/interceptors/dataChannelAuthToken.js.map +1 -0
- package/dist/interceptors/index.js +7 -0
- package/dist/interceptors/index.js.map +1 -1
- package/dist/interceptors/utils.js +27 -0
- package/dist/interceptors/utils.js.map +1 -0
- package/dist/interpretation/index.js +2 -2
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +5 -3
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +217 -79
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/selfUtils.js +1 -0
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/locus-info/types.js.map +1 -1
- package/dist/media/MediaConnectionAwaiter.js +57 -1
- package/dist/media/MediaConnectionAwaiter.js.map +1 -1
- package/dist/media/properties.js +4 -2
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +7 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +1082 -861
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +50 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/util.js +133 -3
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +100 -45
- package/dist/meetings/index.js.map +1 -1
- package/dist/member/index.js +10 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +10 -0
- package/dist/member/util.js.map +1 -1
- package/dist/metrics/constants.js +2 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +9 -60
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +11 -0
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/reachability/index.js +18 -10
- package/dist/reachability/index.js.map +1 -1
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +0 -1
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/types/aiEnableRequest/index.d.ts +5 -0
- package/dist/types/aiEnableRequest/utils.d.ts +2 -0
- package/dist/types/config.d.ts +3 -0
- package/dist/types/constants.d.ts +23 -1
- package/dist/types/hashTree/constants.d.ts +1 -0
- package/dist/types/hashTree/hashTree.d.ts +7 -0
- package/dist/types/hashTree/hashTreeParser.d.ts +99 -14
- package/dist/types/hashTree/types.d.ts +3 -0
- package/dist/types/hashTree/utils.d.ts +6 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/interceptors/constant.d.ts +5 -0
- package/dist/types/interceptors/dataChannelAuthToken.d.ts +43 -0
- package/dist/types/interceptors/index.d.ts +2 -1
- package/dist/types/interceptors/utils.d.ts +1 -0
- package/dist/types/locus-info/index.d.ts +21 -2
- package/dist/types/locus-info/types.d.ts +1 -0
- package/dist/types/media/MediaConnectionAwaiter.d.ts +10 -1
- package/dist/types/media/properties.d.ts +2 -1
- package/dist/types/meeting/in-meeting-actions.d.ts +6 -0
- package/dist/types/meeting/index.d.ts +38 -6
- package/dist/types/meeting/request.d.ts +16 -1
- package/dist/types/meeting/request.type.d.ts +5 -0
- package/dist/types/meeting/util.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +4 -2
- package/dist/types/member/index.d.ts +1 -0
- package/dist/types/member/util.d.ts +5 -0
- package/dist/types/metrics/constants.d.ts +1 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +0 -23
- package/dist/types/reactions/reactions.type.d.ts +1 -0
- package/dist/types/webinar/utils.d.ts +6 -0
- package/dist/webinar/index.js +260 -90
- package/dist/webinar/index.js.map +1 -1
- package/dist/webinar/utils.js +25 -0
- package/dist/webinar/utils.js.map +1 -0
- package/package.json +24 -23
- package/src/aiEnableRequest/README.md +84 -0
- package/src/aiEnableRequest/index.ts +170 -0
- package/src/aiEnableRequest/utils.ts +25 -0
- package/src/annotation/index.ts +27 -7
- package/src/config.ts +3 -0
- package/src/constants.ts +29 -1
- package/src/hashTree/constants.ts +1 -0
- package/src/hashTree/hashTree.ts +17 -0
- package/src/hashTree/hashTreeParser.ts +627 -249
- package/src/hashTree/types.ts +4 -0
- package/src/hashTree/utils.ts +9 -0
- package/src/index.ts +8 -1
- package/src/interceptors/constant.ts +6 -0
- package/src/interceptors/dataChannelAuthToken.ts +170 -0
- package/src/interceptors/index.ts +2 -1
- package/src/interceptors/utils.ts +16 -0
- package/src/interpretation/index.ts +2 -2
- package/src/locus-info/controlsUtils.ts +11 -0
- package/src/locus-info/index.ts +231 -61
- package/src/locus-info/selfUtils.ts +1 -0
- package/src/locus-info/types.ts +1 -0
- package/src/media/MediaConnectionAwaiter.ts +41 -1
- package/src/media/properties.ts +3 -1
- package/src/meeting/in-meeting-actions.ts +12 -0
- package/src/meeting/index.ts +205 -44
- package/src/meeting/request.ts +42 -0
- package/src/meeting/request.type.ts +6 -0
- package/src/meeting/util.ts +160 -2
- package/src/meetings/index.ts +135 -41
- package/src/member/index.ts +10 -0
- package/src/member/util.ts +12 -0
- package/src/metrics/constants.ts +1 -0
- package/src/multistream/mediaRequestManager.ts +4 -54
- package/src/multistream/remoteMediaManager.ts +13 -0
- package/src/reachability/index.ts +9 -0
- package/src/reactions/reactions.type.ts +1 -0
- package/src/reconnection-manager/index.ts +0 -1
- package/src/webinar/index.ts +162 -5
- package/src/webinar/utils.ts +16 -0
- package/test/unit/spec/aiEnableRequest/index.ts +981 -0
- package/test/unit/spec/aiEnableRequest/utils.ts +130 -0
- package/test/unit/spec/annotation/index.ts +69 -7
- package/test/unit/spec/hashTree/hashTree.ts +66 -0
- package/test/unit/spec/hashTree/hashTreeParser.ts +1869 -189
- package/test/unit/spec/interceptors/dataChannelAuthToken.ts +210 -0
- package/test/unit/spec/interceptors/utils.ts +75 -0
- package/test/unit/spec/locus-info/controlsUtils.js +29 -0
- package/test/unit/spec/locus-info/index.js +383 -46
- package/test/unit/spec/media/MediaConnectionAwaiter.ts +41 -1
- package/test/unit/spec/media/properties.ts +12 -3
- package/test/unit/spec/meeting/in-meeting-actions.ts +8 -2
- package/test/unit/spec/meeting/index.js +716 -115
- package/test/unit/spec/meeting/request.js +70 -0
- package/test/unit/spec/meeting/utils.js +438 -26
- package/test/unit/spec/meetings/index.js +652 -31
- package/test/unit/spec/member/index.js +28 -4
- package/test/unit/spec/member/util.js +65 -27
- package/test/unit/spec/multistream/mediaRequestManager.ts +2 -85
- package/test/unit/spec/multistream/remoteMediaManager.ts +30 -0
- package/test/unit/spec/reachability/index.ts +23 -0
- package/test/unit/spec/reconnection-manager/index.js +4 -8
- package/test/unit/spec/webinar/index.ts +348 -36
- package/test/unit/spec/webinar/utils.ts +39 -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":[]}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ export declare const LOCAL = "local";
|
|
|
31
31
|
export declare const LOCI = "loci";
|
|
32
32
|
export declare const LOCUS_URL = "locusUrl";
|
|
33
33
|
export declare const END = "end";
|
|
34
|
+
export declare const LLM_PRACTICE_SESSION = "llm-practice-session";
|
|
34
35
|
export declare const MAX_RANDOM_DELAY_FOR_MEETING_INFO: number;
|
|
35
36
|
export declare const MEETINGINFO = "meetingInfo";
|
|
36
37
|
export declare const MEET = "meet";
|
|
@@ -272,6 +273,7 @@ export declare const EVENT_TRIGGERS: {
|
|
|
272
273
|
MEETING_CONTROLS_REACTIONS_UPDATED: string;
|
|
273
274
|
MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED: string;
|
|
274
275
|
MEETING_CONTROLS_RAISE_HAND_UPDATED: string;
|
|
276
|
+
MEETING_CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED: string;
|
|
275
277
|
MEETING_CONTROLS_VIDEO_UPDATED: string;
|
|
276
278
|
MEETING_CONTROLS_STAGE_VIEW_UPDATED: string;
|
|
277
279
|
MEETING_CONTROLS_WEBCAST_UPDATED: string;
|
|
@@ -290,6 +292,7 @@ export declare const EVENT_TRIGGERS: {
|
|
|
290
292
|
MEETING_MANUAL_CAPTION_UPDATED: string;
|
|
291
293
|
MEETING_CAPTION_RECEIVED: string;
|
|
292
294
|
MEETING_PARTICIPANT_REASON_CHANGED: string;
|
|
295
|
+
MEETING_AI_ENABLE_REQUEST: string;
|
|
293
296
|
};
|
|
294
297
|
export declare const EVENT_TYPES: {
|
|
295
298
|
SELF: string;
|
|
@@ -309,7 +312,6 @@ export declare const HEADERS: {
|
|
|
309
312
|
};
|
|
310
313
|
export declare const MEETING_REMOVED_REASON: {
|
|
311
314
|
SELF_REMOVED: string;
|
|
312
|
-
FULLSTATE_REMOVED: string;
|
|
313
315
|
MEETING_INACTIVE_TERMINATING: string;
|
|
314
316
|
CLIENT_LEAVE_REQUEST: string;
|
|
315
317
|
CLIENT_LEAVE_REQUEST_TAB_CLOSED: string;
|
|
@@ -570,6 +572,7 @@ export declare const LOCUSINFO: {
|
|
|
570
572
|
CONTROLS_MEETING_LAYOUT_UPDATED: string;
|
|
571
573
|
CONTROLS_RECORDING_UPDATED: string;
|
|
572
574
|
CONTROLS_MEETING_TRANSCRIBE_UPDATED: string;
|
|
575
|
+
CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED: string;
|
|
573
576
|
CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED: string;
|
|
574
577
|
CONTROLS_MEETING_MANUAL_CAPTION_UPDATED: string;
|
|
575
578
|
CONTROLS_MEETING_HESIOD_LLM_ID_UPDATED: string;
|
|
@@ -615,6 +618,7 @@ export declare const LOCUSINFO: {
|
|
|
615
618
|
SELF_IS_SHARING_BLOCKED_CHANGE: string;
|
|
616
619
|
SELF_MEETING_BREAKOUTS_CHANGED: string;
|
|
617
620
|
SELF_MEETING_INTERPRETATION_CHANGED: string;
|
|
621
|
+
SELF_ID_CHANGED: string;
|
|
618
622
|
SELF_MEETING_BRB_CHANGED: string;
|
|
619
623
|
MEDIA_INACTIVITY: string;
|
|
620
624
|
LINKS_SERVICES: string;
|
|
@@ -645,6 +649,7 @@ export declare const LOCUSEVENT: {
|
|
|
645
649
|
readonly RECORDING_STOPPED: "locus.recording_stopped";
|
|
646
650
|
readonly SELF_CHANGED: "locus.self_changed";
|
|
647
651
|
readonly HASH_TREE_DATA_UPDATED: "locus.state_message";
|
|
652
|
+
readonly APPROVAL_REQUEST: "locus.approval_request";
|
|
648
653
|
readonly SDK_LOCUS_FROM_SYNC_MEETINGS: "jsSdk.locus_from_sync_meetings";
|
|
649
654
|
readonly SDK_NO_EVENT: "jsSdk.no_event";
|
|
650
655
|
};
|
|
@@ -800,6 +805,8 @@ export declare const DISPLAY_HINTS: {
|
|
|
800
805
|
LOWER_SOMEONE_ELSES_HAND: string;
|
|
801
806
|
LEAVE_TRANSFER_HOST_END_MEETING: string;
|
|
802
807
|
LEAVE_END_MEETING: string;
|
|
808
|
+
END_MEETING: string;
|
|
809
|
+
REQUIRE_HOST_END_MEETING_BEFORE_LEAVE: string;
|
|
803
810
|
STREAMING_STATUS_STARTED: string;
|
|
804
811
|
STREAMING_STATUS_STOPPED: string;
|
|
805
812
|
CAPTION_START: string;
|
|
@@ -875,6 +882,8 @@ export declare const DISPLAY_HINTS: {
|
|
|
875
882
|
DISABLE_RDC_MEETING_OPTION: string;
|
|
876
883
|
ENABLE_ATTENDEE_START_POLLING_QA: string;
|
|
877
884
|
DISABLE_ATTENDEE_START_POLLING_QA: string;
|
|
885
|
+
ATTENDEE_REQUEST_AI_ASSISTANT_ENABLED: string;
|
|
886
|
+
ATTENDEE_REQUEST_AI_ASSISTANT_DECLINED_ALL: string;
|
|
878
887
|
};
|
|
879
888
|
export declare const INTERSTITIAL_DISPLAY_HINTS: string[];
|
|
880
889
|
export declare const SELF_ROLES: {
|
|
@@ -1152,3 +1161,16 @@ export declare const STAGE_MANAGER_TYPE: {
|
|
|
1152
1161
|
BACKGROUND: number;
|
|
1153
1162
|
NAME_LABEL: number;
|
|
1154
1163
|
};
|
|
1164
|
+
export declare const DEFAULT_LARGE_SCALE_WEBINAR_ATTENDEE_SEARCH_LIMIT = 50;
|
|
1165
|
+
export declare const AI_ENABLE_REQUEST: {
|
|
1166
|
+
EVENTS: {
|
|
1167
|
+
APPROVAL_REQUEST_ARRIVED: string;
|
|
1168
|
+
};
|
|
1169
|
+
ACTION_TYPE: {
|
|
1170
|
+
REQUESTED: string;
|
|
1171
|
+
ACCEPTED: string;
|
|
1172
|
+
DECLINED: string;
|
|
1173
|
+
DECLINED_ALL: string;
|
|
1174
|
+
};
|
|
1175
|
+
RESOURCE_TYPE: string;
|
|
1176
|
+
};
|
|
@@ -110,6 +110,13 @@ declare class HashTree {
|
|
|
110
110
|
* or an empty array if the index is invalid or leaf is empty.
|
|
111
111
|
*/
|
|
112
112
|
getLeafData(leafIndex: number): LeafDataItem[];
|
|
113
|
+
/**
|
|
114
|
+
* Retrieves the version of a specific item by its id and type.
|
|
115
|
+
* @param {number} id The ID of the item.
|
|
116
|
+
* @param {ObjectType} type The type of the item.
|
|
117
|
+
* @returns {number | undefined} The version of the item if found, undefined otherwise.
|
|
118
|
+
*/
|
|
119
|
+
getItemVersion(id: number, type: ObjectType): number | undefined;
|
|
113
120
|
/**
|
|
114
121
|
* Resizes the HashTree to have a new number of leaf nodes, redistributing all existing items.
|
|
115
122
|
* @param {number} newNumLeaves The new number of leaf nodes (must be 0 or a power of 2).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import HashTree from './hashTree';
|
|
2
2
|
import { Enum } from '../constants';
|
|
3
|
-
import { HashTreeObject } from './types';
|
|
3
|
+
import { HtMeta, HashTreeObject } from './types';
|
|
4
4
|
import { LocusDTO } from '../locus-info/types';
|
|
5
5
|
export interface DataSet {
|
|
6
6
|
url: string;
|
|
@@ -23,10 +23,21 @@ export interface HashTreeMessage {
|
|
|
23
23
|
locusStateElements?: Array<HashTreeObject>;
|
|
24
24
|
locusSessionId?: string;
|
|
25
25
|
locusUrl: string;
|
|
26
|
+
heartbeatIntervalMs?: number;
|
|
27
|
+
}
|
|
28
|
+
export interface VisibleDataSetInfo {
|
|
29
|
+
name: string;
|
|
30
|
+
url: string;
|
|
31
|
+
dataChannelUrl?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface Metadata {
|
|
34
|
+
htMeta: HtMeta;
|
|
35
|
+
visibleDataSets: VisibleDataSetInfo[];
|
|
26
36
|
}
|
|
27
37
|
interface InternalDataSet extends DataSet {
|
|
28
38
|
hashTree?: HashTree;
|
|
29
39
|
timer?: ReturnType<typeof setTimeout>;
|
|
40
|
+
heartbeatWatchdogTimer?: ReturnType<typeof setTimeout>;
|
|
30
41
|
}
|
|
31
42
|
type WebexRequestMethod = (options: Record<string, any>) => Promise<any>;
|
|
32
43
|
export declare const LocusInfoUpdateType: {
|
|
@@ -37,6 +48,12 @@ export type LocusInfoUpdateType = Enum<typeof LocusInfoUpdateType>;
|
|
|
37
48
|
export type LocusInfoUpdateCallback = (updateType: LocusInfoUpdateType, data?: {
|
|
38
49
|
updatedObjects: HashTreeObject[];
|
|
39
50
|
}) => void;
|
|
51
|
+
/**
|
|
52
|
+
* This error is thrown if we receive information that the meeting has ended while we're processing some hash messages.
|
|
53
|
+
* It's handled internally by HashTreeParser and results in MEETING_ENDED being sent up.
|
|
54
|
+
*/
|
|
55
|
+
export declare class MeetingEndedError extends Error {
|
|
56
|
+
}
|
|
40
57
|
/**
|
|
41
58
|
* Parses hash tree eventing locus data
|
|
42
59
|
*/
|
|
@@ -45,8 +62,10 @@ declare class HashTreeParser {
|
|
|
45
62
|
visibleDataSetsUrl: string;
|
|
46
63
|
webexRequest: WebexRequestMethod;
|
|
47
64
|
locusInfoUpdateCallback: LocusInfoUpdateCallback;
|
|
48
|
-
visibleDataSets:
|
|
65
|
+
visibleDataSets: VisibleDataSetInfo[];
|
|
49
66
|
debugId: string;
|
|
67
|
+
heartbeatIntervalMs?: number;
|
|
68
|
+
private excludedDataSets;
|
|
50
69
|
/**
|
|
51
70
|
* Constructor for HashTreeParser
|
|
52
71
|
* @param {Object} options
|
|
@@ -57,16 +76,37 @@ declare class HashTreeParser {
|
|
|
57
76
|
dataSets: Array<DataSet>;
|
|
58
77
|
locus: any;
|
|
59
78
|
};
|
|
79
|
+
metadata: Metadata | null;
|
|
60
80
|
webexRequest: WebexRequestMethod;
|
|
61
81
|
locusInfoUpdateCallback: LocusInfoUpdateCallback;
|
|
62
82
|
debugId: string;
|
|
83
|
+
excludedDataSets?: string[];
|
|
63
84
|
});
|
|
85
|
+
/**
|
|
86
|
+
* Checks if the given data set name is in the list of visible data sets
|
|
87
|
+
* @param {string} dataSetName data set name to check
|
|
88
|
+
* @returns {Boolean} True if the data set is visible, false otherwise
|
|
89
|
+
*/
|
|
90
|
+
private isVisibleDataSet;
|
|
91
|
+
/**
|
|
92
|
+
* Checks if the given data set name is in the excluded list
|
|
93
|
+
* @param {string} dataSetName data set name to check
|
|
94
|
+
* @returns {boolean} True if the data set is excluded, false otherwise
|
|
95
|
+
*/
|
|
96
|
+
private isExcludedDataSet;
|
|
97
|
+
/**
|
|
98
|
+
* Adds a data set to the visible data sets list, unless it is in the excluded list.
|
|
99
|
+
* @param {VisibleDataSetInfo} dataSetInfo data set info to add
|
|
100
|
+
* @returns {boolean} True if the data set was added, false if it was excluded
|
|
101
|
+
*/
|
|
102
|
+
private addToVisibleDataSetsList;
|
|
64
103
|
/**
|
|
65
104
|
* Initializes a new visible data set by creating a hash tree for it, adding it to all the internal structures,
|
|
66
105
|
* and sending an initial sync request to Locus with empty leaf data - that will trigger Locus to gives us all the data
|
|
67
106
|
* from that dataset (in the response or via messages).
|
|
68
107
|
*
|
|
69
|
-
* @param {
|
|
108
|
+
* @param {VisibleDataSetInfo} visibleDataSetInfo Information about the new visible data set
|
|
109
|
+
* @param {DataSet} dataSetInfo The new data set to be added
|
|
70
110
|
* @returns {Promise}
|
|
71
111
|
*/
|
|
72
112
|
private initializeNewVisibleDataSet;
|
|
@@ -79,12 +119,11 @@ declare class HashTreeParser {
|
|
|
79
119
|
*/
|
|
80
120
|
private sendInitializationSyncRequestToLocus;
|
|
81
121
|
/**
|
|
82
|
-
* Queries Locus for information about all
|
|
122
|
+
* Queries Locus for all up-to-date information about all visible data sets
|
|
83
123
|
*
|
|
84
|
-
* @param {string} url - url from which we can get info about all data sets
|
|
85
124
|
* @returns {Promise}
|
|
86
125
|
*/
|
|
87
|
-
private
|
|
126
|
+
private getAllVisibleDataSetsFromLocus;
|
|
88
127
|
/**
|
|
89
128
|
* Initializes the hash tree parser from a message received from Locus.
|
|
90
129
|
*
|
|
@@ -105,7 +144,7 @@ declare class HashTreeParser {
|
|
|
105
144
|
/**
|
|
106
145
|
* Initializes data sets by doing an initialization sync on each visible data set that doesn't have a hash tree yet.
|
|
107
146
|
*
|
|
108
|
-
* @param {DataSet[]}
|
|
147
|
+
* @param {DataSet[]} visibleDataSets Array of visible DataSet objects to initialize
|
|
109
148
|
* @param {string} debugText Text to include in logs for debugging purposes
|
|
110
149
|
* @returns {Promise}
|
|
111
150
|
*/
|
|
@@ -121,6 +160,15 @@ declare class HashTreeParser {
|
|
|
121
160
|
* @returns {any} - An object mapping dataset names to arrays of leaf data
|
|
122
161
|
*/
|
|
123
162
|
private analyzeLocusHtMeta;
|
|
163
|
+
/**
|
|
164
|
+
* Analyzes the Metadata object that is sent outside of Locus object, and appends its data to passed in leafInfo
|
|
165
|
+
* structure.
|
|
166
|
+
*
|
|
167
|
+
* @param {Record<string, LeafInfo[]>} leafInfo the structure to which the Metadata info will be appended
|
|
168
|
+
* @param {Metadata} metadata Metadata object
|
|
169
|
+
* @returns {void}
|
|
170
|
+
*/
|
|
171
|
+
private analyzeMetadata;
|
|
124
172
|
/**
|
|
125
173
|
* Checks if the provided hash tree message indicates the end of the meeting and that there won't be any more updates.
|
|
126
174
|
*
|
|
@@ -135,6 +183,22 @@ declare class HashTreeParser {
|
|
|
135
183
|
* @returns {void}
|
|
136
184
|
*/
|
|
137
185
|
private handleRootHashHeartBeatMessage;
|
|
186
|
+
/**
|
|
187
|
+
* Asynchronously initializes new visible data sets
|
|
188
|
+
*
|
|
189
|
+
* @param {VisibleDataSetInfo[]} dataSetsRequiringInitialization list of datasets to initialize
|
|
190
|
+
* @returns {void}
|
|
191
|
+
*/
|
|
192
|
+
private queueInitForNewVisibleDataSets;
|
|
193
|
+
/**
|
|
194
|
+
* Handles updates to Metadata object that we receive from Locus via other means than messages. Right now
|
|
195
|
+
* that means only in the API response alongside locus object.
|
|
196
|
+
*
|
|
197
|
+
* @param {Metadata} metadata received in Locus update other than a message (for example in an API response)
|
|
198
|
+
* @param {HashTreeObject[]} updatedObjects a list of updated hash tree objects to which any updates resulting from new Metadata will be added
|
|
199
|
+
* @returns {void}
|
|
200
|
+
*/
|
|
201
|
+
handleMetadataUpdate(metadata: Metadata, updatedObjects: HashTreeObject[]): void;
|
|
138
202
|
/**
|
|
139
203
|
* This method should be called when we receive a partial locus DTO that contains dataSets and htMeta information
|
|
140
204
|
* It updates the hash trees with the new leaf data based on the received Locus
|
|
@@ -145,6 +209,7 @@ declare class HashTreeParser {
|
|
|
145
209
|
handleLocusUpdate(update: {
|
|
146
210
|
dataSets?: Array<DataSet>;
|
|
147
211
|
locus: any;
|
|
212
|
+
metadata?: Metadata;
|
|
148
213
|
}): void;
|
|
149
214
|
/**
|
|
150
215
|
* Updates the internal data set information based on the received data set from Locus.
|
|
@@ -175,18 +240,17 @@ declare class HashTreeParser {
|
|
|
175
240
|
* visible data sets and they require async initialization, the names of these data sets
|
|
176
241
|
* are returned in an array.
|
|
177
242
|
*
|
|
178
|
-
* @param {
|
|
179
|
-
* @param {
|
|
243
|
+
* @param {VisibleDataSetInfo[]} removedDataSets - The list of removed data sets.
|
|
244
|
+
* @param {VisibleDataSetInfo[]} addedDataSets - The list of added data sets.
|
|
180
245
|
* @param {HashTreeObject[]} updatedObjects - The list of updated hash tree objects to which changes will be added.
|
|
181
|
-
* @returns {
|
|
246
|
+
* @returns {VisibleDataSetInfo[]} list of data sets that couldn't be initialized synchronously
|
|
182
247
|
*/
|
|
183
248
|
private processVisibleDataSetChanges;
|
|
184
249
|
/**
|
|
185
250
|
* Adds entries to the passed in updateObjects array
|
|
186
251
|
* for the changes that result from adding and removing visible data sets.
|
|
187
252
|
*
|
|
188
|
-
* @param {
|
|
189
|
-
* @param {string[]} addedDataSets - The list of added data sets.
|
|
253
|
+
* @param {VisibleDataSetInfo[]} addedDataSets - The list of added data sets.
|
|
190
254
|
* @returns {Promise<void>}
|
|
191
255
|
*/
|
|
192
256
|
private initializeNewVisibleDataSets;
|
|
@@ -195,7 +259,7 @@ declare class HashTreeParser {
|
|
|
195
259
|
*
|
|
196
260
|
* @param {HashTreeMessage} message - The hash tree message containing data sets and objects to be processed
|
|
197
261
|
* @param {string} [debugText] - Optional debug text to include in logs
|
|
198
|
-
* @returns {
|
|
262
|
+
* @returns {HashTreeObject[]} list of hash tree objects that were updated as a result of processing the message
|
|
199
263
|
*/
|
|
200
264
|
private parseMessage;
|
|
201
265
|
/**
|
|
@@ -205,7 +269,7 @@ declare class HashTreeParser {
|
|
|
205
269
|
* @param {string} [debugText] - Optional debug text to include in logs
|
|
206
270
|
* @returns {void}
|
|
207
271
|
*/
|
|
208
|
-
handleMessage(message: HashTreeMessage, debugText?: string):
|
|
272
|
+
handleMessage(message: HashTreeMessage, debugText?: string): void;
|
|
209
273
|
/**
|
|
210
274
|
* Calls the updateInfo callback if there are any updates to report
|
|
211
275
|
*
|
|
@@ -220,6 +284,15 @@ declare class HashTreeParser {
|
|
|
220
284
|
* @returns {number} - A weighted backoff time based on the provided configuration, using algorithm supplied by Locus team
|
|
221
285
|
*/
|
|
222
286
|
private getWeightedBackoffTime;
|
|
287
|
+
/**
|
|
288
|
+
* Performs a sync for the given data set.
|
|
289
|
+
*
|
|
290
|
+
* @param {InternalDataSet} dataSet - The data set to sync
|
|
291
|
+
* @param {string} rootHash - Our current root hash for this data set
|
|
292
|
+
* @param {string} reason - The reason for the sync (used for logging)
|
|
293
|
+
* @returns {Promise<void>}
|
|
294
|
+
*/
|
|
295
|
+
private performSync;
|
|
223
296
|
/**
|
|
224
297
|
* Runs the sync algorithm for the given data set.
|
|
225
298
|
*
|
|
@@ -227,14 +300,26 @@ declare class HashTreeParser {
|
|
|
227
300
|
* @returns {void}
|
|
228
301
|
*/
|
|
229
302
|
private runSyncAlgorithm;
|
|
303
|
+
/**
|
|
304
|
+
* Resets the heartbeat watchdog timers for the specified data sets. Each data set has its own
|
|
305
|
+
* watchdog timer that monitors whether heartbeats are being received within the expected interval.
|
|
306
|
+
* If a heartbeat is not received for a specific data set within heartbeatIntervalMs plus
|
|
307
|
+
* a backoff-calculated time, the sync algorithm is initiated for that data set
|
|
308
|
+
*
|
|
309
|
+
* @param {Array<DataSet>} receivedDataSets - The data sets from the received message for which watchdog timers should be reset
|
|
310
|
+
* @returns {void}
|
|
311
|
+
*/
|
|
312
|
+
private resetHeartbeatWatchdogs;
|
|
230
313
|
/**
|
|
231
314
|
* Stops all timers for the data sets to prevent any further sync attempts.
|
|
232
315
|
* @returns {void}
|
|
233
316
|
*/
|
|
234
317
|
private stopAllTimers;
|
|
318
|
+
private checkForSentinelHttpResponse;
|
|
235
319
|
/**
|
|
236
320
|
* Gets the current hashes from the locus for a specific data set.
|
|
237
321
|
* @param {string} dataSetName
|
|
322
|
+
* @param {string} currentRootHash
|
|
238
323
|
* @returns {string[]}
|
|
239
324
|
*/
|
|
240
325
|
private getHashesFromLocus;
|
|
@@ -8,6 +8,8 @@ export declare const ObjectType: {
|
|
|
8
8
|
readonly fullState: "fullstate";
|
|
9
9
|
readonly links: "links";
|
|
10
10
|
readonly control: "controlentry";
|
|
11
|
+
readonly metadata: "metadata";
|
|
12
|
+
readonly embeddedApp: "embeddedapp";
|
|
11
13
|
};
|
|
12
14
|
export type ObjectType = Enum<typeof ObjectType>;
|
|
13
15
|
export declare const ObjectTypeToLocusKeyMap: {
|
|
@@ -18,6 +20,7 @@ export declare const ObjectTypeToLocusKeyMap: {
|
|
|
18
20
|
participant: string;
|
|
19
21
|
mediashare: string;
|
|
20
22
|
controlentry: string;
|
|
23
|
+
embeddedapp: string;
|
|
21
24
|
};
|
|
22
25
|
export interface HtMeta {
|
|
23
26
|
elementId: {
|
|
@@ -5,6 +5,12 @@ import { HashTreeObject } from './types';
|
|
|
5
5
|
* @returns {boolean} True if the object is of type "self", false otherwise
|
|
6
6
|
*/
|
|
7
7
|
export declare function isSelf(object: HashTreeObject): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Checks if the given hash tree object is of type "Metadata"
|
|
10
|
+
* @param {HashTreeObject} object object to check
|
|
11
|
+
* @returns {boolean} True if the object is of type "Metadata", false otherwise
|
|
12
|
+
*/
|
|
13
|
+
export declare function isMetadata(object: HashTreeObject): boolean;
|
|
8
14
|
/**
|
|
9
15
|
* Analyzes given part of Locus DTO recursively and delete any nested objects that have their own htMeta
|
|
10
16
|
*
|
package/dist/types/index.d.ts
CHANGED
|
@@ -19,3 +19,4 @@ export { type Reaction } from './reactions/reactions.type';
|
|
|
19
19
|
export { CaptchaError, IntentToJoinError, JoinMeetingError, PasswordError, PermissionError, ReclaimHostIsHostAlreadyError, ReclaimHostNotAllowedError, ReclaimHostNotSupportedError, ReclaimHostEmptyWrongKeyError, Meeting, MeetingInfoUtil, JoinWebinarError, SdpResponseTimeoutError, };
|
|
20
20
|
export { RemoteMedia } from './multistream/remoteMedia';
|
|
21
21
|
export { default as TriggerProxy } from './common/events/trigger-proxy';
|
|
22
|
+
export { getAIEnablementApprover } from './aiEnableRequest/utils';
|