@webex/calling 3.12.0-mobius-socket.19 → 3.12.0-mobius-socket.21
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/CallingClient/CallingClient.js +49 -49
- package/dist/CallingClient/CallingClient.js.map +1 -1
- package/dist/CallingClient/CallingClient.test.js +4 -12
- package/dist/CallingClient/CallingClient.test.js.map +1 -1
- package/dist/mobius-socket/errors.js +47 -6
- package/dist/mobius-socket/errors.js.map +1 -1
- package/dist/mobius-socket/index.js +4 -10
- package/dist/mobius-socket/index.js.map +1 -1
- package/dist/mobius-socket/mobius-socket.js +151 -140
- package/dist/mobius-socket/mobius-socket.js.map +1 -1
- package/dist/mobius-socket/mobius-socket.test.js +18 -11
- package/dist/mobius-socket/mobius-socket.test.js.map +1 -1
- package/dist/mobius-socket/socket/constants.js +14 -0
- package/dist/mobius-socket/socket/constants.js.map +1 -1
- package/dist/mobius-socket/socket/socket-base.js +93 -138
- package/dist/mobius-socket/socket/socket-base.js.map +1 -1
- package/dist/mobius-socket/socket/types.js.map +1 -1
- package/dist/mobius-socket/socket.test.js +3 -3
- package/dist/mobius-socket/socket.test.js.map +1 -1
- package/dist/mobius-socket/types.js.map +1 -1
- package/dist/module/CallingClient/CallingClient.js +2 -5
- package/dist/module/mobius-socket/errors.js +17 -0
- package/dist/module/mobius-socket/mobius-socket.js +39 -41
- package/dist/module/mobius-socket/socket/socket-base.js +26 -58
- package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
- package/dist/types/mobius-socket/errors.d.ts +4 -1
- package/dist/types/mobius-socket/errors.d.ts.map +1 -1
- package/dist/types/mobius-socket/index.d.ts.map +1 -1
- package/dist/types/mobius-socket/mobius-socket.d.ts +14 -1
- package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -1
- package/dist/types/mobius-socket/socket/constants.d.ts.map +1 -1
- package/dist/types/mobius-socket/socket/socket-base.d.ts +0 -1
- package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -1
- package/dist/types/mobius-socket/socket/types.d.ts +0 -8
- package/dist/types/mobius-socket/socket/types.d.ts.map +1 -1
- package/dist/types/mobius-socket/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","require","_backoff","_interopRequireDefault","_socket","_errors","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","Boolean","prototype","valueOf","call","_superPropGet","p","_get2","normalReconnectReasons","MOBIUS_SOCKET_NAMESPACE","TOKEN_REFRESH_INTERVAL_MS","normalizeMobiusAuthToken","token","replace","MobiusSocket","_EventEmitter","webex","_this","config","undefined","_classCallCheck2","Error","logger","console","connected","connecting","hasEverConnected","socket","backoffCall","shutdownSwitchoverBackoffCall","seenAsyncEventIds","_map","connectPromise","tokenRefreshTimer","tokenRefreshInFlight","_inherits2","_createClass2","key","value","off","eventName","listener","removeAllListeners","attachSocketEventListeners","_this2","on","event","onclose","onmessage","trackAsyncEventAndShouldSuppressDuplicate","envelope","type","eventId","has","previousValue","get","delete","set","info","concat","log","size","dedupCacheMaxSize","oldestEventId","keys","next","handleImminentShutdown","_this3","oldSocket","connectWithBackoff","isShutdownSwitchover","attemptOptions","onSuccess","newSocket","webSocketUrl","emitEvent","url","then","catch","err","reason","error","getConnectedWebSocketUrl","_this$socket","sendWssRequest","payload","_this4","options","_typeof2","_isArray","_promise","reject","requestConfigOptions","timeout","matchesResponse","response","request","subtype","trackingId","getStatusCode","statusCode","getStatusMessage","statusMessage","createError","createWssResponseError","createTimeoutError","sendRequest","isConnected","connect","_this$socket2","_this$socket3","_this5","resolve","socketUrl","Number","initialConnectionMaxRetries","internal","device","registered","register","finally","disconnect","_this6","_stringify","abort","clear","stopTokenRefreshTimer","close","name","prepareUrl","attemptConnection","callback","_this7","_options$isShutdownSw","_options$onSuccess","Socket","newWSUrl","mode","msg","prepareAndOpenSocket","backoffCallNormal","code","getNumRetries","retries","stack","UnknownResponse","refresh","NotAuthorized","credentials","force","BadRequest","Forbidden","warn","_this8","logPrefix","all","getUserToken","_ref","_ref2","_slicedToArray2","forceCloseDelay","wssResponseTimeout","toString","refreshToken","sessionId","_now","defaultMobiusSocketOptions","customOptionsMsg","open","_this9","context","_context$isShutdownSw","_context$attemptOptio","isInitialConnect","initialRetryLimit","isInitialConnectWithoutRetries","onComplete","startTokenRefreshTimer","backoff","attemptNum","attemptLogPrefix","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","retryIf","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","callbackLogPrefix","process","env","NODE_ENV","debug","start","_len","args","Array","_key","emit","_this0","setInterval","clearInterval","_this1","tokenPromise","canRefresh","_this1$socket","refreshedToken","sourceSocket","toLowerCase","isActiveSocket","reconnect","includes","data","ENABLE_MOBIUS_LOGGING","eventType","_eventType$split","split","_eventType$split2","namespace","EventEmitter","_default","exports"],"sources":["mobius-socket.ts"],"sourcesContent":["// @ts-nocheck\n/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file\n */\n\nimport {EventEmitter} from 'events';\nimport backoff from 'backoff';\n\nimport type {WebexSDK} from '../SDKConnector/types';\nimport Socket from './socket';\nimport {BadRequest, Forbidden, NotAuthorized, UnknownResponse} from './errors';\nimport type {MobiusSocketConfig} from './config';\nimport type {SocketResponse} from './socket/types';\nimport type {\n MobiusSocketCloseOptions,\n MobiusSocketDisconnectResult,\n MobiusSocketRequestOptions,\n MobiusSocketRequestPayload,\n MobiusSocketResponseError,\n} from './types';\n\nconst normalReconnectReasons = ['idle', 'done (forced)'];\nconst MOBIUS_SOCKET_NAMESPACE = 'MobiusSocket';\nconst TOKEN_REFRESH_INTERVAL_MS = 1 * 60 * 60 * 1000; // 1 hour\n\ntype MobiusSocketLogger = Pick<Console, 'debug' | 'error' | 'info' | 'log' | 'warn'>;\n\nfunction normalizeMobiusAuthToken(token: string) {\n return token.replace(/^Bearer\\s+/i, '');\n}\n\nclass MobiusSocket extends EventEmitter {\n constructor(webex: WebexSDK, config: Partial<MobiusSocketConfig> = {}) {\n super();\n\n if (!webex) {\n throw new Error('A Webex instance is required when initializing MobiusSocket');\n }\n\n this.webex = webex;\n this.config = config;\n this.logger = (webex.logger as unknown as MobiusSocketLogger) || console;\n this.connected = false;\n this.connecting = false;\n this.hasEverConnected = false;\n this.socket = undefined;\n this.backoffCall = undefined;\n this.shutdownSwitchoverBackoffCall = undefined;\n this.seenAsyncEventIds = new Map();\n this.connectPromise = undefined;\n this.tokenRefreshTimer = undefined;\n this.tokenRefreshInFlight = undefined;\n }\n\n public off(eventName: string, listener?: (...args: unknown[]) => void) {\n if (listener) {\n return super.off(eventName, listener);\n }\n\n this.removeAllListeners(eventName);\n\n return this;\n }\n\n /**\n * Attach event listeners to a socket.\n * @param {Socket} socket - The socket to attach listeners to\n * @returns {void}\n */\n private attachSocketEventListeners(socket) {\n socket.on('close', (event) => this.onclose(event, socket));\n socket.on('message', (...args) => this.onmessage(...args));\n }\n\n /**\n * Tracks a newly seen async_event ID and reports whether a duplicate should be suppressed.\n * @param {object} envelope - Parsed websocket message envelope.\n * @returns {boolean} True when the event has already been seen.\n */\n private trackAsyncEventAndShouldSuppressDuplicate(envelope) {\n if (envelope?.type !== 'async_event' || !envelope.eventId) {\n return false;\n }\n\n if (this.seenAsyncEventIds.has(envelope.eventId)) {\n // Refresh recency so frequently retransmitted eventIds stay protected longer.\n // This deletion and setting again makes the data recent since javascript map maintains order as well\n const previousValue = this.seenAsyncEventIds.get(envelope.eventId);\n this.seenAsyncEventIds.delete(envelope.eventId);\n this.seenAsyncEventIds.set(envelope.eventId, previousValue);\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: duplicate async_event suppressed, eventId=${envelope.eventId}`\n );\n\n return true;\n }\n\n this.logger.log(\n `${MOBIUS_SOCKET_NAMESPACE}: tracking async_event, eventId=${envelope.eventId}`\n );\n this.seenAsyncEventIds.set(envelope.eventId, true);\n\n if (this.seenAsyncEventIds.size > this.config.dedupCacheMaxSize) {\n const oldestEventId = this.seenAsyncEventIds.keys().next().value;\n\n this.seenAsyncEventIds.delete(oldestEventId);\n this.logger.log(\n `${MOBIUS_SOCKET_NAMESPACE}: evicted oldest async_event from dedup cache, eventId=${oldestEventId}`\n );\n }\n\n return false;\n }\n\n /**\n * Handle imminent shutdown by establishing a new connection while keeping\n * the current one alive (make-before-break).\n * Idempotent: will no-op if already in progress.\n */\n private handleImminentShutdown() {\n const oldSocket = this.socket;\n\n try {\n if (this.shutdownSwitchoverBackoffCall) {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover already in progress`);\n\n return;\n }\n\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover start`);\n\n this.connectWithBackoff(undefined, {\n isShutdownSwitchover: true,\n attemptOptions: {\n isShutdownSwitchover: true,\n onSuccess: (newSocket, webSocketUrl) => {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover connected, url: ${webSocketUrl}`\n );\n\n // Promote the new socket now that the switchover succeeded\n newSocket.connecting = false;\n newSocket.connected = true;\n this.socket = newSocket;\n this.connected = true;\n\n this.emitEvent('event:mobius_shutdown_switchover_complete', {\n url: webSocketUrl,\n });\n\n if (oldSocket) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] old socket retained; server will close with 4001`\n );\n }\n },\n },\n })\n .then(() => {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover completed successfully`\n );\n })\n .catch((err) => {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover exhausted retries; will fall back to normal reconnection: `,\n err\n );\n this.emitEvent('event:mobius_shutdown_switchover_failed', {reason: err});\n });\n } catch (e) {\n this.logger.error(`${MOBIUS_SOCKET_NAMESPACE}: [shutdown] error during switchover`, e);\n this.shutdownSwitchoverBackoffCall = undefined;\n this.emitEvent('event:mobius_shutdown_switchover_failed', {reason: e});\n }\n }\n\n /**\n * Get the websocket URL for the currently connected socket.\n * @returns {string|undefined} The connected websocket URL, or undefined when not connected.\n */\n public getConnectedWebSocketUrl(): string | undefined {\n if (!this.socket?.connected) {\n return undefined;\n }\n\n return this.socket.url;\n }\n\n /**\n * Sends a websocket request and resolves when the matching response arrives.\n * @param {MobiusSocketRequestPayload} payload - The websocket request payload.\n * @param {MobiusSocketRequestOptions} [options={}] - Additional request options.\n * @returns {Promise<SocketResponse>}\n */\n public sendWssRequest(\n payload: MobiusSocketRequestPayload,\n options: MobiusSocketRequestOptions = {}\n ): Promise<SocketResponse> {\n if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {\n return Promise.reject(new Error('`payload` is required'));\n }\n\n if (!this.socket || !this.socket.connected) {\n return Promise.reject(new Error('Mobius socket is not connected'));\n }\n\n const requestConfigOptions = {\n timeout: options.timeout,\n matchesResponse: (response, request) =>\n response?.type === 'response_event' &&\n response?.subtype === request.type &&\n response?.trackingId === request.trackingId,\n getStatusCode: (response) => response?.statusCode,\n getStatusMessage: (response) => response?.statusMessage,\n createError: (response, statusCode, statusMessage) =>\n this.createWssResponseError(response, statusCode, statusMessage),\n createTimeoutError: (request) =>\n this.createWssResponseError(\n {\n type: 'response_event',\n subtype: request.type,\n trackingId: request.trackingId,\n },\n 408,\n 'Mobius websocket response timed out'\n ),\n };\n\n return this.socket.sendRequest(payload, requestConfigOptions);\n }\n\n /**\n * Check if the socket is connected.\n * @returns {boolean} True if connected.\n */\n public isConnected(): boolean {\n return this.connected;\n }\n\n /**\n * Connect to Mobius.\n * @param {string} [webSocketUrl] - Optional websocket URL override. Falls back to the device websocket URL.\n * @returns {Promise<void>} Resolves when connection flow completes.\n */\n public connect(webSocketUrl?: string): Promise<void> {\n if (this.connectPromise) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: connection already in progress, returning existing promise`\n );\n\n return this.connectPromise;\n }\n\n if (this.socket?.connected || this.socket?.connecting) {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: already connected, will not connect again`);\n\n return Promise.resolve();\n }\n\n // Treat a connect() call that targets a different Mobius websocket URL\n // as a fresh initial connection for retry purposes.\n if (webSocketUrl && this.socketUrl && webSocketUrl !== this.socketUrl) {\n this.hasEverConnected = false;\n }\n\n // Cache the caller-provided URL for reconnect\n if (webSocketUrl) {\n this.socketUrl = webSocketUrl;\n }\n\n this.connecting = true;\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: starting connection attempt${\n Number(this.config.initialConnectionMaxRetries) === 0 && !this.hasEverConnected\n ? ' (initial retries disabled)'\n : ''\n }`\n );\n\n const connectPromise = Promise.resolve(\n this.webex.internal.device.registered || this.webex.internal.device.register()\n )\n .then(() => {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: connecting`);\n\n return this.connectWithBackoff(this.socketUrl);\n })\n .finally(() => {\n this.connectPromise = undefined;\n });\n\n this.connectPromise = connectPromise;\n\n return connectPromise;\n }\n\n /**\n * Disconnect the Mobius socket.\n * @param {MobiusSocketCloseOptions} [options] - Optional websocket close options (code, reason).\n * @returns {Promise<void>} Resolves after disconnect cleanup and close handling complete.\n */\n public disconnect(options?: MobiusSocketCloseOptions): MobiusSocketDisconnectResult {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}#disconnect: connecting state: ${this.connecting},\n connected state: ${this.connected}, socket exists: ${!!this.socket},\n options: ${JSON.stringify(options)}`\n );\n\n if (this.backoffCall) {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: aborting connection`);\n this.backoffCall.abort();\n this.backoffCall = undefined;\n }\n\n if (this.shutdownSwitchoverBackoffCall) {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: aborting shutdown switchover connection`);\n this.shutdownSwitchoverBackoffCall.abort();\n this.shutdownSwitchoverBackoffCall = undefined;\n }\n\n this.connectPromise = undefined;\n this.seenAsyncEventIds.clear();\n\n if (!this.socket) {\n this.connected = false;\n this.stopTokenRefreshTimer();\n\n return Promise.resolve();\n }\n\n this.socket.removeAllListeners('message');\n this.socket.connecting = false;\n this.socket.connected = false;\n\n return Promise.resolve(this.socket.close(options || undefined)).finally(() => {\n this.connected = false;\n this.stopTokenRefreshTimer();\n });\n }\n\n // eslint-disable-next-line class-methods-use-this\n private createWssResponseError(\n response: SocketResponse,\n statusCode?: number,\n statusMessage?: string\n ): MobiusSocketResponseError {\n const error = new Error(\n statusMessage || `Mobius websocket request failed with status ${statusCode || 'unknown'}`\n ) as MobiusSocketResponseError;\n\n error.name = 'MobiusSocketResponseError';\n error.statusCode = statusCode;\n error.statusMessage = statusMessage;\n error.response = response;\n error.trackingId = response?.trackingId;\n\n return error;\n }\n\n private prepareUrl(webSocketUrl) {\n if (!webSocketUrl) {\n // TODO: Circle back to this logic when mobius implements the shutdown switchover\n webSocketUrl = this.webex.internal.device.webSocketUrl;\n }\n\n return Promise.resolve(webSocketUrl);\n }\n\n private attemptConnection(socketUrl, callback, options = {}) {\n const {isShutdownSwitchover = false, onSuccess = null} = options;\n\n const socket = new Socket();\n socket.connecting = true;\n let newWSUrl;\n\n this.attachSocketEventListeners(socket);\n\n const backoffCall = isShutdownSwitchover\n ? this.shutdownSwitchoverBackoffCall\n : this.backoffCall;\n\n // Check appropriate backoff call based on connection type\n if (!backoffCall) {\n const mode = isShutdownSwitchover ? 'switchover backoff call' : 'backoffCall';\n const msg = `${MOBIUS_SOCKET_NAMESPACE}: prevent socket open when ${mode} no longer defined`;\n const err = new Error(msg);\n\n this.logger.info(msg);\n // Call the callback with the error before rejecting\n callback(err);\n\n return Promise.reject(err);\n }\n\n // For shutdown switchover, don't set socket yet (make-before-break)\n // For normal connection, set socket before opening to allow disconnect() to close it\n if (!isShutdownSwitchover) {\n this.socket = socket;\n }\n\n return this.prepareAndOpenSocket(socket, socketUrl, isShutdownSwitchover)\n .then((webSocketUrl) => {\n newWSUrl = webSocketUrl;\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: ${\n isShutdownSwitchover ? '[shutdown] switchover' : ''\n } connected to mobius socket, success, url: ${newWSUrl}`\n );\n\n // Custom success handler for shutdown switchover\n if (onSuccess) {\n onSuccess(socket, webSocketUrl);\n callback();\n\n return Promise.resolve();\n }\n\n // Default behavior for normal connection\n callback();\n\n return Promise.resolve();\n })\n .catch((reason) => {\n // For shutdown, simpler error handling - just callback for retry\n if (isShutdownSwitchover) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover attempt failed`,\n reason\n );\n\n return callback(reason);\n }\n\n // Normal connection error handling\n const backoffCallNormal = this.backoffCall;\n // Suppress connection errors that appear to be network related (code 1006).\n if (reason.code !== 1006 && backoffCallNormal && backoffCallNormal?.getNumRetries() > 0) {\n this.emitEvent('connection_failed', reason, {\n retries: backoffCallNormal?.getNumRetries(),\n });\n }\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: connection attempt failed`,\n reason,\n backoffCallNormal?.getNumRetries() === 0 ? reason.stack : ''\n );\n\n // UnknownResponse is produced by IE for any 4XXX; treat it like a bad\n // web socket url and let WDM handle the token checking\n if (reason instanceof UnknownResponse) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: received unknown response code, refreshing device registration`\n );\n\n return this.webex.internal.device.refresh().then(() => callback(reason));\n }\n // NotAuthorized implies expired token\n if (reason instanceof NotAuthorized) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: received authorization error, reauthorizing`\n );\n\n return this.webex.credentials.refresh({force: true}).then(() => callback(reason));\n }\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(\n `${MOBIUS_SOCKET_NAMESPACE}: received unrecoverable response from ${MOBIUS_SOCKET_NAMESPACE}`\n );\n backoffCallNormal?.abort();\n\n return callback(reason);\n }\n\n return callback(reason);\n })\n .catch((reason) => {\n this.logger.error(\n `${MOBIUS_SOCKET_NAMESPACE}: failed to handle connection failure`,\n reason\n );\n callback(reason);\n });\n }\n\n private prepareAndOpenSocket(socket, socketUrl, isShutdownSwitchover = false) {\n const logPrefix = isShutdownSwitchover ? '[shutdown] switchover' : 'connection';\n\n return Promise.all([this.prepareUrl(socketUrl), this.webex.credentials.getUserToken()]).then(\n ([webSocketUrl, token]) => {\n let options = {\n forceCloseDelay: this.config.forceCloseDelay,\n wssResponseTimeout: this.config.wssResponseTimeout,\n token: normalizeMobiusAuthToken(token.toString()),\n refreshToken: () => this.refreshToken(),\n trackingId: `${this.webex.sessionId}_${Date.now()}`,\n logger: this.logger,\n };\n\n if (this.webex.config.defaultMobiusSocketOptions) {\n const customOptionsMsg = isShutdownSwitchover\n ? 'setting custom options for switchover'\n : 'setting custom options';\n\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: ${customOptionsMsg}`);\n options = {...options, ...this.webex.config.defaultMobiusSocketOptions};\n }\n\n // Only promote the socket reference for normal connections.\n // Shutdown switchover keeps the old socket active until the new one succeeds.\n if (!isShutdownSwitchover) {\n this.socket = socket;\n }\n\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE} ${logPrefix} url: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options).then(() => webSocketUrl);\n }\n );\n }\n\n private connectWithBackoff(webSocketUrl, context = {}): Promise<void> {\n const {isShutdownSwitchover = false, attemptOptions = {}} = context;\n\n return new Promise((resolve, reject) => {\n // eslint-disable-next-line prefer-const\n let call;\n const isInitialConnect = !isShutdownSwitchover && !this.hasEverConnected;\n const initialRetryLimit =\n this.config.initialConnectionMaxRetries == null\n ? null\n : Number(this.config.initialConnectionMaxRetries);\n const isInitialConnectWithoutRetries = isInitialConnect && initialRetryLimit === 0;\n\n const onComplete = (err) => {\n if (isShutdownSwitchover) {\n this.shutdownSwitchoverBackoffCall = undefined;\n } else {\n this.backoffCall = undefined;\n }\n\n if (err) {\n const msg = isShutdownSwitchover\n ? `[shutdown] switchover failed after ${call.getNumRetries()} retries`\n : `failed to connect after ${call.getNumRetries()} retries`;\n\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: ${msg}; ${err}`);\n // Only mutate socket flags for normal connections.\n // During shutdown switchover, this.socket is the old live socket — don't touch it.\n if (!isShutdownSwitchover && this.socket) {\n this.socket.connecting = false;\n this.socket.connected = false;\n }\n\n return reject(err);\n }\n\n // For normal connections, mark the socket as connected.\n // Shutdown switchover promotion is handled by the onSuccess callback.\n if (!isShutdownSwitchover && this.socket) {\n this.socket.connecting = false;\n this.socket.connected = true;\n }\n\n if (!isShutdownSwitchover) {\n this.connecting = false;\n this.connected = true;\n this.hasEverConnected = true;\n this.startTokenRefreshTimer();\n this.emitEvent('online');\n }\n\n return resolve();\n };\n // eslint-disable-next-line prefer-reflect\n call = backoff.call(\n (callback) => {\n const attemptNum = call.getNumRetries();\n const attemptLogPrefix = isShutdownSwitchover ? '[shutdown] switchover' : 'connection';\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: executing ${attemptLogPrefix} attempt ${attemptNum}`\n );\n this.attemptConnection(webSocketUrl, callback, attemptOptions);\n },\n (err) => onComplete(err)\n );\n\n call.setStrategy(\n new backoff.ExponentialStrategy({\n initialDelay: this.config.backoffTimeReset,\n maxDelay: this.config.backoffTimeMax,\n })\n );\n\n if (isInitialConnectWithoutRetries) {\n call.retryIf(() => false);\n } else if (isInitialConnect && initialRetryLimit > 0) {\n call.failAfter(initialRetryLimit);\n } else if (this.config.maxRetries) {\n call.failAfter(this.config.maxRetries);\n }\n\n // Store backoff call reference BEFORE starting (so it's available in attemptConnection)\n if (isShutdownSwitchover) {\n this.shutdownSwitchoverBackoffCall = call;\n } else {\n this.backoffCall = call;\n }\n\n call.on('abort', () => {\n const msg = isShutdownSwitchover ? 'Shutdown Switchover' : 'Connection';\n\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: ${msg} aborted`);\n reject(new Error(`MobiusSocket ${msg} Aborted`));\n });\n\n call.on('callback', (err) => {\n if (err) {\n if (isInitialConnectWithoutRetries) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: initial connect failed; retries already disabled`\n );\n\n return;\n }\n\n const number = call.getNumRetries();\n const delay = Math.min(call.strategy_.nextBackoffDelay_, this.config.backoffTimeMax);\n\n const callbackLogPrefix = isShutdownSwitchover ? '[shutdown] switchover' : '';\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: ${callbackLogPrefix} failed to connect; attempting retry ${\n number + 1\n } in ${delay} ms`\n );\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug(`${MOBIUS_SOCKET_NAMESPACE}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: connected`);\n });\n\n call.start();\n });\n }\n\n private emitEvent(eventName, ...args) {\n try {\n if (!eventName) {\n return;\n }\n\n this.emit(eventName, ...args);\n } catch (error) {\n // Safely handle errors without causing additional issues during cleanup\n this.logger.error(\n `${MOBIUS_SOCKET_NAMESPACE}: error occurred in event handler:`,\n error,\n ' with args: ',\n [eventName, ...args]\n );\n }\n }\n\n private startTokenRefreshTimer() {\n if (this.tokenRefreshTimer || !this.connected) {\n return;\n }\n\n this.tokenRefreshTimer = setInterval(() => {\n this.refreshToken().catch((error) => {\n this.logger.error(`${MOBIUS_SOCKET_NAMESPACE}: periodic token refresh failed`, error);\n });\n }, TOKEN_REFRESH_INTERVAL_MS);\n }\n\n private stopTokenRefreshTimer() {\n if (!this.tokenRefreshTimer) {\n return;\n }\n\n clearInterval(this.tokenRefreshTimer);\n this.tokenRefreshTimer = undefined;\n }\n\n private refreshToken() {\n if (this.tokenRefreshInFlight) {\n return this.tokenRefreshInFlight;\n }\n\n if (!this.connected) {\n this.stopTokenRefreshTimer();\n\n return Promise.resolve();\n }\n\n const tokenPromise = this.webex.credentials.canRefresh\n ? this.webex.credentials\n .refresh({force: true})\n .then(() => this.webex.credentials.getUserToken())\n : this.webex.credentials.getUserToken();\n\n this.tokenRefreshInFlight = tokenPromise\n .then((token) => {\n if (!token) {\n throw new Error('Mobius token refresh did not return a token');\n }\n const refreshedToken = normalizeMobiusAuthToken(token.toString());\n\n if (this.socket?.connected) {\n return this.socket.refresh(refreshedToken);\n }\n\n return undefined;\n })\n .catch((error) => {\n this.logger.error(\n `${MOBIUS_SOCKET_NAMESPACE}: failed to refresh/re-auth Mobius socket`,\n error\n );\n throw error;\n })\n .finally(() => {\n this.tokenRefreshInFlight = undefined;\n });\n\n return this.tokenRefreshInFlight;\n }\n\n private onclose(event, sourceSocket) {\n // I don't see any way to avoid the complexity or statement count in here.\n /* eslint complexity: [0] */\n\n try {\n const reason = event.reason && event.reason.toLowerCase();\n let socketUrl;\n\n const isActiveSocket = sourceSocket === this.socket;\n if (sourceSocket) {\n socketUrl = sourceSocket.url;\n }\n\n // Only tear down state if the currently active socket closed\n if (isActiveSocket) {\n if (this.socket) {\n this.socket.removeAllListeners();\n this.socket = undefined;\n this.emitEvent('offline', event);\n }\n this.connecting = false;\n this.connected = false;\n this.stopTokenRefreshTimer();\n } else {\n // Old socket closed; do not flip connection state\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] non-active socket closed, code=${event.code}`\n );\n // Clean up listeners from old socket now that it's closed\n if (sourceSocket) {\n sourceSocket.removeAllListeners();\n }\n }\n\n switch (event.code) {\n case 1003:\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: service rejected last message; will not reconnect: ${event.reason}`\n );\n if (isActiveSocket) this.emitEvent('offline.permanent', event);\n break;\n case 4000:\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: socket replaced; will not reconnect`);\n if (isActiveSocket) this.emitEvent('offline.replaced', event);\n break;\n case 4001:\n // replaced during shutdown\n if (isActiveSocket) {\n // Server closed active socket with 4001, meaning it expected this connection\n // to be replaced, but the switchover in handleImminentShutdown failed.\n this.logger.warn(\n `${MOBIUS_SOCKET_NAMESPACE}: active socket closed with 4001; shutdown switchover failed`\n );\n this.emitEvent('offline.permanent', event);\n } else {\n // Expected: old socket closed after successful switchover\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: old socket closed with 4001 (replaced during shutdown); no reconnect needed`\n );\n this.emitEvent('offline.replaced', event);\n }\n break;\n case 1001:\n case 1005:\n case 1006:\n case 1011:\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: socket disconnected; reconnecting`);\n if (isActiveSocket) {\n this.emitEvent('offline.transient', event);\n this.reconnect(socketUrl);\n }\n break;\n case 1000:\n case 3050:\n if (normalReconnectReasons.includes(reason)) {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: socket disconnected; reconnecting`);\n if (isActiveSocket) {\n this.emitEvent('offline.transient', event);\n this.reconnect(socketUrl);\n }\n } else {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: socket disconnected; will not reconnect: ${event.reason}`\n );\n if (isActiveSocket) this.emitEvent('offline.permanent', event);\n }\n break;\n default:\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: socket disconnected unexpectedly; will not reconnect`\n );\n if (isActiveSocket) this.emitEvent('offline.permanent', event);\n }\n } catch (error) {\n this.logger.error(`${MOBIUS_SOCKET_NAMESPACE}: error occurred in close handler`, error);\n }\n }\n\n private onmessage(event) {\n const envelope = event.data;\n\n if (process.env.ENABLE_MOBIUS_LOGGING) {\n this.logger.debug(`${MOBIUS_SOCKET_NAMESPACE}: message envelope: `, envelope);\n }\n\n // Handle shutdown message shape: { type: 'shutdown' }\n if (envelope && envelope.type === 'shutdown') {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: [shutdown] imminent shutdown message received`);\n this.emitEvent('event:mobius_shutdown_imminent', envelope); // This is not yet not implemented, keeping for future support\n\n this.handleImminentShutdown();\n\n return Promise.resolve();\n }\n\n if (this.trackAsyncEventAndShouldSuppressDuplicate(envelope)) {\n return Promise.resolve();\n }\n\n // Emit event:<type> for typed messages (e.g., register.response)\n if (envelope.type) {\n this.emitEvent(`event:${envelope.type}`, envelope);\n }\n\n // Use data/payload if present, otherwise treat the envelope itself as the data (flat format)\n const data = envelope.data || envelope;\n\n // Support both Mobius-enveloped (data.eventType) and flat (eventType) formats\n const eventType = data?.eventType || envelope.eventType;\n\n if (!eventType) {\n this.emitEvent('event', envelope);\n\n return Promise.resolve();\n }\n\n try {\n // TODO: Remove if event:namespace is not required\n this.emitEvent('event', envelope);\n const [namespace] = eventType.split('.');\n this.emitEvent(`event:${namespace}`, envelope);\n\n if (namespace !== eventType) {\n this.emitEvent(`event:${eventType}`, envelope);\n }\n } catch (reason) {\n this.logger.error(\n `${MOBIUS_SOCKET_NAMESPACE}: error occurred processing socket message`,\n reason\n );\n }\n\n return Promise.resolve();\n }\n\n private reconnect(webSocketUrl) {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: reconnecting`);\n\n return this.connect(webSocketUrl || this.socketUrl);\n }\n}\n\nexport default MobiusSocket;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_events","require","_backoff","_interopRequireDefault","_socket","_errors","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","Boolean","prototype","valueOf","call","_superPropGet","p","_get2","normalReconnectReasons","MOBIUS_SOCKET_NAMESPACE","TOKEN_REFRESH_INTERVAL_MS","normalizeMobiusAuthToken","token","replace","MobiusSocket","_EventEmitter","webex","_this","config","undefined","_classCallCheck2","Error","logger","console","connected","connecting","hasEverConnected","socket","backoffCall","shutdownSwitchoverBackoffCall","seenAsyncEventIds","_map","connectPromise","tokenRefreshTimer","tokenRefreshInFlight","_inherits2","_createClass2","key","value","off","eventName","listener","removeAllListeners","attachSocketEventListeners","_this2","on","event","onclose","onmessage","trackAsyncEventAndShouldSuppressDuplicate","envelope","type","eventId","has","previousValue","get","delete","set","info","concat","log","dedupCacheMaxSize","size","oldestEventId","keys","next","handleImminentShutdown","_this3","oldSocket","connectWithBackoff","isShutdownSwitchover","attemptOptions","onSuccess","newSocket","webSocketUrl","emitEvent","url","then","catch","err","reason","error","getConnectedWebSocketUrl","_this$socket","sendWssRequest","payload","options","_typeof2","_isArray","_promise","reject","sendRequest","timeout","isConnected","connect","_this$socket2","_this$socket3","_this$webex$internal$","_this$webex$internal$2","_this4","resolve","socketUrl","Number","initialConnectionMaxRetries","internal","device","registered","register","finally","disconnect","_this5","_stringify","abort","clear","stopTokenRefreshTimer","close","prepareUrl","attemptConnection","callback","_this6","_options$isShutdownSw","_options$attemptOptio","_attemptOptions$onSuc","Socket","newWSUrl","mode","msg","prepareAndOpenSocket","backoffCallNormal","code","getNumRetries","retries","stack","UnknownResponse","_this6$webex$internal","_this6$webex$internal2","refresh","NotAuthorized","_this6$webex$credenti","_this6$webex$credenti2","credentials","force","BadRequest","Forbidden","warn","_this7","logPrefix","all","getUserToken","_ref","_ref2","_slicedToArray2","forceCloseDelay","wssResponseTimeout","toString","refreshToken","trackingId","sessionId","_now","defaultMobiusSocketOptions","customOptionsMsg","open","_this8","context","_context$isShutdownSw","_context$attemptOptio","isInitialConnect","initialRetryLimit","isInitialConnectWithoutRetries","onComplete","startTokenRefreshTimer","backoff","attemptNum","attemptLogPrefix","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","retryIf","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","Infinity","callbackLogPrefix","process","env","NODE_ENV","debug","start","_len","args","Array","_key","emit","_this9","setInterval","clearInterval","_this$webex$credentia","_this$webex$credentia2","_this$webex$credentia3","_this0","tokenPromise","canRefresh","_this0$socket","refreshedToken","sourceSocket","toLowerCase","isActiveSocket","reconnect","includes","data","ENABLE_MOBIUS_LOGGING","eventType","_eventType$split","split","_eventType$split2","namespace","EventEmitter","_default","exports"],"sources":["mobius-socket.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file\n */\n\nimport {EventEmitter} from 'events';\n// @ts-ignore - backoff library does not have type definitions\nimport backoff from 'backoff';\n\nimport type {WebexSDK} from '../SDKConnector/types';\nimport Socket from './socket';\nimport {BadRequest, Forbidden, NotAuthorized, UnknownResponse} from './errors';\nimport type {MobiusSocketConfig} from './config';\nimport type {SocketCloseEvent, SocketMessageEvent, SocketResponse} from './socket/types';\nimport type {\n MobiusSocketCloseOptions,\n MobiusSocketDisconnectResult,\n MobiusSocketRequestOptions,\n MobiusSocketRequestPayload,\n} from './types';\n\nconst normalReconnectReasons = ['idle', 'done (forced)'];\nconst MOBIUS_SOCKET_NAMESPACE = 'MobiusSocket';\nconst TOKEN_REFRESH_INTERVAL_MS = 1 * 60 * 60 * 1000; // 1 hour\n\ntype MobiusSocketLogger = Pick<Console, 'debug' | 'error' | 'info' | 'log' | 'warn'>;\n\n// Extended Socket type with dynamic properties\ntype ExtendedSocket = Socket & {\n connecting?: boolean;\n connected?: boolean;\n};\n\nfunction normalizeMobiusAuthToken(token: string) {\n return token.replace(/^Bearer\\s+/i, '');\n}\n\nclass MobiusSocket extends EventEmitter {\n private webex: WebexSDK;\n private config: Partial<MobiusSocketConfig>;\n private logger: MobiusSocketLogger;\n private connected: boolean;\n private connecting: boolean;\n private hasEverConnected: boolean;\n private socket: ExtendedSocket | undefined;\n private backoffCall: any; // backoff library has no types\n private shutdownSwitchoverBackoffCall: any; // backoff library has no types\n private seenAsyncEventIds: Map<string, boolean>;\n private connectPromise: Promise<void> | undefined;\n private socketUrl: string | undefined;\n private tokenRefreshTimer: NodeJS.Timeout | undefined;\n private tokenRefreshInFlight: Promise<unknown> | undefined;\n\n constructor(webex: WebexSDK, config: Partial<MobiusSocketConfig> = {}) {\n super();\n\n if (!webex) {\n throw new Error('A Webex instance is required when initializing MobiusSocket');\n }\n\n this.webex = webex;\n this.config = config;\n this.logger = (webex.logger as unknown as MobiusSocketLogger) || console;\n this.connected = false;\n this.connecting = false;\n this.hasEverConnected = false;\n this.socket = undefined;\n this.backoffCall = undefined;\n this.shutdownSwitchoverBackoffCall = undefined;\n this.seenAsyncEventIds = new Map();\n this.connectPromise = undefined;\n this.tokenRefreshTimer = undefined;\n this.tokenRefreshInFlight = undefined;\n }\n\n public off(eventName: string, listener?: (...args: unknown[]) => void) {\n if (listener) {\n return super.off(eventName, listener);\n }\n\n this.removeAllListeners(eventName);\n\n return this;\n }\n\n /**\n * Attach event listeners to a socket.\n * @param socket - The socket to attach listeners to\n */\n private attachSocketEventListeners(socket: ExtendedSocket): void {\n socket.on('close', (event: SocketCloseEvent) => this.onclose(event, socket));\n socket.on('message', (event: SocketMessageEvent<SocketResponse>) => this.onmessage(event));\n }\n\n /**\n * Tracks a newly seen async_event ID and reports whether a duplicate should be suppressed.\n * @param envelope - Parsed websocket message envelope\n * @returns True when the event has already been seen\n */\n private trackAsyncEventAndShouldSuppressDuplicate(envelope: SocketResponse): boolean {\n if (envelope?.type !== 'async_event' || !envelope.eventId) {\n return false;\n }\n\n if (this.seenAsyncEventIds.has(envelope.eventId)) {\n // Refresh recency so frequently retransmitted eventIds stay protected longer.\n // This deletion and setting again makes the data recent since javascript map maintains order as well\n const previousValue = this.seenAsyncEventIds.get(envelope.eventId) || true;\n this.seenAsyncEventIds.delete(envelope.eventId);\n this.seenAsyncEventIds.set(envelope.eventId, previousValue);\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: duplicate async_event suppressed, eventId=${envelope.eventId}`\n );\n\n return true;\n }\n\n this.logger.log(\n `${MOBIUS_SOCKET_NAMESPACE}: tracking async_event, eventId=${envelope.eventId}`\n );\n this.seenAsyncEventIds.set(envelope.eventId, true);\n\n if (\n this.config.dedupCacheMaxSize &&\n this.seenAsyncEventIds.size > this.config.dedupCacheMaxSize\n ) {\n const oldestEventId = this.seenAsyncEventIds.keys().next().value || '';\n\n this.seenAsyncEventIds.delete(oldestEventId);\n this.logger.log(\n `${MOBIUS_SOCKET_NAMESPACE}: evicted oldest async_event from dedup cache, eventId=${oldestEventId}`\n );\n }\n\n return false;\n }\n\n /**\n * Handle imminent shutdown by establishing a new connection while keeping\n * the current one alive (make-before-break).\n * Idempotent: will no-op if already in progress.\n */\n private handleImminentShutdown() {\n const oldSocket = this.socket;\n\n try {\n if (this.shutdownSwitchoverBackoffCall) {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover already in progress`);\n\n return;\n }\n\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover start`);\n\n this.connectWithBackoff(undefined, {\n isShutdownSwitchover: true,\n attemptOptions: {\n isShutdownSwitchover: true,\n onSuccess: (newSocket, webSocketUrl) => {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover connected, url: ${webSocketUrl}`\n );\n\n // Promote the new socket now that the switchover succeeded\n newSocket.connecting = false;\n newSocket.connected = true;\n this.socket = newSocket;\n this.connected = true;\n\n this.emitEvent('event:mobius_shutdown_switchover_complete', {\n url: webSocketUrl,\n });\n\n if (oldSocket) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] old socket retained; server will close with 4001`\n );\n }\n },\n },\n })\n .then(() => {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover completed successfully`\n );\n })\n .catch((err) => {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover exhausted retries; will fall back to normal reconnection: `,\n err\n );\n this.emitEvent('event:mobius_shutdown_switchover_failed', {reason: err});\n });\n } catch (e) {\n this.logger.error(`${MOBIUS_SOCKET_NAMESPACE}: [shutdown] error during switchover`, e);\n this.shutdownSwitchoverBackoffCall = undefined;\n this.emitEvent('event:mobius_shutdown_switchover_failed', {reason: e});\n }\n }\n\n /**\n * Get the websocket URL for the currently connected socket.\n * @returns The connected websocket URL, or undefined when not connected\n */\n public getConnectedWebSocketUrl(): string | undefined {\n if (!this.socket?.connected) {\n return undefined;\n }\n\n return this.socket.url;\n }\n\n /**\n * Sends a websocket request and resolves when the matching response arrives.\n * @param payload - The websocket request payload\n * @param options - Additional request options\n * @returns Promise that resolves with the socket response\n */\n public sendWssRequest(\n payload: MobiusSocketRequestPayload,\n options: MobiusSocketRequestOptions = {}\n ): Promise<SocketResponse> {\n if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {\n return Promise.reject(new Error('`payload` is required'));\n }\n\n if (!this.socket || !this.socket.connected) {\n return Promise.reject(new Error('Mobius socket is not connected'));\n }\n\n return this.socket.sendRequest(payload, {timeout: options.timeout});\n }\n\n /**\n * Check if the socket is connected.\n * @returns True if connected\n */\n public isConnected(): boolean {\n return this.connected;\n }\n\n /**\n * Connect to Mobius.\n * @param webSocketUrl - Optional websocket URL override. Falls back to the device websocket URL\n * @returns Promise that resolves when connection flow completes\n */\n public connect(webSocketUrl?: string): Promise<void> {\n if (this.connectPromise) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: connection already in progress, returning existing promise`\n );\n\n return this.connectPromise;\n }\n\n if (this.socket?.connected || this.socket?.connecting) {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: already connected, will not connect again`);\n\n return Promise.resolve();\n }\n\n // Treat a connect() call that targets a different Mobius websocket URL\n // as a fresh initial connection for retry purposes.\n if (webSocketUrl && this.socketUrl && webSocketUrl !== this.socketUrl) {\n this.hasEverConnected = false;\n }\n\n // Cache the caller-provided URL for reconnect\n if (webSocketUrl) {\n this.socketUrl = webSocketUrl;\n }\n\n this.connecting = true;\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: starting connection attempt${\n Number(this.config.initialConnectionMaxRetries) === 0 && !this.hasEverConnected\n ? ' (initial retries disabled)'\n : ''\n }`\n );\n\n const connectPromise = Promise.resolve(\n this.webex.internal.device.registered || this.webex.internal.device.register?.()\n )\n .then(() => {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: connecting`);\n\n return this.connectWithBackoff(this.socketUrl);\n })\n .finally(() => {\n this.connectPromise = undefined;\n });\n\n this.connectPromise = connectPromise;\n\n return connectPromise;\n }\n\n /**\n * Disconnect the Mobius socket.\n * @param options - Optional websocket close options (code, reason)\n * @returns Promise that resolves after disconnect cleanup and close handling complete\n */\n public disconnect(options?: MobiusSocketCloseOptions): MobiusSocketDisconnectResult {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}#disconnect: connecting state: ${this.connecting},\n connected state: ${this.connected}, socket exists: ${!!this.socket},\n options: ${JSON.stringify(options)}`\n );\n\n if (this.backoffCall) {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: aborting connection`);\n this.backoffCall.abort();\n this.backoffCall = undefined;\n }\n\n if (this.shutdownSwitchoverBackoffCall) {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: aborting shutdown switchover connection`);\n this.shutdownSwitchoverBackoffCall.abort();\n this.shutdownSwitchoverBackoffCall = undefined;\n }\n\n this.connectPromise = undefined;\n this.seenAsyncEventIds.clear();\n\n if (!this.socket) {\n this.connected = false;\n this.stopTokenRefreshTimer();\n\n return Promise.resolve();\n }\n\n this.socket.removeAllListeners('message');\n this.socket.connecting = false;\n this.socket.connected = false;\n\n return Promise.resolve(this.socket.close(options || undefined)).finally(() => {\n this.connected = false;\n this.stopTokenRefreshTimer();\n });\n }\n\n private prepareUrl(webSocketUrl: string | undefined): Promise<string> {\n if (!webSocketUrl) {\n // TODO: Circle back to this logic when mobius implements the shutdown switchover\n webSocketUrl = this.webex.internal.device.webSocketUrl || '';\n }\n\n return Promise.resolve(webSocketUrl);\n }\n\n private attemptConnection(\n socketUrl: string | undefined,\n callback: (err?: Error) => void,\n options: {\n isShutdownSwitchover?: boolean;\n attemptOptions?: {\n isShutdownSwitchover?: boolean;\n onSuccess?: ((socket: ExtendedSocket, url: string) => void) | null;\n };\n } = {}\n ): Promise<void | Error> {\n const {isShutdownSwitchover = false, attemptOptions = {}} = options;\n const {onSuccess = null} = attemptOptions;\n\n const socket = new Socket() as ExtendedSocket;\n socket.connecting = true;\n let newWSUrl: string | undefined;\n\n this.attachSocketEventListeners(socket);\n\n const backoffCall = isShutdownSwitchover\n ? this.shutdownSwitchoverBackoffCall\n : this.backoffCall;\n\n // Check appropriate backoff call based on connection type\n if (!backoffCall) {\n const mode = isShutdownSwitchover ? 'switchover backoff call' : 'backoffCall';\n const msg = `${MOBIUS_SOCKET_NAMESPACE}: prevent socket open when ${mode} no longer defined`;\n const err = new Error(msg);\n\n this.logger.info(msg);\n // Call the callback with the error before rejecting\n callback(err);\n\n return Promise.reject(err);\n }\n\n // For shutdown switchover, don't set socket yet (make-before-break)\n // For normal connection, set socket before opening to allow disconnect() to close it\n if (!isShutdownSwitchover) {\n this.socket = socket;\n }\n\n return this.prepareAndOpenSocket(socket, socketUrl, isShutdownSwitchover)\n .then((webSocketUrl) => {\n newWSUrl = webSocketUrl;\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: ${\n isShutdownSwitchover ? '[shutdown] switchover' : ''\n } connected to mobius socket, success, url: ${newWSUrl}`\n );\n\n // Custom success handler for shutdown switchover\n if (onSuccess) {\n onSuccess(socket, webSocketUrl);\n callback();\n\n return Promise.resolve();\n }\n\n // Default behavior for normal connection\n callback();\n\n return Promise.resolve();\n })\n .catch((reason) => {\n // For shutdown, simpler error handling - just callback for retry\n if (isShutdownSwitchover) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover attempt failed`,\n reason\n );\n\n return callback(reason as Error);\n }\n\n // Normal connection error handling\n const backoffCallNormal = this.backoffCall;\n // Suppress connection errors that appear to be network related (code 1006).\n if (reason.code !== 1006 && backoffCallNormal && backoffCallNormal?.getNumRetries() > 0) {\n this.emitEvent('connection_failed', reason, {\n retries: backoffCallNormal?.getNumRetries(),\n });\n }\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: connection attempt failed`,\n reason,\n backoffCallNormal?.getNumRetries() === 0 ? reason.stack : ''\n );\n\n // UnknownResponse is produced by IE for any 4XXX; treat it like a bad\n // web socket url and let WDM handle the token checking\n if (reason instanceof UnknownResponse) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: received unknown response code, refreshing device registration`\n );\n\n return this.webex.internal.device\n .refresh?.()\n .then(() => callback(reason as unknown as Error));\n }\n // NotAuthorized implies expired token\n if (reason instanceof NotAuthorized) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: received authorization error, reauthorizing`\n );\n\n return this.webex.credentials\n .refresh?.({force: true})\n .then(() => callback(reason as unknown as Error));\n }\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(\n `${MOBIUS_SOCKET_NAMESPACE}: received unrecoverable response from ${MOBIUS_SOCKET_NAMESPACE}`\n );\n backoffCallNormal?.abort();\n\n return callback(reason as unknown as Error);\n }\n\n return callback(reason as unknown as Error);\n })\n .catch((reason) => {\n this.logger.error(\n `${MOBIUS_SOCKET_NAMESPACE}: failed to handle connection failure`,\n reason\n );\n callback(reason);\n });\n }\n\n private prepareAndOpenSocket(\n socket: ExtendedSocket,\n socketUrl: string | undefined,\n isShutdownSwitchover = false\n ): Promise<string> {\n const logPrefix = isShutdownSwitchover ? '[shutdown] switchover' : 'connection';\n\n return Promise.all([this.prepareUrl(socketUrl), this.webex.credentials.getUserToken()]).then(\n ([webSocketUrl, token]) => {\n let options: any = {\n forceCloseDelay: this.config.forceCloseDelay,\n wssResponseTimeout: this.config.wssResponseTimeout,\n token: normalizeMobiusAuthToken(token.toString()),\n refreshToken: () => this.refreshToken(),\n trackingId: `${this.webex.sessionId}_${Date.now()}`,\n logger: this.logger,\n };\n\n if (this.webex.config.defaultMobiusSocketOptions) {\n const customOptionsMsg = isShutdownSwitchover\n ? 'setting custom options for switchover'\n : 'setting custom options';\n\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: ${customOptionsMsg}`);\n options = {...options, ...this.webex.config.defaultMobiusSocketOptions};\n }\n\n // Only promote the socket reference for normal connections.\n // Shutdown switchover keeps the old socket active until the new one succeeds.\n if (!isShutdownSwitchover) {\n this.socket = socket;\n }\n\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE} ${logPrefix} url: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options).then(() => webSocketUrl);\n }\n );\n }\n\n private connectWithBackoff(\n webSocketUrl: string | undefined,\n // TODO: type for context can be moved out, it's repeated\n context: {\n isShutdownSwitchover?: boolean;\n attemptOptions?: {\n isShutdownSwitchover?: boolean;\n onSuccess?: ((socket: ExtendedSocket, url: string) => void) | null;\n };\n } = {}\n ): Promise<void> {\n const {isShutdownSwitchover = false, attemptOptions = {}} = context;\n\n return new Promise((resolve, reject) => {\n let call: any;\n const isInitialConnect = !isShutdownSwitchover && !this.hasEverConnected;\n const initialRetryLimit =\n this.config.initialConnectionMaxRetries == null\n ? null\n : Number(this.config.initialConnectionMaxRetries);\n const isInitialConnectWithoutRetries = isInitialConnect && initialRetryLimit === 0;\n\n const onComplete = (err?: Error) => {\n if (isShutdownSwitchover) {\n this.shutdownSwitchoverBackoffCall = undefined;\n } else {\n this.backoffCall = undefined;\n }\n\n if (err) {\n const msg = isShutdownSwitchover\n ? `[shutdown] switchover failed after ${call.getNumRetries()} retries`\n : `failed to connect after ${call.getNumRetries()} retries`;\n\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: ${msg}; ${err}`);\n // Only mutate socket flags for normal connections.\n // During shutdown switchover, this.socket is the old live socket — don't touch it.\n if (!isShutdownSwitchover && this.socket) {\n this.socket.connecting = false;\n this.socket.connected = false;\n }\n\n return reject(err);\n }\n\n // For normal connections, mark the socket as connected.\n // Shutdown switchover promotion is handled by the onSuccess callback.\n if (!isShutdownSwitchover && this.socket) {\n this.socket.connecting = false;\n this.socket.connected = true;\n }\n\n if (!isShutdownSwitchover) {\n this.connecting = false;\n this.connected = true;\n this.hasEverConnected = true;\n this.startTokenRefreshTimer();\n this.emitEvent('online');\n }\n\n return resolve();\n };\n // eslint-disable-next-line prefer-reflect\n call = backoff.call(\n (callback: (err?: Error) => void) => {\n const attemptNum = call.getNumRetries();\n const attemptLogPrefix = isShutdownSwitchover ? '[shutdown] switchover' : 'connection';\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: executing ${attemptLogPrefix} attempt ${attemptNum}`\n );\n this.attemptConnection(webSocketUrl, callback, attemptOptions);\n },\n (err?: Error) => onComplete(err)\n );\n\n call.setStrategy(\n new backoff.ExponentialStrategy({\n initialDelay: this.config.backoffTimeReset,\n maxDelay: this.config.backoffTimeMax,\n })\n );\n\n if (isInitialConnectWithoutRetries) {\n call.retryIf(() => false);\n } else if (isInitialConnect && initialRetryLimit !== null && initialRetryLimit > 0) {\n call.failAfter(initialRetryLimit);\n } else if (this.config.maxRetries) {\n call.failAfter(this.config.maxRetries);\n }\n\n // Store backoff call reference BEFORE starting (so it's available in attemptConnection)\n if (isShutdownSwitchover) {\n this.shutdownSwitchoverBackoffCall = call;\n } else {\n this.backoffCall = call;\n }\n\n call.on('abort', () => {\n const msg = isShutdownSwitchover ? 'Shutdown Switchover' : 'Connection';\n\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: ${msg} aborted`);\n reject(new Error(`MobiusSocket ${msg} Aborted`));\n });\n\n call.on('callback', (err?: Error) => {\n if (err) {\n if (isInitialConnectWithoutRetries) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: initial connect failed; retries already disabled`\n );\n\n return;\n }\n\n const number = call.getNumRetries();\n const delay = Math.min(\n call.strategy_.nextBackoffDelay_,\n this.config.backoffTimeMax || Infinity\n );\n\n const callbackLogPrefix = isShutdownSwitchover ? '[shutdown] switchover' : '';\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: ${callbackLogPrefix} failed to connect; attempting retry ${\n number + 1\n } in ${delay} ms`\n );\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug(`${MOBIUS_SOCKET_NAMESPACE}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: connected`);\n });\n\n call.start();\n });\n }\n\n /**\n * Safely emits an event, catching and logging any errors from event handlers.\n * @param eventName - The name of the event to emit\n * @param args - Arguments to pass to event handlers\n */\n private emitEvent(eventName: string, ...args: unknown[]): void {\n try {\n if (!eventName) {\n return;\n }\n\n this.emit(eventName, ...args);\n } catch (error) {\n // Safely handle errors without causing additional issues during cleanup\n this.logger.error(\n `${MOBIUS_SOCKET_NAMESPACE}: error occurred in event handler:`,\n error,\n ' with args: ',\n [eventName, ...args]\n );\n }\n }\n\n /**\n * Starts a periodic timer to refresh the authentication token.\n * Token refresh occurs every hour while connected.\n */\n private startTokenRefreshTimer() {\n if (this.tokenRefreshTimer || !this.connected) {\n return;\n }\n\n this.tokenRefreshTimer = setInterval(() => {\n this.refreshToken().catch((error) => {\n this.logger.error(`${MOBIUS_SOCKET_NAMESPACE}: periodic token refresh failed`, error);\n });\n }, TOKEN_REFRESH_INTERVAL_MS);\n }\n\n /**\n * Stops the periodic token refresh timer.\n */\n private stopTokenRefreshTimer() {\n if (!this.tokenRefreshTimer) {\n return;\n }\n\n clearInterval(this.tokenRefreshTimer);\n this.tokenRefreshTimer = undefined;\n }\n\n /**\n * Refreshes the authentication token and re-authenticates the socket connection.\n * @returns Promise that resolves when token refresh and re-authentication complete\n */\n private refreshToken(): Promise<unknown> {\n if (this.tokenRefreshInFlight) {\n return this.tokenRefreshInFlight;\n }\n\n if (!this.connected) {\n this.stopTokenRefreshTimer();\n\n return Promise.resolve();\n }\n\n const tokenPromise = this.webex.credentials.canRefresh\n ? this.webex.credentials\n .refresh?.({force: true})\n ?.then(() => this.webex.credentials.getUserToken())\n : this.webex.credentials.getUserToken();\n\n this.tokenRefreshInFlight = tokenPromise!\n .then((token) => {\n if (!token) {\n throw new Error('Mobius token refresh did not return a token');\n }\n const refreshedToken = normalizeMobiusAuthToken(token.toString());\n\n if (!this.socket?.connected) {\n this.logger.warn(\n `${MOBIUS_SOCKET_NAMESPACE}: socket is not connected, skipping token refresh`\n );\n\n return undefined;\n }\n\n return this.socket!.refresh(refreshedToken);\n })\n .catch((error) => {\n this.logger.error(\n `${MOBIUS_SOCKET_NAMESPACE}: failed to refresh/re-auth Mobius socket`,\n error\n );\n\n throw error;\n })\n .finally(() => {\n this.tokenRefreshInFlight = undefined;\n });\n\n return this.tokenRefreshInFlight;\n }\n\n private onclose(event: SocketCloseEvent, sourceSocket: ExtendedSocket): void {\n // I don't see any way to avoid the complexity or statement count in here.\n /* eslint complexity: [0] */\n\n try {\n const reason = event.reason && event.reason.toLowerCase();\n let socketUrl: string | undefined;\n\n const isActiveSocket = sourceSocket === this.socket;\n if (sourceSocket) {\n socketUrl = sourceSocket.url;\n }\n\n // Only tear down state if the currently active socket closed\n if (isActiveSocket) {\n if (this.socket) {\n this.socket.removeAllListeners();\n this.socket = undefined;\n this.emitEvent('offline', event);\n }\n this.connecting = false;\n this.connected = false;\n this.stopTokenRefreshTimer();\n } else {\n // Old socket closed; do not flip connection state\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] non-active socket closed, code=${event.code}`\n );\n // Clean up listeners from old socket now that it's closed\n if (sourceSocket) {\n sourceSocket.removeAllListeners();\n }\n }\n\n switch (event.code) {\n case 1003:\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: service rejected last message; will not reconnect: ${event.reason}`\n );\n if (isActiveSocket) this.emitEvent('offline.permanent', event);\n break;\n case 4000:\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: socket replaced; will not reconnect`);\n if (isActiveSocket) this.emitEvent('offline.replaced', event);\n break;\n case 4001:\n // replaced during shutdown\n if (isActiveSocket) {\n // Server closed active socket with 4001, meaning it expected this connection\n // to be replaced, but the switchover in handleImminentShutdown failed.\n this.logger.warn(\n `${MOBIUS_SOCKET_NAMESPACE}: active socket closed with 4001; shutdown switchover failed`\n );\n this.emitEvent('offline.permanent', event);\n } else {\n // Expected: old socket closed after successful switchover\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: old socket closed with 4001 (replaced during shutdown); no reconnect needed`\n );\n this.emitEvent('offline.replaced', event);\n }\n break;\n case 1001:\n case 1005:\n case 1006:\n case 1011:\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: socket disconnected; reconnecting`);\n if (isActiveSocket) {\n this.emitEvent('offline.transient', event);\n this.reconnect(socketUrl);\n }\n break;\n case 1000:\n case 3050:\n if (reason && normalReconnectReasons.includes(reason)) {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: socket disconnected; reconnecting`);\n if (isActiveSocket) {\n this.emitEvent('offline.transient', event);\n this.reconnect(socketUrl);\n }\n } else {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: socket disconnected; will not reconnect: ${event.reason}`\n );\n if (isActiveSocket) this.emitEvent('offline.permanent', event);\n }\n break;\n default:\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: socket disconnected unexpectedly; will not reconnect`\n );\n if (isActiveSocket) this.emitEvent('offline.permanent', event);\n }\n } catch (error) {\n this.logger.error(`${MOBIUS_SOCKET_NAMESPACE}: error occurred in close handler`, error);\n }\n }\n\n private onmessage(event: SocketMessageEvent<SocketResponse>): Promise<void> {\n const envelope = event.data;\n\n if (process.env.ENABLE_MOBIUS_LOGGING) {\n this.logger.debug(`${MOBIUS_SOCKET_NAMESPACE}: message envelope: `, envelope);\n }\n\n // Handle shutdown message shape: { type: 'shutdown' }\n if (envelope && envelope.type === 'shutdown') {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: [shutdown] imminent shutdown message received`);\n this.emitEvent('event:mobius_shutdown_imminent', envelope); // This is not yet not implemented, keeping for future support\n\n this.handleImminentShutdown();\n\n return Promise.resolve();\n }\n\n if (this.trackAsyncEventAndShouldSuppressDuplicate(envelope)) {\n return Promise.resolve();\n }\n\n // Emit event:<type> for typed messages (e.g., register.response)\n if (envelope.type) {\n this.emitEvent(`event:${envelope.type}`, envelope);\n }\n\n // Use data/payload if present, otherwise treat the envelope itself as the data (flat format)\n const data: SocketResponse = (envelope.data as SocketResponse) || envelope;\n\n // Support both Mobius-enveloped (data.eventType) and flat (eventType) formats\n const eventType: string | undefined =\n (data?.eventType as string) || (envelope.eventType as string);\n\n if (!eventType) {\n this.emitEvent('event', envelope);\n\n return Promise.resolve();\n }\n\n try {\n // TODO: Remove if event:namespace is not required\n this.emitEvent('event', envelope);\n const [namespace] = eventType.split('.');\n this.emitEvent(`event:${namespace}`, envelope);\n\n if (namespace !== eventType) {\n this.emitEvent(`event:${eventType}`, envelope);\n }\n } catch (reason) {\n this.logger.error(\n `${MOBIUS_SOCKET_NAMESPACE}: error occurred processing socket message`,\n reason\n );\n }\n\n return Promise.resolve();\n }\n\n private reconnect(webSocketUrl: string | undefined): Promise<void> {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: reconnecting`);\n\n return this.connect(webSocketUrl || this.socketUrl);\n }\n}\n\nexport default MobiusSocket;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1638,9 +1638,11 @@ describe('plugin-mobius-socket', function () {
|
|
|
1638
1638
|
_context23.next = 1;
|
|
1639
1639
|
return mobiusSocket.attemptConnection('ws://test.com', callback, {
|
|
1640
1640
|
isShutdownSwitchover: true,
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1641
|
+
attemptOptions: {
|
|
1642
|
+
onSuccess: function onSuccess(newSocket, url) {
|
|
1643
|
+
_testHelperChai.assert.exists(newSocket);
|
|
1644
|
+
_testHelperChai.assert.equal(url, 'ws://new-socket.com');
|
|
1645
|
+
}
|
|
1644
1646
|
}
|
|
1645
1647
|
});
|
|
1646
1648
|
case 1:
|
|
@@ -1661,7 +1663,9 @@ describe('plugin-mobius-socket', function () {
|
|
|
1661
1663
|
_context24.next = 1;
|
|
1662
1664
|
return mobiusSocket.attemptConnection('ws://test.com', callback, {
|
|
1663
1665
|
isShutdownSwitchover: true,
|
|
1664
|
-
|
|
1666
|
+
attemptOptions: {
|
|
1667
|
+
onSuccess: onSuccessStub
|
|
1668
|
+
}
|
|
1665
1669
|
});
|
|
1666
1670
|
case 1:
|
|
1667
1671
|
_testHelperChai.assert.calledOnce(onSuccessStub);
|
|
@@ -1679,12 +1683,14 @@ describe('plugin-mobius-socket', function () {
|
|
|
1679
1683
|
_context25.next = 1;
|
|
1680
1684
|
return mobiusSocket.attemptConnection('ws://test.com', callback, {
|
|
1681
1685
|
isShutdownSwitchover: true,
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1686
|
+
attemptOptions: {
|
|
1687
|
+
onSuccess: function onSuccess(newSocket, url) {
|
|
1688
|
+
mobiusSocket.socket = newSocket;
|
|
1689
|
+
mobiusSocket.connected = true;
|
|
1690
|
+
mobiusSocket.emitEvent('event:mobius_shutdown_switchover_complete', {
|
|
1691
|
+
url: url
|
|
1692
|
+
});
|
|
1693
|
+
}
|
|
1688
1694
|
}
|
|
1689
1695
|
});
|
|
1690
1696
|
case 1:
|
|
@@ -1702,7 +1708,8 @@ describe('plugin-mobius-socket', function () {
|
|
|
1702
1708
|
prepareAndOpenSocketStub.returns(_promise.default.reject(new Error('Connection failed')));
|
|
1703
1709
|
_context26.next = 1;
|
|
1704
1710
|
return mobiusSocket.attemptConnection('ws://test.com', callback, {
|
|
1705
|
-
isShutdownSwitchover: true
|
|
1711
|
+
isShutdownSwitchover: true,
|
|
1712
|
+
attemptOptions: {}
|
|
1706
1713
|
}).catch(function () {});
|
|
1707
1714
|
case 1:
|
|
1708
1715
|
_testHelperChai.assert.calledOnce(callback);
|