@webex/calling 3.12.0-mobius-socket.10 → 3.12.0-mobius-socket.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/CallingClient/CallingClient.test.js +2 -2
  2. package/dist/CallingClient/CallingClient.test.js.map +1 -1
  3. package/dist/CallingClient/calling/call.test.js +1 -1
  4. package/dist/CallingClient/calling/call.test.js.map +1 -1
  5. package/dist/CallingClient/line/line.test.js +2 -2
  6. package/dist/CallingClient/line/line.test.js.map +1 -1
  7. package/dist/CallingClient/registration/register.js +76 -43
  8. package/dist/CallingClient/registration/register.js.map +1 -1
  9. package/dist/CallingClient/registration/register.test.js +1 -1
  10. package/dist/CallingClient/registration/register.test.js.map +1 -1
  11. package/dist/CallingClient/registration/types.js.map +1 -1
  12. package/dist/CallingClient/utils/request.js +2 -2
  13. package/dist/CallingClient/utils/request.js.map +1 -1
  14. package/dist/common/Utils.js +70 -30
  15. package/dist/common/Utils.js.map +1 -1
  16. package/dist/mobius-socket/config.js +61 -0
  17. package/dist/mobius-socket/config.js.map +1 -0
  18. package/dist/mobius-socket/errors.js +106 -0
  19. package/dist/mobius-socket/errors.js.map +1 -0
  20. package/dist/mobius-socket/index.js +101 -0
  21. package/dist/mobius-socket/index.js.map +1 -0
  22. package/dist/mobius-socket/mobius-socket-events.test.js +511 -0
  23. package/dist/mobius-socket/mobius-socket-events.test.js.map +1 -0
  24. package/dist/mobius-socket/mobius-socket.js +1191 -0
  25. package/dist/mobius-socket/mobius-socket.js.map +1 -0
  26. package/dist/mobius-socket/mobius-socket.test.js +2107 -0
  27. package/dist/mobius-socket/mobius-socket.test.js.map +1 -0
  28. package/dist/mobius-socket/socket/constants.js +20 -0
  29. package/dist/mobius-socket/socket/constants.js.map +1 -0
  30. package/dist/mobius-socket/socket/index.js +15 -0
  31. package/dist/mobius-socket/socket/index.js.map +1 -0
  32. package/dist/mobius-socket/socket/socket-base.js +632 -0
  33. package/dist/mobius-socket/socket/socket-base.js.map +1 -0
  34. package/dist/mobius-socket/socket/socket.js +19 -0
  35. package/dist/mobius-socket/socket/socket.js.map +1 -0
  36. package/dist/mobius-socket/socket/socket.shim.js +36 -0
  37. package/dist/mobius-socket/socket/socket.shim.js.map +1 -0
  38. package/dist/mobius-socket/socket.test.js +752 -0
  39. package/dist/mobius-socket/socket.test.js.map +1 -0
  40. package/dist/mobius-socket/test/mocha-helpers.js +23 -0
  41. package/dist/mobius-socket/test/mocha-helpers.js.map +1 -0
  42. package/dist/mobius-socket/test/promise-tick.js +29 -0
  43. package/dist/mobius-socket/test/promise-tick.js.map +1 -0
  44. package/dist/module/CallingClient/registration/register.js +30 -7
  45. package/dist/module/CallingClient/utils/request.js +1 -1
  46. package/dist/module/common/Utils.js +17 -4
  47. package/dist/module/mobius-socket/config.js +18 -0
  48. package/dist/module/mobius-socket/errors.js +30 -0
  49. package/dist/module/mobius-socket/index.js +24 -0
  50. package/dist/module/mobius-socket/mobius-socket.js +761 -0
  51. package/dist/module/mobius-socket/socket/constants.js +10 -0
  52. package/dist/module/mobius-socket/socket/index.js +4 -0
  53. package/dist/module/mobius-socket/socket/socket-base.js +374 -0
  54. package/dist/module/mobius-socket/socket/socket.js +9 -0
  55. package/dist/module/mobius-socket/socket/socket.shim.js +24 -0
  56. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  57. package/dist/types/CallingClient/registration/types.d.ts +1 -1
  58. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  59. package/dist/types/common/Utils.d.ts +4 -1
  60. package/dist/types/common/Utils.d.ts.map +1 -1
  61. package/dist/types/mobius-socket/config.d.ts +15 -0
  62. package/dist/types/mobius-socket/config.d.ts.map +1 -0
  63. package/dist/types/mobius-socket/errors.d.ts +13 -0
  64. package/dist/types/mobius-socket/errors.d.ts.map +1 -0
  65. package/dist/types/mobius-socket/index.d.ts +9 -0
  66. package/dist/types/mobius-socket/index.d.ts.map +1 -0
  67. package/dist/types/mobius-socket/mobius-socket.d.ts +62 -0
  68. package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -0
  69. package/dist/types/mobius-socket/socket/constants.d.ts +11 -0
  70. package/dist/types/mobius-socket/socket/constants.d.ts.map +1 -0
  71. package/dist/types/mobius-socket/socket/index.d.ts +2 -0
  72. package/dist/types/mobius-socket/socket/index.d.ts.map +1 -0
  73. package/dist/types/mobius-socket/socket/socket-base.d.ts +38 -0
  74. package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -0
  75. package/dist/types/mobius-socket/socket/socket.d.ts +3 -0
  76. package/dist/types/mobius-socket/socket/socket.d.ts.map +1 -0
  77. package/dist/types/mobius-socket/socket/socket.shim.d.ts +3 -0
  78. package/dist/types/mobius-socket/socket/socket.shim.d.ts.map +1 -0
  79. package/package.json +16 -3
  80. package/src/mobius-socket/socket/socket.js +13 -0
  81. package/src/mobius-socket/socket/socket.shim.js +31 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_crypto","require","_sinon","_interopRequireDefault","_testHelperChai","_testHelperMockWebex","_testHelperMockWebSocket","_index","_interopRequireWildcard","_mochaHelpers","_constants","_promiseTick","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t3","hasOwnProperty","call","_Object$defineProperty2","_Object$getOwnPropertyDescriptor","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","crypto","randomUUID","_defineProperty3","value","configurable","describe","createUuid","afterEach","resetMobiusSocketInstance","it","configuredWebex","MockWebex","instance","getMobiusSocketInstance","assert","instanceOf","MobiusSocket","equal","config","mobiusConfig","mobiusSocket","consumerConfig","initialConnectionMaxRetries","backoffTimeReset","mockWebSocket","socketOpenStub","usingFakeTimers","webex","statusStartTypingMessage","_stringify","id","data","eventType","actor","conversationId","timestamp","_now","trackingId","concat","emitAuthResponse","_ref","undefined","_ref$statusCode","statusCode","_ref$statusMessage","statusMessage","authRequest","JSON","parse","send","lastCall","args","emit","type","subtype","MESSAGE_TYPES","AUTH","createAsyncEvent","eventId","createSessionSocket","close","sinon","stub","returns","_promise","resolve","removeAllListeners","countGenericEventEmits","emitSpy","sessionId","getCalls","beforeEach","jest","useFakeTimers","doNotFake","credentials","refresh","getUserToken","toString","internal","device","registered","register","webSocketUrl","getWebSocketUrl","useServiceCatalogUrl","services","convertUrlToPriorityHostUrl","markFailedUrl","switchActiveClusterIds","invalidateCache","isValidHost","metrics","submitClientMetrics","logger","console","Socket","callsFake","_len","Array","_key","_construct2","MockWebSocket","origOpen","prototype","open","_len2","_key2","promise","_apply","process","nextTick","defaultSessionId","_asyncToGenerator2","_regenerator","mark","_callee","_t","wrap","_context","prev","next","useRealTimers","disconnectAll","_connectPromises","clear","restore","getWebSocketConstructor","setTimeout","stop","notCalled","connect","then","calledOnce","feature","updateFeature","envelope","featureToggle","isFalse","connected","isTrue","connecting","calledWith","match","any","calledOnceWithExactly","activeClusterEventEnvelope","activeClusters","wdm","u2cInvalidateEventEnvelope","check","reject","ConnectionError","promiseTick","advanceTimersByTime","calledTwice","calledThrice","isRejected","skipInBrowser","maxRetries","hasEverConnected","all","code","onCall","BadRequest","UnknownResponse","called","NotAuthorized","Forbidden","backoffSpy","spy","_backoffSpy$firstCall","isUndefined","firstCall","_backoffSpy$firstCall2","socketUrl","defaultMobiusSocketOptions","testProxyUrl","agent","proxy","href","logout","info","getCall","beforeLogoutOptionsCloseReason","reason","disconnect","on","readyState","_callee2","_context2","isDefined","backoffCalls","socket","getLastError","_attemptConnection","_reason","message","realError","Error","_callee3","error","lastError","_context3","sent","wssResponseTimeout","_callee4","requestPromise","requestPayload","response","_context4","sendWssRequest","token","_callee5","authPayload","_context5","_callee6","_context6","name","_callee7","_context7","_callee8","_context8","_callee9","_context9","_callee0","_context0","sockets","url","getConnectedWebSocketUrl","event","_emit","res","lastSeenActivityDate","lastReadableActivityDate","headers","activity","_applyOverrides","target","wsWriteTimestamp","mercuryTimeOffset","_setTimeOffset","invalidTimestamps","invalidTimestamp","_prepareUrl","wsUrl","connectWithBackoffStub","_shutdownSwitchoverBackoffCalls","placeholder","_handleImminentShutdown","callArgs","isObject","isShutdownSwitchover","attemptOptions","done","throws","switchoverCall","_connectWithBackoff","shutdownEvent","result","_onmessage","regularEvent","someField","sequenceNumber","_callee1","_context1","originalDedupCacheMaxSize","dedupCacheMaxSize","_callee10","_context10","_callee11","_context11","_callee12","_context12","_callee13","_context13","_getEventHandlers","deepEqual","mockSocket","anotherSocket","_reconnect","closeEvent","_onclose","strictEqual","resetHistory","switchoverBackoffCall","isOk","_callee14","emitCalls","hasCompleteEvent","_context14","sid","context","onSuccess","some","_callee15","testError","hasFailureEvent","_context15","_callee16","_context16","callCount","prepareUrlStub","getUserTokenStub","_callee17","_context17","_prepareAndOpenSocket","_callee18","_context18","forceCloseDelay","_callee19","_context19","_callee20","_context20","_callee21","_context21","customOption","_callee22","_context22","_callee23","_t2","_context23","fail","prepareAndOpenSocketStub","callback","abort","_attachSocketEventListeners","_callee24","originalSocket","_context24","newSocket","_callee25","onSuccessStub","_context25","_callee26","_context26","_callee27","_context27","catch","err","attemptStub","cb","abortStub","_callee28","_context28","_callee29","_context29"],"sources":["mobius-socket.test.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {randomUUID} from 'crypto';\nimport sinon from 'sinon';\nimport {assert} from '@webex/test-helper-chai';\nimport MockWebex from '@webex/test-helper-mock-webex';\nimport MockWebSocket from '@webex/test-helper-mock-web-socket';\nimport MobiusSocket, {\n getMobiusSocketInstance,\n resetMobiusSocketInstance,\n BadRequest,\n NotAuthorized,\n Forbidden,\n UnknownResponse,\n // NotFound,\n config as mobiusConfig,\n ConnectionError,\n Socket,\n} from './index';\nimport {skipInBrowser} from './test/mocha-helpers';\nimport {MESSAGE_TYPES} from './socket/constants';\n\nimport promiseTick from './test/promise-tick';\n\nif (!crypto.randomUUID) {\n Object.defineProperty(crypto, 'randomUUID', {\n value: randomUUID,\n configurable: true,\n });\n}\n\ndescribe('plugin-mobius-socket', () => {\n const createUuid = () => crypto.randomUUID();\n\n describe('getMobiusSocketInstance', () => {\n afterEach(() => {\n resetMobiusSocketInstance();\n });\n\n it('uses package config when consumer config is not provided', () => {\n const configuredWebex = new MockWebex();\n const instance = getMobiusSocketInstance(configuredWebex);\n\n assert.instanceOf(instance, MobiusSocket);\n assert.equal(instance.config, mobiusConfig.mobiusSocket);\n });\n\n it('uses consumer config when it is provided', () => {\n const configuredWebex = new MockWebex();\n const consumerConfig = {\n initialConnectionMaxRetries: 0,\n backoffTimeReset: 1234,\n };\n\n const instance = getMobiusSocketInstance(configuredWebex, consumerConfig);\n\n assert.instanceOf(instance, MobiusSocket);\n assert.equal(instance.config, consumerConfig);\n });\n });\n\n describe('MobiusSocket', () => {\n let mobiusSocket;\n let mockWebSocket;\n let socketOpenStub;\n let usingFakeTimers;\n let webex;\n\n const statusStartTypingMessage = JSON.stringify({\n id: createUuid(),\n data: {\n eventType: 'status.start_typing',\n actor: {\n id: 'actorId',\n },\n conversationId: createUuid(),\n },\n timestamp: Date.now(),\n trackingId: `suffix_${createUuid()}_${Date.now()}`,\n });\n\n const emitAuthResponse = ({statusCode = 200, statusMessage = 'OK'} = {}) => {\n const authRequest = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: MESSAGE_TYPES.AUTH,\n trackingId: authRequest.trackingId,\n statusCode,\n statusMessage,\n }),\n });\n };\n\n const createAsyncEvent = (eventId, eventType = 'custom.event') => ({\n data: {\n type: 'async_event',\n eventId,\n data: {\n eventType,\n },\n },\n });\n\n const createSessionSocket = () => ({\n close: sinon.stub().returns(Promise.resolve()),\n removeAllListeners: sinon.stub(),\n });\n\n const countGenericEventEmits = (emitSpy, sessionId) =>\n emitSpy.getCalls().filter((call) => call.args[0] === sessionId && call.args[1] === 'event')\n .length;\n\n beforeEach(() => {\n jest.useFakeTimers({doNotFake: ['nextTick']});\n usingFakeTimers = true;\n });\n\n beforeEach(() => {\n webex = new MockWebex();\n webex.credentials = {\n refresh: sinon.stub().returns(Promise.resolve()),\n getUserToken: sinon.stub().returns(\n Promise.resolve({\n toString() {\n return 'Bearer FAKE';\n },\n })\n ),\n };\n webex.internal.device = {\n registered: true,\n register: sinon.stub().returns(Promise.resolve()),\n refresh: sinon.stub().returns(Promise.resolve()),\n webSocketUrl: 'ws://example.com',\n getWebSocketUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),\n useServiceCatalogUrl: sinon\n .stub()\n .returns(Promise.resolve('https://service-catalog-url.com')),\n };\n webex.internal.services = {\n convertUrlToPriorityHostUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),\n markFailedUrl: sinon.stub().returns(Promise.resolve()),\n switchActiveClusterIds: sinon.stub(),\n invalidateCache: sinon.stub(),\n isValidHost: sinon.stub().returns(Promise.resolve(true)),\n };\n webex.internal.metrics.submitClientMetrics = sinon.stub();\n webex.trackingId = 'fakeTrackingId';\n webex.logger = console;\n\n sinon.stub(Socket, 'getWebSocketConstructor').callsFake(\n () =>\n function (...args) {\n mockWebSocket = new MockWebSocket(...args);\n\n return mockWebSocket;\n }\n );\n\n const origOpen = Socket.prototype.open;\n\n socketOpenStub = sinon.stub(Socket.prototype, 'open').callsFake(function (...args) {\n const promise = Reflect.apply(origOpen, this, args);\n\n process.nextTick(() => {\n mockWebSocket.open();\n // Simulate Mobius auth response after socket open\n process.nextTick(() => {\n emitAuthResponse();\n });\n });\n\n return promise;\n });\n\n mobiusSocket = new MobiusSocket(webex, {...mobiusConfig.mobiusSocket});\n mobiusSocket.defaultSessionId = 'mobius-websocket-session';\n });\n\n afterEach(async () => {\n if (usingFakeTimers) {\n jest.useRealTimers();\n usingFakeTimers = false;\n }\n\n // Clean up MobiusSocket connections and internal state\n if (mobiusSocket) {\n try {\n await mobiusSocket.disconnectAll();\n } catch (e) {\n // Ignore cleanup errors\n }\n // Clear any remaining connection promises\n if (mobiusSocket._connectPromises) {\n mobiusSocket._connectPromises.clear();\n }\n }\n\n // Ensure mock socket is properly closed\n if (mockWebSocket && typeof mockWebSocket.close === 'function') {\n try {\n mockWebSocket.close();\n } catch (e) {\n // Ignore cleanup errors\n }\n }\n\n if (socketOpenStub) {\n socketOpenStub.restore();\n }\n\n if (Socket.getWebSocketConstructor.restore) {\n Socket.getWebSocketConstructor.restore();\n }\n\n // Small delay to ensure all async operations complete\n await new Promise((resolve) => setTimeout(resolve, 10));\n });\n\n describe('#connect()', () => {\n it('lazily registers the device', () => {\n webex.internal.device.registered = false;\n assert.notCalled(webex.internal.device.register);\n const promise = mobiusSocket.connect();\n\n return promise.then(() => {\n assert.calledOnce(webex.internal.device.register);\n });\n });\n\n it('connects to MobiusSocket using default url', () => {\n webex.internal.feature.updateFeature = sinon.stub();\n const promise = mobiusSocket.connect();\n const envelope = {\n data: {\n featureToggle: {\n 'feature-name': true,\n },\n },\n };\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.calledWith(socketOpenStub, 'ws://example.com', sinon.match.any);\n mobiusSocket.emit('event:featureToggle_update', envelope);\n assert.calledOnceWithExactly(\n webex.internal.feature.updateFeature,\n envelope.data.featureToggle\n );\n sinon.restore();\n });\n });\n\n it('connects to MobiusSocket but does not call updateFeature', () => {\n webex.internal.feature.updateFeature = sinon.stub();\n const promise = mobiusSocket.connect();\n const envelope = {};\n\n return promise.then(() => {\n mobiusSocket.emit('event:featureToggle_update', envelope);\n assert.notCalled(webex.internal.feature.updateFeature);\n sinon.restore();\n });\n });\n it('MobiusSocket emit event:ActiveClusterStatusEvent, call services switchActiveClusterIds', () => {\n const promise = mobiusSocket.connect();\n const activeClusterEventEnvelope = {\n data: {\n activeClusters: {\n wdm: 'wdm-cluster-id.com',\n },\n },\n };\n mockWebSocket.open();\n\n return promise.then(() => {\n mobiusSocket.emit('event:ActiveClusterStatusEvent', activeClusterEventEnvelope);\n assert.calledOnceWithExactly(\n webex.internal.services.switchActiveClusterIds,\n activeClusterEventEnvelope.data.activeClusters\n );\n sinon.restore();\n });\n });\n it('MobiusSocket emit event:ActiveClusterStatusEvent with no data, not call services switchActiveClusterIds', () => {\n webex.internal.feature.updateFeature = sinon.stub();\n const promise = mobiusSocket.connect();\n const envelope = {};\n\n return promise.then(() => {\n mobiusSocket.emit('event:ActiveClusterStatusEvent', envelope);\n assert.notCalled(webex.internal.services.switchActiveClusterIds);\n sinon.restore();\n });\n });\n it('MobiusSocket emit event:u2c.cache-invalidation, call services invalidateCache', () => {\n const promise = mobiusSocket.connect();\n const u2cInvalidateEventEnvelope = {\n data: {\n timestamp: '1759289614',\n },\n };\n\n mockWebSocket.open();\n\n return promise.then(() => {\n mobiusSocket.emit('event:u2c.cache-invalidation', u2cInvalidateEventEnvelope);\n assert.calledOnceWithExactly(\n webex.internal.services.invalidateCache,\n u2cInvalidateEventEnvelope.data.timestamp\n );\n sinon.restore();\n });\n });\n it('MobiusSocket emit event:u2c.cache-invalidation with no data, not call services switchActiveClusterIds', () => {\n webex.internal.feature.updateFeature = sinon.stub();\n const promise = mobiusSocket.connect();\n const envelope = {};\n\n return promise.then(() => {\n mobiusSocket.emit('event:u2c.cache-invalidation', envelope);\n assert.notCalled(webex.internal.services.invalidateCache);\n sinon.restore();\n });\n });\n\n describe('when `maxRetries` is set', () => {\n const check = () => {\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.returns(Promise.reject(new ConnectionError()));\n assert.notCalled(Socket.prototype.open);\n\n const promise = mobiusSocket.connect();\n\n return promiseTick(5)\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n\n return promiseTick(5);\n })\n .then(() => {\n jest.advanceTimersByTime(mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledTwice(Socket.prototype.open);\n jest.advanceTimersByTime(2 * mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n jest.advanceTimersByTime(5 * mobiusSocket.config.backoffTimeReset);\n\n return assert.isRejected(promise);\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n });\n };\n\n // skipping due to apparent bug with lolex in all browsers but Chrome.\n skipInBrowser(it)('fails after configured `initialConnectionMaxRetries` attempts', () => {\n mobiusSocket.config.maxRetries = 0;\n mobiusSocket.config.initialConnectionMaxRetries = 2;\n\n return check();\n });\n\n // skipping due to apparent bug with lolex in all browsers but Chrome.\n // if initial retries is zero and mobiusSocket has never connected, do not retry\n skipInBrowser(it)('fails immediately when `initialConnectionMaxRetries` is 0', () => {\n mobiusSocket.config.maxRetries = 2;\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.returns(Promise.reject(new ConnectionError()));\n assert.notCalled(Socket.prototype.open);\n\n const promise = mobiusSocket.connect();\n\n return promiseTick(5)\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n\n return assert.isRejected(promise);\n })\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n });\n });\n\n // initial retries is non-zero so takes precedence over maxRetries when mobiusSocket has never connected\n skipInBrowser(it)('fails after `initialConnectionMaxRetries` attempts', () => {\n mobiusSocket.config.maxRetries = 0;\n mobiusSocket.config.initialConnectionMaxRetries = 2;\n\n return check();\n });\n\n // initial retries is non-zero so takes precedence over maxRetries when mobiusSocket has never connected\n skipInBrowser(it)('fails after `initialConnectionMaxRetries` attempts', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 2;\n mobiusSocket.config.maxRetries = 5;\n\n return check();\n });\n\n // when mobiusSocket has connected maxRetries is used and the initialConnectionMaxRetries is ignored\n skipInBrowser(it)('fails after `initialConnectionMaxRetries` attempts', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 5;\n mobiusSocket.config.maxRetries = 2;\n mobiusSocket.hasEverConnected = true;\n\n return check();\n });\n });\n\n it('can safely be called multiple times', () => {\n const promise = Promise.all([\n mobiusSocket.connect(),\n mobiusSocket.connect(),\n mobiusSocket.connect(),\n mobiusSocket.connect(),\n ]);\n\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.calledOnce(Socket.prototype.open);\n });\n });\n\n // skipping due to apparent bug with lolex in all browsers but Chrome.\n skipInBrowser(describe)('when the connection fails', () => {\n it('backs off exponentially', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 2;\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.returns(Promise.reject(new ConnectionError({code: 4001})));\n // Note: onCall is zero-based\n socketOpenStub.onCall(2).returns(Promise.resolve(new MockWebSocket()));\n assert.notCalled(Socket.prototype.open);\n\n const promise = mobiusSocket.connect();\n\n return promiseTick(5)\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n\n // I'm not sure why, but it's important the clock doesn't advance\n // until a tick happens\n return promiseTick(5);\n })\n .then(() => {\n jest.advanceTimersByTime(mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledTwice(Socket.prototype.open);\n jest.advanceTimersByTime(2 * mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n jest.advanceTimersByTime(5 * mobiusSocket.config.backoffTimeReset);\n\n return promise;\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n jest.advanceTimersByTime(8 * mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(5);\n })\n .then(() => {\n assert.calledThrice(Socket.prototype.open);\n });\n });\n\n describe('with `BadRequest`', () => {\n it('fails permanently', () => {\n jest.useRealTimers();\n usingFakeTimers = false;\n socketOpenStub.restore();\n socketOpenStub = sinon\n .stub(Socket.prototype, 'open')\n .returns(Promise.reject(new BadRequest({code: 4400})));\n\n return assert.isRejected(mobiusSocket.connect());\n });\n });\n\n describe('with `UnknownResponse`', () => {\n it('triggers a device refresh', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 1;\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open').returns(Promise.resolve());\n socketOpenStub.onCall(0).returns(Promise.reject(new UnknownResponse({code: 4444})));\n assert.notCalled(webex.credentials.refresh);\n assert.notCalled(webex.internal.device.refresh);\n const promise = mobiusSocket.connect();\n\n return promiseTick(7).then(() => {\n assert.notCalled(webex.credentials.refresh);\n assert.called(webex.internal.device.refresh);\n jest.advanceTimersByTime(1000);\n\n return promise;\n });\n });\n });\n\n describe('with `NotAuthorized`', () => {\n it('triggers a token refresh', () => {\n mobiusSocket.config.initialConnectionMaxRetries = 1;\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open').returns(Promise.resolve());\n socketOpenStub.onCall(0).returns(Promise.reject(new NotAuthorized({code: 4401})));\n assert.notCalled(webex.credentials.refresh);\n assert.notCalled(webex.internal.device.refresh);\n const promise = mobiusSocket.connect();\n\n return promiseTick(7).then(() => {\n assert.called(webex.credentials.refresh);\n assert.notCalled(webex.internal.device.refresh);\n jest.advanceTimersByTime(1000);\n\n return promise;\n });\n });\n });\n\n describe('with `Forbidden`', () => {\n it('fails permanently', () => {\n jest.useRealTimers();\n usingFakeTimers = false;\n socketOpenStub.restore();\n socketOpenStub = sinon\n .stub(Socket.prototype, 'open')\n .returns(Promise.reject(new Forbidden({code: 4403})));\n\n return assert.isRejected(mobiusSocket.connect());\n });\n });\n\n // describe(`with \\`NotFound\\``, () => {\n // it(`triggers a device refresh`, () => {\n // socketOpenStub.restore();\n // socketOpenStub = sinon.stub(Socket.prototype, `open`).returns(Promise.resolve());\n // socketOpenStub.onCall(0).returns(Promise.reject(new NotFound({code: 4404})));\n // assert.notCalled(webex.credentials.refresh);\n // assert.notCalled(webex.internal.device.refresh);\n // const promise = mobiusSocket.connect();\n // return promiseTick(6)\n // .then(() => {\n // assert.notCalled(webex.credentials.refresh);\n // assert.called(webex.internal.device.refresh);\n // clock.tick(1000);\n // return assert.isFulfilled(promise);\n // });\n // });\n // });\n });\n\n describe('when connected', () => {\n it('resolves immediately', () =>\n mobiusSocket.connect().then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n const promise = mobiusSocket.connect();\n\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n\n return promise;\n }));\n\n // skipping due to apparent bug with lolex in all browsers but Chrome.\n skipInBrowser(it)('does not continue attempting to connect', () => {\n const promise = mobiusSocket.connect();\n\n // Wait for the connection to be established before proceeding\n mockWebSocket.open();\n\n return promise.then(() =>\n promiseTick(2)\n .then(() => {\n jest.advanceTimersByTime(6 * mobiusSocket.config.backoffTimeReset);\n\n return promiseTick(2);\n })\n .then(() => {\n assert.calledOnce(Socket.prototype.open);\n })\n );\n });\n });\n\n describe('when webSocketUrl is provided', () => {\n it('connects to MobiusSocket with provided url', () => {\n const webSocketUrl = 'ws://providedurl.com';\n const promise = mobiusSocket.connect(webSocketUrl);\n\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.calledWith(Socket.prototype.open, 'ws://providedurl.com', sinon.match.any);\n });\n });\n });\n\n describe('when config.initialConnectionMaxRetries is set to 0', () => {\n it('connects successfully through the shared backoff flow', () => {\n const backoffSpy = sinon.spy(mobiusSocket, '_connectWithBackoff');\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n const promise = mobiusSocket.connect('ws://example.com');\n\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.isTrue(mobiusSocket.hasEverConnected, 'hasEverConnected is true');\n assert.calledOnce(Socket.prototype.open);\n assert.calledOnce(backoffSpy);\n assert.isUndefined(backoffSpy.firstCall.args[2]?.initialConnectionMaxRetries);\n backoffSpy.restore();\n });\n });\n\n it('rejects immediately on failure without retrying', () => {\n jest.useRealTimers();\n usingFakeTimers = false;\n socketOpenStub.restore();\n socketOpenStub = sinon\n .stub(Socket.prototype, 'open')\n .returns(Promise.reject(new ConnectionError({code: 4001})));\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n\n const promise = mobiusSocket.connect('ws://example.com');\n\n return assert.isRejected(promise).then(() => {\n assert.calledOnce(Socket.prototype.open);\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n });\n });\n\n it('uses config-driven initial retry behavior in the shared backoff strategy', () => {\n const backoffSpy = sinon.spy(mobiusSocket, '_connectWithBackoff');\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n\n const promise = mobiusSocket.connect('ws://example.com');\n\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.calledOnce(backoffSpy);\n assert.isUndefined(backoffSpy.firstCall.args[2]?.initialConnectionMaxRetries);\n backoffSpy.restore();\n });\n });\n\n it('treats a different explicit URL as a fresh initial connect', () => {\n jest.useRealTimers();\n usingFakeTimers = false;\n mobiusSocket.hasEverConnected = true;\n mobiusSocket.socketUrl = 'ws://old-url.com';\n mobiusSocket.config.initialConnectionMaxRetries = 0;\n mobiusSocket.config.maxRetries = 5;\n\n socketOpenStub.restore();\n socketOpenStub = sinon\n .stub(Socket.prototype, 'open')\n .returns(Promise.reject(new ConnectionError({code: 4001})));\n\n const promise = mobiusSocket.connect('ws://new-url.com');\n\n return assert.isRejected(promise).then(() => {\n assert.calledOnce(Socket.prototype.open);\n assert.equal(mobiusSocket.socketUrl, 'ws://new-url.com');\n assert.isFalse(mobiusSocket.hasEverConnected, 'hasEverConnected is false');\n });\n });\n });\n });\n\n describe('Websocket proxy agent', () => {\n afterEach(() => {\n delete webex.config.defaultMobiusSocketOptions;\n });\n\n it('connects to MobiusSocket using proxy agent', () => {\n const testProxyUrl = 'http://proxyurl.com:80';\n\n webex.config.defaultMobiusSocketOptions = {agent: {proxy: {href: testProxyUrl}}};\n const promise = mobiusSocket.connect();\n\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.calledWith(\n socketOpenStub,\n 'ws://example.com',\n sinon.match.has(\n 'agent',\n sinon.match.has('proxy', sinon.match.has('href', testProxyUrl))\n )\n );\n });\n });\n\n it('connects to MobiusSocket without proxy agent', () => {\n const promise = mobiusSocket.connect();\n\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n mockWebSocket.open();\n\n return promise.then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.calledWith(socketOpenStub, 'ws://example.com', sinon.match({agent: undefined}));\n });\n });\n });\n\n describe('#logout()', () => {\n it('calls disconnectAll and logs', () => {\n sinon.stub(mobiusSocket.logger, 'info');\n sinon.stub(mobiusSocket, 'disconnectAll');\n mobiusSocket.logout();\n assert.called(mobiusSocket.disconnectAll);\n assert.calledOnce(mobiusSocket.logger.info);\n assert.calledWith(mobiusSocket.logger.info.getCall(0), 'MobiusSocket: logout() called');\n });\n\n it('uses the config.beforeLogoutOptionsCloseReason to disconnect and will send code 3050 for logout', () => {\n sinon.stub(mobiusSocket, 'disconnectAll');\n mobiusSocket.config.beforeLogoutOptionsCloseReason = 'done (permanent)';\n mobiusSocket.logout();\n assert.calledWith(mobiusSocket.disconnectAll, {code: 3050, reason: 'done (permanent)'});\n });\n\n it('uses the config.beforeLogoutOptionsCloseReason to disconnect and will send code 3050 for logout if the reason is different than standard', () => {\n sinon.stub(mobiusSocket, 'disconnectAll');\n mobiusSocket.config.beforeLogoutOptionsCloseReason = 'test';\n mobiusSocket.logout();\n assert.calledWith(mobiusSocket.disconnectAll, {code: 3050, reason: 'test'});\n });\n\n it('uses the config.beforeLogoutOptionsCloseReason to disconnect and will send undefined for logout if the reason is same as standard', () => {\n sinon.stub(mobiusSocket, 'disconnectAll');\n mobiusSocket.config.beforeLogoutOptionsCloseReason = 'done (forced)';\n mobiusSocket.logout();\n assert.calledWith(mobiusSocket.disconnectAll, undefined);\n });\n });\n\n describe('#disconnect()', () => {\n it('disconnects the WebSocket', () =>\n mobiusSocket\n .connect()\n .then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n const promise = mobiusSocket.disconnect();\n\n mockWebSocket.emit('close', {\n code: 1000,\n reason: 'Done',\n });\n\n return promise;\n })\n .then(() => {\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.isUndefined(\n mobiusSocket.mockWebSocket,\n 'MobiusSocket does not have a mockWebSocket'\n );\n }));\n\n it('disconnects the WebSocket with code 3050', () =>\n mobiusSocket\n .connect()\n .then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n const promise = mobiusSocket.disconnect();\n\n mockWebSocket.emit('close', {\n code: 3050,\n reason: 'done (permanent)',\n });\n\n return promise;\n })\n .then(() => {\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n assert.isUndefined(\n mobiusSocket.mockWebSocket,\n 'MobiusSocket does not have a mockWebSocket'\n );\n }));\n\n it('stops emitting message events', () => {\n const spy = sinon.spy();\n\n mobiusSocket.on('event:status.start_typing', spy);\n\n return mobiusSocket\n .connect()\n .then(() => {\n assert.isTrue(mobiusSocket.connected, 'MobiusSocket is connected');\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n\n assert.notCalled(spy);\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n mockWebSocket.emit('message', {data: statusStartTypingMessage});\n })\n .then(() => {\n assert.calledOnce(spy);\n\n const promise = mobiusSocket.disconnect();\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n mockWebSocket.emit('message', {data: statusStartTypingMessage});\n mockWebSocket.emit('close', {\n code: 1000,\n reason: 'Done',\n });\n mockWebSocket.emit('message', {data: statusStartTypingMessage});\n\n return promise;\n })\n\n .then(() => {\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n mockWebSocket.emit('message', {data: statusStartTypingMessage});\n assert.calledOnce(spy);\n });\n });\n\n describe('when there is a connection attempt inflight', () => {\n it('stops the attempt when disconnect called', () => {\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.onCall(0).returns(\n // Delay the opening of the socket so that disconnect is called while open\n // is in progress\n promiseTick(2 * mobiusSocket.config.backoffTimeReset)\n // Pretend the socket opened successfully. Failing should be fine too but\n // it generates more console output.\n .then(() => Promise.resolve())\n );\n const promise = mobiusSocket.connect();\n\n // Wait for the connect call to setup\n return promiseTick(mobiusSocket.config.backoffTimeReset).then(async () => {\n // By this time backoffCall and mobiusSocket socket should be defined by the\n // 'connect' call\n assert.isDefined(\n mobiusSocket.backoffCalls.get('mobius-websocket-session'),\n 'MobiusSocket backoffCall is not defined'\n );\n assert.isDefined(mobiusSocket.socket, 'MobiusSocket socket is not defined');\n // Calling disconnect will abort the backoffCall, close the socket, and\n // reject the connect\n mobiusSocket.disconnect();\n assert.isUndefined(\n mobiusSocket.backoffCalls.get('mobius-websocket-session'),\n 'MobiusSocket backoffCall is still defined'\n );\n // The socket will never be unset (which seems bad)\n assert.isDefined(mobiusSocket.socket, 'MobiusSocket socket is not defined');\n\n await assert.isRejected(promise);\n // connection did not fail, so no last error\n assert.isUndefined(mobiusSocket.getLastError());\n });\n });\n\n it('stops the attempt when backoffCall is undefined', () => {\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.returns(Promise.resolve());\n\n let reason;\n\n mobiusSocket.backoffCalls.clear();\n\n const promise = mobiusSocket._attemptConnection(\n 'ws://example.com',\n 'mobius-websocket-session',\n (_reason) => {\n reason = _reason;\n }\n );\n\n return promiseTick(mobiusSocket.config.backoffTimeReset).then(() => {\n assert.equal(\n reason.message,\n `MobiusSocket: prevent socket open when backoffCall no longer defined for ${mobiusSocket.defaultSessionId}`\n );\n\n // Ensure the promise was actually rejected (short-circuited)\n return assert.isRejected(promise);\n });\n });\n\n it('sets lastError when retrying', () => {\n const realError = new Error('FORCED');\n mobiusSocket.config.initialConnectionMaxRetries = 1;\n\n socketOpenStub.restore();\n socketOpenStub = sinon.stub(Socket.prototype, 'open');\n socketOpenStub.onCall(0).returns(Promise.reject(realError));\n const promise = mobiusSocket.connect();\n\n // Wait for the connect call to setup\n return promiseTick(mobiusSocket.config.backoffTimeReset).then(async () => {\n // Calling disconnect will abort the backoffCall, close the socket, and\n // reject the connect\n mobiusSocket.disconnect();\n\n const error = await assert.isRejected(promise);\n const lastError = mobiusSocket.getLastError();\n\n assert.match(error.message, /MobiusSocket Connection Aborted/);\n assert.isDefined(lastError);\n assert.equal(lastError, realError);\n });\n });\n });\n });\n\n describe('#sendWssRequest()', () => {\n beforeEach(() => {\n mobiusSocket.config.wssResponseTimeout = 100;\n });\n\n it('resolves when a matching response_event arrives', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n await promiseTick();\n\n const requestPayload = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n assert.equal(requestPayload.data.token, 'test');\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: 'auth',\n trackingId: requestPayload.trackingId,\n statusCode: 200,\n statusMessage: 'OK',\n }),\n });\n\n const response = await requestPromise;\n\n assert.equal(response.type, 'response_event');\n assert.equal(response.subtype, 'auth');\n assert.equal(response.trackingId, requestPayload.trackingId);\n assert.equal(response.statusCode, 200);\n });\n\n it('strips the Bearer prefix from connect-time auth token', async () => {\n await mobiusSocket.connect();\n\n const authPayload = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(authPayload.type, MESSAGE_TYPES.AUTH);\n assert.equal(authPayload.data.token, 'FAKE');\n });\n\n it('rejects when a matching response_event is non-2xx', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n await promiseTick();\n\n const requestPayload = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: 'auth',\n trackingId: requestPayload.trackingId,\n statusCode: 403,\n statusMessage: 'Forbidden',\n }),\n });\n\n const error = await assert.isRejected(requestPromise);\n\n assert.equal(error.name, 'MobiusSocketResponseError');\n assert.equal(error.statusCode, 403);\n assert.equal(error.statusMessage, 'Forbidden');\n assert.equal(error.trackingId, requestPayload.trackingId);\n });\n\n it('rejects when the matching response does not arrive before timeout', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n jest.advanceTimersByTime(101);\n await promiseTick();\n\n const error = await assert.isRejected(requestPromise);\n\n assert.equal(error.name, 'MobiusSocketResponseError');\n assert.equal(error.statusCode, 408);\n assert.equal(error.statusMessage, 'Mobius websocket response timed out');\n });\n\n it('rejects with a clear error when the matching response is missing status code', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n await promiseTick();\n\n const requestPayload = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: 'auth',\n trackingId: requestPayload.trackingId,\n }),\n });\n\n const error = await assert.isRejected(requestPromise);\n\n assert.equal(error.name, 'MobiusSocketResponseError');\n assert.isUndefined(error.statusCode);\n assert.equal(error.statusMessage, 'Socket response missing status code');\n });\n\n it('rejects pending requests when the active socket closes', async () => {\n await mobiusSocket.connect();\n\n const requestPromise = mobiusSocket.sendWssRequest({\n type: 'auth',\n data: {\n token: 'test',\n },\n });\n\n mockWebSocket.emit('close', {\n code: 1003,\n reason: 'service rejected request',\n });\n\n const error = await assert.isRejected(requestPromise);\n\n assert.instanceOf(error, ConnectionError);\n assert.equal(error.code, 1003);\n assert.equal(error.reason, 'service rejected request');\n });\n\n it('rejects array payloads', async () => {\n await mobiusSocket.connect();\n\n const error = await assert.isRejected(mobiusSocket.sendWssRequest([]));\n\n assert.equal(error.message, '`payload` is required');\n });\n });\n\n describe('#getConnectedWebSocketUrl()', () => {\n it('returns the connected websocket url for the session', () => {\n mobiusSocket.sockets.set(mobiusSocket.defaultSessionId, {\n connected: true,\n url: 'ws://connected-url.com',\n });\n\n assert.equal(mobiusSocket.getConnectedWebSocketUrl(), 'ws://connected-url.com');\n });\n\n it('returns undefined when the session is not connected', () => {\n mobiusSocket.sockets.set(mobiusSocket.defaultSessionId, {\n connected: false,\n url: 'ws://disconnected-url.com',\n });\n\n assert.isUndefined(mobiusSocket.getConnectedWebSocketUrl());\n });\n });\n\n describe('#_emit()', () => {\n it('emits Error-safe events and log the error with the call parameters', () => {\n const error = 'error';\n const event = {data: 'some data'};\n mobiusSocket.on('break', () => {\n throw error;\n });\n sinon.stub(mobiusSocket.logger, 'error');\n\n return Promise.resolve(\n mobiusSocket._emit(mobiusSocket.defaultSessionId, 'break', event)\n ).then((res) => {\n assert.calledWith(\n mobiusSocket.logger.error,\n 'MobiusSocket: error occurred in event handler:',\n error,\n ' with args: ',\n [mobiusSocket.defaultSessionId, 'break', event]\n );\n\n return res;\n });\n });\n });\n\n describe('#_applyOverrides()', () => {\n const lastSeenActivityDate = 'Some date';\n const lastReadableActivityDate = 'Some other date';\n\n it('merges a single header field with data', () => {\n const envelope = {\n headers: {\n 'data.activity.target.lastSeenActivityDate': lastSeenActivityDate,\n },\n data: {\n activity: {},\n },\n };\n\n mobiusSocket._applyOverrides(envelope);\n\n assert.equal(envelope.data.activity.target.lastSeenActivityDate, lastSeenActivityDate);\n });\n\n it('merges a multiple header fields with data', () => {\n const envelope = {\n headers: {\n 'data.activity.target.lastSeenActivityDate': lastSeenActivityDate,\n 'data.activity.target.lastReadableActivityDate': lastReadableActivityDate,\n },\n data: {\n activity: {},\n },\n };\n\n mobiusSocket._applyOverrides(envelope);\n\n assert.equal(envelope.data.activity.target.lastSeenActivityDate, lastSeenActivityDate);\n assert.equal(\n envelope.data.activity.target.lastReadableActivityDate,\n lastReadableActivityDate\n );\n });\n\n it('merges headers when MobiusSocket messages arrive', () => {\n const envelope = {\n headers: {\n 'data.activity.target.lastSeenActivityDate': lastSeenActivityDate,\n },\n data: {\n activity: {},\n },\n };\n\n mobiusSocket._applyOverrides(envelope);\n\n assert.equal(envelope.data.activity.target.lastSeenActivityDate, lastSeenActivityDate);\n });\n });\n\n describe('#_setTimeOffset', () => {\n it('sets mercuryTimeOffset based on the difference between wsWriteTimestamp and now', () => {\n const event = {\n data: {\n wsWriteTimestamp: Date.now() - 60000,\n },\n };\n assert.isUndefined(mobiusSocket.mercuryTimeOffset);\n mobiusSocket._setTimeOffset('mobius-websocket-session', event);\n assert.isDefined(mobiusSocket.mercuryTimeOffset);\n assert.isTrue(mobiusSocket.mercuryTimeOffset > 0);\n });\n it('handles negative offsets', () => {\n const event = {\n data: {\n wsWriteTimestamp: Date.now() + 60000,\n },\n };\n mobiusSocket._setTimeOffset('mobius-websocket-session', event);\n assert.isTrue(mobiusSocket.mercuryTimeOffset < 0);\n });\n it('handles invalid wsWriteTimestamp', () => {\n const invalidTimestamps = [null, -1, 'invalid', undefined];\n invalidTimestamps.forEach((invalidTimestamp) => {\n const event = {\n data: {\n wsWriteTimestamp: invalidTimestamp,\n },\n };\n mobiusSocket._setTimeOffset('mobius-websocket-session', event);\n assert.isUndefined(mobiusSocket.mercuryTimeOffset);\n });\n });\n });\n\n describe('#_prepareUrl()', () => {\n it('returns the provided URL as-is (no Mercury URL transforms)', () =>\n mobiusSocket._prepareUrl('ws://provided.com').then((wsUrl) => {\n assert.equal(wsUrl, 'ws://provided.com');\n }));\n\n it('falls back to device webSocketUrl when no URL is provided', () =>\n mobiusSocket._prepareUrl().then((wsUrl) => {\n assert.equal(wsUrl, 'ws://example.com');\n }));\n });\n\n describe('shutdown protocol', () => {\n describe('#_handleImminentShutdown()', () => {\n let connectWithBackoffStub;\n const sessionId = 'mobius-websocket-session';\n\n beforeEach(() => {\n mobiusSocket.connected = true;\n mobiusSocket.sockets.set(sessionId, {\n url: 'ws://old-socket.com',\n removeAllListeners: sinon.stub(),\n });\n mobiusSocket.socket = mobiusSocket.sockets.get(sessionId);\n connectWithBackoffStub = sinon.stub(mobiusSocket, '_connectWithBackoff');\n connectWithBackoffStub.returns(Promise.resolve());\n sinon.stub(mobiusSocket, '_emit');\n });\n\n afterEach(() => {\n connectWithBackoffStub.restore();\n mobiusSocket._emit.restore();\n mobiusSocket.sockets.clear();\n });\n\n it('should be idempotent - no-op if already in progress', () => {\n // Simulate an existing switchover in progress by seeding the backoff map\n mobiusSocket._shutdownSwitchoverBackoffCalls.set(sessionId, {placeholder: true});\n\n mobiusSocket._handleImminentShutdown(sessionId);\n\n assert.notCalled(connectWithBackoffStub);\n });\n\n it('should set switchover flags when called', () => {\n mobiusSocket._handleImminentShutdown(sessionId);\n\n assert.calledOnce(connectWithBackoffStub);\n const callArgs = connectWithBackoffStub.firstCall.args;\n assert.isUndefined(callArgs[0]); // webSocketUrl\n assert.equal(callArgs[1], sessionId); // sessionId\n assert.isObject(callArgs[2]); // context\n assert.isTrue(callArgs[2].isShutdownSwitchover);\n assert.isObject(callArgs[2].attemptOptions);\n assert.isTrue(callArgs[2].attemptOptions.isShutdownSwitchover);\n });\n\n it('should call _connectWithBackoff with correct parameters', (done) => {\n mobiusSocket._handleImminentShutdown(sessionId);\n\n process.nextTick(() => {\n assert.calledOnce(connectWithBackoffStub);\n const callArgs = connectWithBackoffStub.firstCall.args;\n assert.isUndefined(callArgs[0]); // webSocketUrl\n assert.equal(callArgs[1], sessionId); // sessionId\n assert.isObject(callArgs[2]); // context\n assert.isTrue(callArgs[2].isShutdownSwitchover);\n assert.isObject(callArgs[2].attemptOptions);\n assert.isTrue(callArgs[2].attemptOptions.isShutdownSwitchover);\n done();\n });\n });\n\n it('should handle exceptions during switchover', () => {\n connectWithBackoffStub.restore();\n sinon.stub(mobiusSocket, '_connectWithBackoff').throws(new Error('Connection failed'));\n\n mobiusSocket._handleImminentShutdown(sessionId);\n\n // When an exception happens synchronously, the placeholder entry\n // should be removed from the map.\n const switchoverCall = mobiusSocket._shutdownSwitchoverBackoffCalls.get(sessionId);\n assert.isUndefined(switchoverCall);\n mobiusSocket._connectWithBackoff.restore();\n });\n });\n\n describe('#_onmessage() with shutdown message', () => {\n beforeEach(() => {\n sinon.stub(mobiusSocket, '_handleImminentShutdown');\n sinon.stub(mobiusSocket, '_emit');\n sinon.stub(mobiusSocket, '_setTimeOffset');\n });\n\n afterEach(() => {\n mobiusSocket._handleImminentShutdown.restore();\n mobiusSocket._emit.restore();\n mobiusSocket._setTimeOffset.restore();\n });\n\n it('should trigger _handleImminentShutdown on shutdown message', () => {\n const shutdownEvent = {\n data: {\n type: 'shutdown',\n },\n };\n\n const result = mobiusSocket._onmessage(mobiusSocket.defaultSessionId, shutdownEvent);\n\n assert.calledOnce(mobiusSocket._handleImminentShutdown);\n assert.calledWith(\n mobiusSocket._emit,\n mobiusSocket.defaultSessionId,\n 'event:mercury_shutdown_imminent',\n shutdownEvent.data\n );\n assert.instanceOf(result, Promise);\n });\n\n it('should handle shutdown message without additional data gracefully', () => {\n const shutdownEvent = {\n data: {\n type: 'shutdown',\n },\n };\n\n mobiusSocket._onmessage(mobiusSocket.defaultSessionId, shutdownEvent);\n\n assert.calledOnce(mobiusSocket._handleImminentShutdown);\n });\n\n it('should not trigger shutdown handling for non-shutdown messages', () => {\n const regularEvent = {\n data: {\n type: 'regular',\n data: {\n eventType: 'conversation.activity',\n },\n },\n };\n\n mobiusSocket._onmessage(mobiusSocket.defaultSessionId, regularEvent);\n\n assert.notCalled(mobiusSocket._handleImminentShutdown);\n });\n });\n\n describe('#_onmessage() with missing data or eventType', () => {\n beforeEach(() => {\n sinon.stub(mobiusSocket, '_emit');\n sinon.stub(mobiusSocket, '_setTimeOffset');\n sinon.stub(mobiusSocket, '_applyOverrides');\n });\n\n afterEach(() => {\n mobiusSocket._emit.restore();\n mobiusSocket._setTimeOffset.restore();\n mobiusSocket._applyOverrides.restore();\n });\n\n it('should not throw when envelope.data is undefined', () => {\n const event = {\n data: {\n type: 'someType',\n // no nested data property\n },\n };\n\n const result = mobiusSocket._onmessage(mobiusSocket.defaultSessionId, event);\n\n assert.instanceOf(result, Promise);\n assert.calledWith(mobiusSocket._emit, mobiusSocket.defaultSessionId, 'event', event.data);\n });\n\n it('should not throw when data.eventType is undefined', () => {\n const event = {\n data: {\n type: 'someType',\n data: {\n // no eventType property\n someField: 'value',\n },\n },\n };\n\n const result = mobiusSocket._onmessage(mobiusSocket.defaultSessionId, event);\n\n assert.instanceOf(result, Promise);\n assert.calledWith(mobiusSocket._emit, mobiusSocket.defaultSessionId, 'event', event.data);\n });\n\n it('should emit generic event for messages without eventType (e.g. subscription responses)', () => {\n const event = {\n data: {\n id: 'msg-123',\n sequenceNumber: 5,\n data: {\n statusCode: 200,\n },\n },\n };\n\n const result = mobiusSocket._onmessage(mobiusSocket.defaultSessionId, event);\n\n assert.instanceOf(result, Promise);\n assert.calledOnce(mobiusSocket._emit);\n assert.calledWith(mobiusSocket._emit, mobiusSocket.defaultSessionId, 'event', event.data);\n });\n\n it('should still process messages with a valid eventType', async () => {\n const event = {\n data: {\n data: {\n eventType: 'conversation.activity',\n },\n },\n };\n\n await mobiusSocket._onmessage(mobiusSocket.defaultSessionId, event);\n\n // Normal flow emits namespace-specific events after processing handlers.\n // The early-return guard only emits 'event', so asserting these proves the normal path was taken.\n assert.calledWith(\n mobiusSocket._emit,\n mobiusSocket.defaultSessionId,\n 'event:conversation',\n event.data\n );\n assert.calledWith(\n mobiusSocket._emit,\n mobiusSocket.defaultSessionId,\n 'event:conversation.activity',\n event.data\n );\n });\n });\n\n describe('#_onmessage() async_event deduplication', () => {\n let originalDedupCacheMaxSize;\n\n beforeEach(() => {\n originalDedupCacheMaxSize = mobiusSocket.config.dedupCacheMaxSize;\n });\n\n afterEach(() => {\n mobiusSocket.config.dedupCacheMaxSize = originalDedupCacheMaxSize;\n });\n\n it('suppresses duplicate async_event messages for the same session', async () => {\n const emitSpy = sinon.spy(mobiusSocket, '_emit');\n\n await mobiusSocket._onmessage('session-a', createAsyncEvent('evt-1'));\n await mobiusSocket._onmessage('session-a', createAsyncEvent('evt-1'));\n\n assert.equal(countGenericEventEmits(emitSpy, 'session-a'), 1);\n emitSpy.restore();\n });\n\n it('suppresses duplicate async_event messages across socket replacement without disconnect', async () => {\n const sessionId = 'session-a';\n const emitSpy = sinon.spy(mobiusSocket, '_emit');\n mobiusSocket.sockets.set(sessionId, createSessionSocket());\n\n await mobiusSocket._onmessage(sessionId, createAsyncEvent('evt-2'));\n\n mobiusSocket.sockets.set(sessionId, createSessionSocket());\n await mobiusSocket._onmessage(sessionId, createAsyncEvent('evt-2'));\n\n assert.equal(countGenericEventEmits(emitSpy, sessionId), 1);\n emitSpy.restore();\n });\n\n it('evicts only the oldest eventId when the dedup cache exceeds max size', async () => {\n const emitSpy = sinon.spy(mobiusSocket, '_emit');\n\n mobiusSocket.config.dedupCacheMaxSize = 3;\n\n await mobiusSocket._onmessage('session-a', createAsyncEvent('e1'));\n await mobiusSocket._onmessage('session-a', createAsyncEvent('e2'));\n await mobiusSocket._onmessage('session-a', createAsyncEvent('e3'));\n await mobiusSocket._onmessage('session-a', createAsyncEvent('e4'));\n await mobiusSocket._onmessage('session-a', createAsyncEvent('e2'));\n await mobiusSocket._onmessage('session-a', createAsyncEvent('e1'));\n\n assert.equal(countGenericEventEmits(emitSpy, 'session-a'), 5);\n emitSpy.restore();\n });\n\n it('clears the session dedup cache on disconnect', async () => {\n const sessionId = 'session-a';\n const emitSpy = sinon.spy(mobiusSocket, '_emit');\n\n await mobiusSocket._onmessage(sessionId, createAsyncEvent('evt-3'));\n\n mobiusSocket.sockets.set(sessionId, createSessionSocket());\n await mobiusSocket.disconnect(undefined, sessionId);\n await mobiusSocket._onmessage(sessionId, createAsyncEvent('evt-3'));\n\n assert.equal(countGenericEventEmits(emitSpy, sessionId), 2);\n emitSpy.restore();\n });\n });\n\n describe('#_getEventHandlers()', () => {\n it('should return an empty array when eventType is undefined', () => {\n const result = mobiusSocket._getEventHandlers(undefined);\n\n assert.deepEqual(result, []);\n });\n\n it('should return an empty array when eventType is null', () => {\n const result = mobiusSocket._getEventHandlers(null);\n\n assert.deepEqual(result, []);\n });\n\n it('should return an empty array when eventType is an empty string', () => {\n const result = mobiusSocket._getEventHandlers('');\n\n assert.deepEqual(result, []);\n });\n\n it('should return an empty array when namespace is not registered', () => {\n const result = mobiusSocket._getEventHandlers('unknownNamespace.someEvent');\n\n assert.deepEqual(result, []);\n });\n });\n\n describe('#_onclose() with code 4001 (shutdown replacement)', () => {\n let mockSocket;\n let anotherSocket;\n\n beforeEach(() => {\n mockSocket = {\n url: 'ws://active-socket.com',\n removeAllListeners: sinon.stub(),\n };\n anotherSocket = {\n url: 'ws://old-socket.com',\n removeAllListeners: sinon.stub(),\n };\n mobiusSocket.socket = mockSocket;\n mobiusSocket.sockets.set(mobiusSocket.defaultSessionId, mockSocket);\n mobiusSocket.connected = true;\n sinon.stub(mobiusSocket, '_emit');\n sinon.stub(mobiusSocket, '_reconnect');\n });\n\n afterEach(() => {\n mobiusSocket._emit.restore();\n mobiusSocket._reconnect.restore();\n });\n\n it('should handle active socket close with 4001 - permanent failure', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n mobiusSocket._onclose(mobiusSocket.defaultSessionId, closeEvent, mockSocket);\n\n assert.calledWith(\n mobiusSocket._emit,\n mobiusSocket.defaultSessionId,\n 'offline.permanent',\n closeEvent\n );\n assert.notCalled(mobiusSocket._reconnect); // No reconnect for 4001 on active socket\n assert.isFalse(mobiusSocket.connected);\n });\n\n it('should handle non-active socket close with 4001 - no reconnect needed', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n mobiusSocket._onclose(mobiusSocket.defaultSessionId, closeEvent, anotherSocket);\n\n assert.calledWith(\n mobiusSocket._emit,\n mobiusSocket.defaultSessionId,\n 'offline.replaced',\n closeEvent\n );\n assert.notCalled(mobiusSocket._reconnect);\n assert.isTrue(mobiusSocket.connected); // Should remain connected\n assert.strictEqual(mobiusSocket.socket, mockSocket);\n });\n\n it('should distinguish between active and non-active socket closes', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n // Test non-active socket\n mobiusSocket._onclose(mobiusSocket.defaultSessionId, closeEvent, anotherSocket);\n assert.calledWith(\n mobiusSocket._emit,\n mobiusSocket.defaultSessionId,\n 'offline.replaced',\n closeEvent\n );\n\n // Reset the spy call history\n mobiusSocket._emit.resetHistory();\n\n // Test active socket\n mobiusSocket.sockets.set(mobiusSocket.defaultSessionId, mockSocket);\n mobiusSocket._onclose(mobiusSocket.defaultSessionId, closeEvent, mockSocket);\n assert.calledWith(\n mobiusSocket._emit,\n mobiusSocket.defaultSessionId,\n 'offline.permanent',\n closeEvent\n );\n });\n\n it('should handle missing sourceSocket parameter (treats as non-active)', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n mobiusSocket._onclose(mobiusSocket.defaultSessionId, closeEvent); // No sourceSocket parameter\n\n // With simplified logic, undefined !== this.socket, so isActiveSocket = false\n assert.calledWith(\n mobiusSocket._emit,\n mobiusSocket.defaultSessionId,\n 'offline.replaced',\n closeEvent\n );\n assert.notCalled(mobiusSocket._reconnect);\n });\n\n it('should clean up event listeners from non-active socket when it closes', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n // Close non-active socket (not the active one)\n mobiusSocket._onclose(mobiusSocket.defaultSessionId, closeEvent, anotherSocket);\n\n // Verify listeners were removed from the old socket\n // The _onclose method checks if sourceSocket !== this.socket (non-active)\n // and then calls removeAllListeners in the else branch\n assert.calledOnce(anotherSocket.removeAllListeners);\n });\n\n it('should not clean up listeners from active socket listeners until close handler runs', () => {\n const closeEvent = {\n code: 4001,\n reason: 'replaced during shutdown',\n };\n\n // Close active socket\n mobiusSocket._onclose(mobiusSocket.defaultSessionId, closeEvent, mockSocket);\n\n // Verify listeners were removed from active socket\n assert.calledOnce(mockSocket.removeAllListeners);\n });\n });\n\n describe('shutdown switchover with retry logic', () => {\n let connectWithBackoffStub;\n const sessionId = 'mobius-websocket-session';\n\n beforeEach(() => {\n mobiusSocket.connected = true;\n mobiusSocket.sockets.set(sessionId, {\n url: 'ws://old-socket.com',\n removeAllListeners: sinon.stub(),\n });\n mobiusSocket.socket = mobiusSocket.sockets.get(sessionId);\n connectWithBackoffStub = sinon.stub(mobiusSocket, '_connectWithBackoff');\n sinon.stub(mobiusSocket, '_emit');\n });\n\n afterEach(() => {\n connectWithBackoffStub.restore();\n mobiusSocket._emit.restore();\n mobiusSocket.sockets.clear();\n });\n\n it('should call _connectWithBackoff with shutdown switchover context', (done) => {\n connectWithBackoffStub.returns(Promise.resolve());\n\n mobiusSocket._handleImminentShutdown(sessionId);\n\n process.nextTick(() => {\n assert.calledOnce(connectWithBackoffStub);\n const callArgs = connectWithBackoffStub.firstCall.args;\n\n assert.isUndefined(callArgs[0]); // webSocketUrl\n assert.equal(callArgs[1], sessionId);\n assert.isObject(callArgs[2]);\n assert.isTrue(callArgs[2].isShutdownSwitchover);\n assert.isObject(callArgs[2].attemptOptions);\n assert.isTrue(callArgs[2].attemptOptions.isShutdownSwitchover);\n done();\n });\n });\n\n it('should set _shutdownSwitchoverInProgress flag during switchover', () => {\n // With the new behavior, \"in progress\" is represented by the presence\n // of an entry in _shutdownSwitchoverBackoffCalls.\n // Since _connectWithBackoff is stubbed in this suite, simulate its side-effect\n // of seeding the backoff-call map entry.\n connectWithBackoffStub.callsFake(() => {\n mobiusSocket._shutdownSwitchoverBackoffCalls.set(sessionId, {placeholder: true});\n\n return new Promise(() => {}); // Never resolves\n });\n\n mobiusSocket._handleImminentShutdown(sessionId);\n\n const switchoverBackoffCall = mobiusSocket._shutdownSwitchoverBackoffCalls.get(sessionId);\n assert.isOk(switchoverBackoffCall);\n });\n\n it('should emit success event when switchover completes', async () => {\n connectWithBackoffStub.callsFake((url, sid, context) => {\n if (context && context.attemptOptions && context.attemptOptions.onSuccess) {\n const mockSocket = {url: 'ws://new-socket.com'};\n context.attemptOptions.onSuccess(mockSocket, 'ws://new-socket.com');\n }\n\n return Promise.resolve();\n });\n\n mobiusSocket._handleImminentShutdown(sessionId);\n\n await promiseTick(50);\n\n const emitCalls = mobiusSocket._emit.getCalls();\n const hasCompleteEvent = emitCalls.some(\n (call) =>\n call.args[0] === sessionId &&\n call.args[1] === 'event:mercury_shutdown_switchover_complete'\n );\n\n assert.isTrue(hasCompleteEvent, 'Should emit switchover complete event');\n });\n\n it('should emit failure event when switchover exhausts retries', async () => {\n const testError = new Error('Connection failed');\n\n connectWithBackoffStub.returns(Promise.reject(testError));\n\n mobiusSocket._handleImminentShutdown(sessionId);\n await promiseTick(50);\n\n const emitCalls = mobiusSocket._emit.getCalls();\n const hasFailureEvent = emitCalls.some(\n (call) =>\n call.args[0] === sessionId &&\n call.args[1] === 'event:mercury_shutdown_switchover_failed' &&\n call.args[2] &&\n call.args[2].reason === testError\n );\n\n assert.isTrue(hasFailureEvent, 'Should emit switchover failed event');\n });\n\n it('should allow old socket to be closed by server after switchover failure', async () => {\n connectWithBackoffStub.returns(Promise.reject(new Error('Failed')));\n\n mobiusSocket._handleImminentShutdown(sessionId);\n await promiseTick(50);\n\n assert.equal(mobiusSocket.socket.removeAllListeners.callCount, 0);\n });\n });\n\n describe('#_prepareAndOpenSocket()', () => {\n let mockSocket;\n let prepareUrlStub;\n let getUserTokenStub;\n\n beforeEach(() => {\n mockSocket = {\n open: sinon.stub().returns(Promise.resolve()),\n };\n prepareUrlStub = sinon\n .stub(mobiusSocket, '_prepareUrl')\n .returns(Promise.resolve('ws://example.com'));\n getUserTokenStub = webex.credentials.getUserToken;\n getUserTokenStub.returns(\n Promise.resolve({\n toString: () => 'mock-token',\n })\n );\n });\n\n afterEach(() => {\n prepareUrlStub.restore();\n });\n\n it('should prepare URL and get user token', async () => {\n await mobiusSocket._prepareAndOpenSocket(mockSocket, 'ws://test.com', false);\n\n assert.calledOnce(prepareUrlStub);\n assert.calledWith(prepareUrlStub, 'ws://test.com');\n assert.calledOnce(getUserTokenStub);\n });\n\n it('should open socket with correct options for normal connection', async () => {\n await mobiusSocket._prepareAndOpenSocket(mockSocket, undefined, false);\n\n assert.calledOnce(mockSocket.open);\n const callArgs = mockSocket.open.firstCall.args;\n\n assert.equal(callArgs[0], 'ws://example.com');\n assert.isObject(callArgs[1]);\n assert.equal(callArgs[1].token, 'mock-token');\n assert.isDefined(callArgs[1].forceCloseDelay);\n assert.isDefined(callArgs[1].wssResponseTimeout);\n });\n\n it('should log with correct prefix for normal connection', async () => {\n await mobiusSocket._prepareAndOpenSocket(mockSocket, undefined, false);\n\n // The method should complete successfully - we're testing it runs without error\n // Actual log message verification is complex due to existing stubs in parent scope\n assert.calledOnce(mockSocket.open);\n });\n\n it('should log with shutdown prefix for shutdown connection', async () => {\n await mobiusSocket._prepareAndOpenSocket(mockSocket, undefined, true);\n\n // The method should complete successfully with shutdown flag\n assert.calledOnce(mockSocket.open);\n });\n\n it('should merge custom mobiusSocket options when provided', async () => {\n webex.config.defaultMobiusSocketOptions = {\n customOption: 'test-value',\n wssResponseTimeout: 99999,\n };\n\n await mobiusSocket._prepareAndOpenSocket(mockSocket, undefined, false);\n\n const callArgs = mockSocket.open.firstCall.args;\n\n assert.equal(callArgs[1].customOption, 'test-value');\n assert.equal(callArgs[1].wssResponseTimeout, 99999); // Custom value overrides default\n });\n\n it('should return the webSocketUrl after opening', async () => {\n const result = await mobiusSocket._prepareAndOpenSocket(mockSocket, undefined, false);\n\n assert.equal(result, 'ws://example.com');\n });\n\n it('should handle errors during socket open', async () => {\n mockSocket.open.returns(Promise.reject(new Error('Open failed')));\n\n try {\n await mobiusSocket._prepareAndOpenSocket(mockSocket, undefined, false);\n assert.fail('Should have thrown an error');\n } catch (err) {\n assert.equal(err.message, 'Open failed');\n }\n });\n });\n\n describe('#_attemptConnection() with shutdown switchover', () => {\n let prepareAndOpenSocketStub;\n let callback;\n const sessionId = 'mobius-websocket-session';\n\n beforeEach(() => {\n prepareAndOpenSocketStub = sinon\n .stub(mobiusSocket, '_prepareAndOpenSocket')\n .returns(Promise.resolve('ws://new-socket.com'));\n callback = sinon.stub();\n mobiusSocket._shutdownSwitchoverBackoffCalls.set(sessionId, {abort: sinon.stub()});\n mobiusSocket.socket = {url: 'ws://test.com'};\n mobiusSocket.connected = true;\n sinon.stub(mobiusSocket, '_emit');\n sinon.stub(mobiusSocket, '_attachSocketEventListeners');\n });\n\n afterEach(() => {\n prepareAndOpenSocketStub.restore();\n mobiusSocket._emit.restore();\n mobiusSocket._attachSocketEventListeners.restore();\n mobiusSocket._shutdownSwitchoverBackoffCalls.clear();\n });\n\n it('should not set socket reference before opening for shutdown switchover', async () => {\n const originalSocket = mobiusSocket.socket;\n\n await mobiusSocket._attemptConnection('ws://test.com', sessionId, callback, {\n isShutdownSwitchover: true,\n onSuccess: (newSocket, url) => {\n assert.equal(mobiusSocket.socket, originalSocket);\n },\n });\n\n assert.equal(mobiusSocket.socket, originalSocket);\n });\n\n it('should call onSuccess callback with new socket and URL for shutdown', async () => {\n const onSuccessStub = sinon.stub();\n\n await mobiusSocket._attemptConnection('ws://test.com', sessionId, callback, {\n isShutdownSwitchover: true,\n onSuccess: onSuccessStub,\n });\n\n assert.calledOnce(onSuccessStub);\n assert.equal(onSuccessStub.firstCall.args[1], 'ws://new-socket.com');\n });\n\n it('should emit shutdown switchover complete event', async () => {\n await mobiusSocket._attemptConnection('ws://test.com', sessionId, callback, {\n isShutdownSwitchover: true,\n onSuccess: (newSocket, url) => {\n mobiusSocket.socket = newSocket;\n mobiusSocket.connected = true;\n mobiusSocket._emit(sessionId, 'event:mercury_shutdown_switchover_complete', {url});\n },\n });\n\n assert.calledWith(\n mobiusSocket._emit,\n sessionId,\n 'event:mercury_shutdown_switchover_complete',\n sinon.match.has('url', 'ws://new-socket.com')\n );\n });\n\n it('should use simpler error handling for shutdown switchover failures', async () => {\n prepareAndOpenSocketStub.returns(Promise.reject(new Error('Connection failed')));\n\n await mobiusSocket\n ._attemptConnection('ws://test.com', sessionId, callback, {\n isShutdownSwitchover: true,\n })\n .catch(() => {});\n\n assert.calledOnce(callback);\n assert.instanceOf(callback.firstCall.args[0], Error);\n });\n\n it('should check _shutdownSwitchoverBackoffCall for shutdown connections', () => {\n mobiusSocket._shutdownSwitchoverBackoffCalls.clear();\n\n const result = mobiusSocket._attemptConnection('ws://test.com', sessionId, callback, {\n isShutdownSwitchover: true,\n });\n\n return result.catch((err) => {\n assert.instanceOf(err, Error);\n assert.match(err.message, /switchover backoff call/);\n });\n });\n });\n\n describe('#_connectWithBackoff() with shutdown switchover', () => {\n const sessionId = 'mobius-websocket-session';\n\n it('should use shutdown-specific parameters when called', () => {\n const connectWithBackoffStub = sinon\n .stub(mobiusSocket, '_connectWithBackoff')\n .returns(Promise.resolve());\n\n mobiusSocket._handleImminentShutdown(sessionId);\n\n assert.calledOnce(connectWithBackoffStub);\n const callArgs = connectWithBackoffStub.firstCall.args;\n assert.equal(callArgs[1], sessionId);\n assert.isObject(callArgs[2]);\n assert.isTrue(callArgs[2].isShutdownSwitchover);\n\n connectWithBackoffStub.restore();\n });\n\n it('should pass shutdown switchover options to _attemptConnection', () => {\n const attemptStub = sinon.stub(mobiusSocket, '_attemptConnection');\n attemptStub.callsFake((url, sid, cb) => cb());\n\n const context = {\n isShutdownSwitchover: true,\n attemptOptions: {\n isShutdownSwitchover: true,\n onSuccess: () => {},\n },\n };\n\n const promise = mobiusSocket._connectWithBackoff(undefined, sessionId, context);\n\n return promise.then(() => {\n assert.calledOnce(attemptStub);\n const callArgs = attemptStub.firstCall.args;\n assert.equal(callArgs[1], sessionId);\n assert.isObject(callArgs[3]);\n assert.isTrue(callArgs[3].isShutdownSwitchover);\n attemptStub.restore();\n });\n });\n\n it('should set and clear state flags appropriately', () => {\n sinon.stub(mobiusSocket, '_attemptConnection').callsFake((url, sid, cb) => cb());\n\n mobiusSocket._shutdownSwitchoverBackoffCalls.set(sessionId, {placeholder: true});\n\n const promise = mobiusSocket._connectWithBackoff(undefined, sessionId, {\n isShutdownSwitchover: true,\n attemptOptions: {isShutdownSwitchover: true, onSuccess: () => {}},\n });\n\n return promise.then(() => {\n assert.isUndefined(mobiusSocket._shutdownSwitchoverBackoffCalls.get(sessionId));\n mobiusSocket._attemptConnection.restore();\n });\n });\n });\n\n describe('#disconnect() with shutdown switchover in progress', () => {\n let abortStub;\n const sessionId = 'mobius-websocket-session';\n\n beforeEach(() => {\n mobiusSocket.sockets.clear();\n mobiusSocket.sockets.set(sessionId, {\n close: sinon.stub().returns(Promise.resolve()),\n removeAllListeners: sinon.stub(),\n });\n abortStub = sinon.stub();\n mobiusSocket._shutdownSwitchoverBackoffCalls.set(sessionId, {abort: abortStub});\n });\n\n it('should abort shutdown switchover backoff call on disconnect', async () => {\n await mobiusSocket.disconnect(undefined, sessionId);\n\n assert.calledOnce(abortStub);\n });\n\n it('should handle disconnect when no switchover is in progress', async () => {\n mobiusSocket._shutdownSwitchoverBackoffCalls.clear();\n\n await mobiusSocket.disconnect(undefined, sessionId);\n\n assert.calledOnce(mobiusSocket.sockets.get(sessionId).close);\n });\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.SOCKET_READY_STATE = exports.MESSAGE_TYPES = void 0;
9
+ var _freeze = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/freeze"));
10
+ var SOCKET_READY_STATE = exports.SOCKET_READY_STATE = (0, _freeze.default)({
11
+ CONNECTING: 0,
12
+ OPEN: 1,
13
+ CLOSING: 2,
14
+ CLOSED: 3
15
+ });
16
+ var MESSAGE_TYPES = exports.MESSAGE_TYPES = (0, _freeze.default)({
17
+ AUTH: 'auth',
18
+ EVENT_ACK: 'event_ack'
19
+ });
20
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SOCKET_READY_STATE","exports","_freeze","default","CONNECTING","OPEN","CLOSING","CLOSED","MESSAGE_TYPES","AUTH","EVENT_ACK"],"sources":["constants.js"],"sourcesContent":["export const SOCKET_READY_STATE = Object.freeze({\n CONNECTING: 0,\n OPEN: 1,\n CLOSING: 2,\n CLOSED: 3,\n});\n\nexport const MESSAGE_TYPES = Object.freeze({\n AUTH: 'auth',\n EVENT_ACK: 'event_ack',\n});\n"],"mappings":";;;;;;;;;AAAO,IAAMA,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,GAAG,IAAAE,OAAA,CAAAC,OAAA,EAAc;EAC9CC,UAAU,EAAE,CAAC;EACbC,IAAI,EAAE,CAAC;EACPC,OAAO,EAAE,CAAC;EACVC,MAAM,EAAE;AACV,CAAC,CAAC;AAEK,IAAMC,aAAa,GAAAP,OAAA,CAAAO,aAAA,GAAG,IAAAN,OAAA,CAAAC,OAAA,EAAc;EACzCM,IAAI,EAAE,MAAM;EACZC,SAAS,EAAE;AACb,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ _Object$defineProperty(exports, "default", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _socket.default;
12
+ }
13
+ });
14
+ var _socket = _interopRequireDefault(require("./socket"));
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_socket","_interopRequireDefault","require"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport {default} from './socket';\n"],"mappings":";;;;;;;;;;;;;AAIA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA","ignoreList":[]}