@webex/calling 3.8.0-next.30 → 3.8.0-next.32

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.
@@ -1 +1 @@
1
- {"version":3,"names":["_asyncMutex","require","_register","_testUtil","_types","utils","_interopRequireWildcard","_Logger","_interopRequireDefault","_types2","_registerFixtures","_common","_types3","_constants","_types4","_LineError","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","webex","getTestUtilsWebex","MockServiceData","indicator","ServiceIndicator","CALLING","domain","logSpy","jest","spyOn","log","warnSpy","handleErrorSpy","describe","originalProcessNextTick","process","nextTick","flushPromises","_promise","resolve","lineEmitter","fn","mobiusUris","filterMobiusUris","getMobiusDiscoveryResponse","URL","mockResponse","getMockRequestTemplate","uri","concat","primary","body","userId","internal","device","clientDeviceUri","url","serviceData","ccMockResponse","failurePayload","statusCode","mockPostResponse","failurePayload429","successPayload","reg","restartSpy","failbackRetry429Spy","restoreSpy","postRegistrationSpy","setupRegistration","mockServiceData","mutex","Mutex","createRegistration","LOGGER","INFO","setMobiusServers","backup","clearAllMocks","FAILBACK_429_RETRY_UTIL","beforeEach","afterEach","request","clearAllTimers","useRealTimers","it","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","mockReturnValueOnce","triggerRegistration","expect","toBeCalledOnceWith","method","getStatus","toEqual","RegistrationStatus","ACTIVE","toBeCalledTimes","toBeCalledWith","LINE_EVENTS","CONNECTING","REGISTERED","stop","_callee2","error","_callee2$","_context2","mockRejectedValue","createLineError","ERROR_TYPE","TOKEN_ERROR","INACTIVE","nthCalledWith","ERROR","undefined","_callee3","_callee3$","_context3","mockRejectedValueOnce","errorCode","devices","mockResolvedValueOnce","global","fetch","json","mockDeleteResponse","IDLE","headers","anything","UNREGISTERED","_callee4","_callee4$","_context4","useFakeTimers","advanceTimersByTime","REG_TRY_BACKUP_TIMER_VAL_IN_SEC","SEC_TO_MSEC_MFACTOR","getActiveMobiusUrl","_callee5","_callee5$","_context5","CONTACT_CENTER","REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC","_callee6","_callee6$","_context6","_callee7","_callee7$","_context7","mockResolvedValue","rehomingIntervalMin","DEFAULT_REHOMING_INTERVAL_MIN","rehomingIntervalMax","DEFAULT_REHOMING_INTERVAL_MAX","toStrictEqual","_callee8","_callee8$","_context8","MINUTES_TO_SEC_MFACTOR","file","REGISTRATION_FILE","failback429RetryAttempts","toBe","failbackTimer","_callee9","_callee9$","_context9","FAILBACK_UTIL","_callee10","finalErrorPayload","_callee10$","_context10","mockClear","not","toBeCalled","_callee11","_callee11$","_context11","_callee12","_callee12$","_context12","_callee13","_callee13$","_context13","callManager","createCall","_keys","getActiveCalls","logObj","mockKeepAliveBody","beforeEachSetupForKeepalive","_ref14","_callee14","_callee14$","_context14","keepaliveTimer","clearInterval","reconnectPending","calls","_values","end","_callee15","keepAlivePayload","funcSpy","_callee15$","_context15","mockReturnValue","keepaliveInterval","lastCalledWith","_callee16","timer","_callee16$","_context16","RECONNECTING","RECONNECTED","_callee17","restartRegSpy","reconnectSpy","clearIntervalSpy","_callee17$","_context17","KEEPALIVE_UTIL","_callee18","_callee18$","_context18","setActiveMobiusUrl","toBeTruthy","_callee19","_callee19$","_context19","_callee20","_callee20$","_context20","_callee21","_callee21$","_context21","service","_callee22","_callee22$","_context22","any","String","callCollection","reconnectOnFailure","CALLS_CLEARED_HANDLER_UTIL"],"sources":["register.test.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-shadow */\nimport {Mutex} from 'async-mutex';\nimport {createRegistration} from './register';\nimport {\n getMobiusDiscoveryResponse,\n getMockRequestTemplate,\n getTestUtilsWebex,\n} from '../../common/testUtil';\nimport {RegistrationStatus, ServiceIndicator, WebexRequestPayload} from '../../common/types';\nimport * as utils from '../../common/Utils';\nimport log from '../../Logger';\nimport {LOGGER} from '../../Logger/types';\nimport {URL, mockDeleteResponse, mockPostResponse} from './registerFixtures';\nimport {filterMobiusUris} from '../../common';\nimport {ERROR_TYPE} from '../../Errors/types';\nimport {\n CALLS_CLEARED_HANDLER_UTIL,\n DEFAULT_REHOMING_INTERVAL_MAX,\n DEFAULT_REHOMING_INTERVAL_MIN,\n FAILBACK_429_RETRY_UTIL,\n FAILBACK_UTIL,\n KEEPALIVE_UTIL,\n MINUTES_TO_SEC_MFACTOR,\n REGISTRATION_FILE,\n REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC,\n REG_TRY_BACKUP_TIMER_VAL_IN_SEC,\n SEC_TO_MSEC_MFACTOR,\n} from '../constants';\nimport {ICall} from '../calling/types';\nimport {LINE_EVENTS} from '../line/types';\nimport {createLineError} from '../../Errors/catalog/LineError';\nimport {IRegistration} from './types';\n\nconst webex = getTestUtilsWebex();\nconst MockServiceData = {\n indicator: ServiceIndicator.CALLING,\n domain: '',\n};\nconst logSpy = jest.spyOn(log, 'info');\nconst warnSpy = jest.spyOn(log, 'warn');\nconst handleErrorSpy = jest.spyOn(utils, 'handleRegistrationErrors');\n\ndescribe('Registration Tests', () => {\n const originalProcessNextTick = process.nextTick;\n function flushPromises() {\n return new Promise((resolve) => {\n originalProcessNextTick(resolve);\n });\n }\n\n const lineEmitter = jest.fn();\n\n const mobiusUris = filterMobiusUris(getMobiusDiscoveryResponse(), URL);\n\n const mockResponse = {\n ...getMockRequestTemplate(),\n uri: `${mobiusUris.primary[0]}device`,\n body: {\n userId: webex.internal.device.userId,\n clientDeviceUri: webex.internal.device.url,\n serviceData: {\n domain: '',\n indicator: 'calling',\n },\n },\n };\n\n const ccMockResponse = {\n ...mockResponse,\n body: {\n ...mockResponse.body,\n serviceData: {\n domain: '',\n indicator: 'contactcenter',\n },\n },\n };\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 500,\n body: mockPostResponse,\n });\n\n const failurePayload429 = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: mockPostResponse,\n });\n\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockPostResponse,\n });\n\n let reg: IRegistration;\n let restartSpy;\n let failbackRetry429Spy;\n let restoreSpy;\n let postRegistrationSpy;\n\n const setupRegistration = (mockServiceData) => {\n const mutex = new Mutex();\n reg = createRegistration(webex, mockServiceData, mutex, lineEmitter, LOGGER.INFO);\n reg.setMobiusServers(mobiusUris.primary, mobiusUris.backup);\n jest.clearAllMocks();\n restartSpy = jest.spyOn(reg, 'restartRegistration');\n failbackRetry429Spy = jest.spyOn(reg, FAILBACK_429_RETRY_UTIL);\n restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n postRegistrationSpy = jest.spyOn(reg, 'postRegistration');\n };\n\n beforeEach(() => {\n setupRegistration(MockServiceData);\n });\n\n afterEach(() => {\n webex.request = jest.fn();\n jest.clearAllTimers();\n jest.clearAllMocks();\n jest.useRealTimers();\n });\n\n it('verify successful registration', async () => {\n webex.request.mockReturnValueOnce({\n body: mockPostResponse,\n });\n\n await reg.triggerRegistration();\n\n expect(webex.request).toBeCalledOnceWith({\n ...mockResponse,\n method: 'POST',\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(lineEmitter).toBeCalledTimes(2);\n expect(lineEmitter).toBeCalledWith(LINE_EVENTS.CONNECTING);\n expect(lineEmitter).toBeCalledWith(LINE_EVENTS.REGISTERED, mockPostResponse);\n });\n\n it('verify failure registration', async () => {\n webex.request.mockRejectedValue({\n body: mockPostResponse,\n statusCode: 401,\n });\n\n await reg.triggerRegistration();\n\n expect(webex.request).toBeCalledOnceWith({\n ...mockResponse,\n method: 'POST',\n });\n\n const error = createLineError(\n 'User is unauthorized due to an expired token. Sign out, then sign back in.',\n {},\n ERROR_TYPE.TOKEN_ERROR,\n RegistrationStatus.INACTIVE\n );\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(lineEmitter).toBeCalledTimes(2);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(2, LINE_EVENTS.ERROR, undefined, error);\n });\n\n it('verify failure registration 403-101', async () => {\n webex.request\n .mockRejectedValueOnce({\n body: {\n userId: mockPostResponse.userId,\n errorCode: 101,\n devices: [mockPostResponse.device],\n },\n statusCode: 403,\n })\n .mockResolvedValueOnce({\n statusCode: 200,\n body: mockPostResponse,\n });\n\n global.fetch = jest.fn(() => Promise.resolve({json: () => mockDeleteResponse})) as jest.Mock;\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n expect(webex.request).toBeCalledTimes(2);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n });\n expect(global.fetch).toBeCalledOnceWith(mockPostResponse.device.uri, {\n method: 'DELETE',\n headers: expect.anything(),\n });\n\n expect(warnSpy).toBeCalledWith('User device limit exceeded', expect.anything());\n expect(logSpy).toBeCalledWith('Registration restoration in progress.', expect.anything());\n expect(logSpy).toBeCalledWith('Registration restored successfully.', expect.anything());\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(lineEmitter).toBeCalledTimes(4);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(2, LINE_EVENTS.UNREGISTERED);\n expect(lineEmitter).nthCalledWith(3, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(4, LINE_EVENTS.REGISTERED, mockPostResponse);\n });\n\n describe('Registration failover tests', () => {\n it('verify unreachable primary with reachable backup servers', async () => {\n jest.useFakeTimers();\n // try the primary twice and register successfully with backup servers\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValueOnce(successPayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);\n });\n\n it('cc: verify unreachable primary with reachable backup server', async () => {\n setupRegistration({...MockServiceData, indicator: ServiceIndicator.CONTACT_CENTER});\n\n jest.useFakeTimers();\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValueOnce(successPayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toBeCalledWith({\n ...ccMockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...ccMockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);\n });\n\n it('verify unreachable primary and backup servers', async () => {\n jest.useFakeTimers();\n // try the primary twice and register successfully with backup servers\n webex.request.mockRejectedValue(failurePayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n /*\n * 2 calls for primary -> initial and after timer expiry.\n * 2 calls for each backup entry -> 2 * 2 = 4.\n * So a total of 6 calls to webex.request and handleErrors\n */\n expect(webex.request).toBeCalledTimes(6);\n expect(handleErrorSpy).toBeCalledTimes(6);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[1]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n });\n });\n\n describe('Registration failback tests', () => {\n beforeEach(async () => {\n /* keep keepalive as active so that it wont interfere with the failback tests */\n jest.spyOn(reg, 'postKeepAlive').mockResolvedValue(successPayload);\n jest.useFakeTimers();\n postRegistrationSpy\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValueOnce(successPayload);\n\n await reg.triggerRegistration();\n\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n reg.rehomingIntervalMin = DEFAULT_REHOMING_INTERVAL_MIN;\n reg.rehomingIntervalMax = DEFAULT_REHOMING_INTERVAL_MAX;\n\n /* These 2 calls to handleErrorSpy are for primary after which it fails over to backup */\n expect(handleErrorSpy).toBeCalledTimes(2);\n\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n });\n\n it('verify 429 error with failback to primary after initial registration with backup: Restore failure', async () => {\n // delete should be successful\n global.fetch = jest.fn(() => Promise.resolve({json: () => mockDeleteResponse})) as jest.Mock;\n\n postRegistrationSpy.mockRejectedValue(failurePayload429);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n\n expect(failbackRetry429Spy).toBeCalledOnceWith();\n expect(reg.failback429RetryAttempts).toBe(0);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_429_RETRY_UTIL);\n expect(restartSpy).toBeCalledOnceWith(FAILBACK_429_RETRY_UTIL);\n expect(reg.failbackTimer).toBe(undefined);\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore failure', async () => {\n postRegistrationSpy.mockRejectedValue(failurePayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(restartSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore failure with final error', async () => {\n const finalErrorPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 401,\n body: mockPostResponse,\n });\n postRegistrationSpy.mockClear();\n postRegistrationSpy\n .mockRejectedValue(finalErrorPayload)\n .mockRejectedValueOnce(failurePayload);\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(restartSpy).not.toBeCalled();\n expect(reg.failbackTimer).toBe(undefined);\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore success', async () => {\n postRegistrationSpy.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n /* Active Url should still match backup url */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(restartSpy).not.toBeCalled();\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify successful failback to primary after initial registration with backup', async () => {\n postRegistrationSpy.mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n\n /* Active Url must now match with the primary url */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.primary[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(reg.failbackTimer).toBe(undefined);\n expect(restoreSpy).not.toBeCalled();\n expect(reg.rehomingIntervalMin).toBe(mockPostResponse.rehomingIntervalMin);\n expect(reg.rehomingIntervalMax).toBe(mockPostResponse.rehomingIntervalMax);\n });\n\n it('verify unsuccessful failback attempt due to active call', async () => {\n /** create a new call */\n reg.callManager.createCall();\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(1);\n\n postRegistrationSpy.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Active calls present, deferring failback to next cycle.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n\n /* Active Url should still match backup url */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(restoreSpy).not.toBeCalled();\n expect(restartSpy).not.toBeCalled();\n\n expect(logSpy).toBeCalledWith('Active calls present, deferring failback to next cycle.', {\n file: REGISTRATION_FILE,\n method: FAILBACK_UTIL,\n });\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n });\n\n // Keep-alive related test cases\n describe('Keep-alive Tests', () => {\n const logObj = {\n file: REGISTRATION_FILE,\n method: 'startKeepaliveTimer',\n };\n const mockKeepAliveBody = {device: mockPostResponse.device};\n\n const beforeEachSetupForKeepalive = async () => {\n postRegistrationSpy.mockResolvedValueOnce(successPayload);\n jest.useFakeTimers();\n await reg.triggerRegistration();\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n };\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n\n if (reg.keepaliveTimer) {\n clearInterval(reg.keepaliveTimer);\n reg.keepaliveTimer = undefined;\n }\n reg.reconnectPending = false;\n const calls = Object.values(reg.callManager.getActiveCalls()) as ICall[];\n\n calls.forEach((call) => {\n call.end();\n });\n });\n\n it('verify successful keep-alive cases', async () => {\n await beforeEachSetupForKeepalive();\n const keepAlivePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n webex.request.mockReturnValue(keepAlivePayload);\n\n const funcSpy = jest.spyOn(reg, 'postKeepAlive');\n\n jest.advanceTimersByTime(2 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n expect(funcSpy).toBeCalledTimes(2); // should be called 2 times: first try and after the interval.\n expect(logSpy).lastCalledWith('Sent Keepalive, status: 200', logObj);\n });\n\n it('verify failure keep-alive cases: Retry Success', async () => {\n await beforeEachSetupForKeepalive();\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n const successPayload = {\n statusCode: 200,\n body: mockKeepAliveBody,\n };\n\n const timer = reg.keepaliveTimer;\n\n lineEmitter.mockClear();\n webex.request.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n jest.advanceTimersByTime(2 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(handleErrorSpy).toBeCalledOnceWith(failurePayload, expect.anything(), {\n method: 'startKeepaliveTimer',\n file: REGISTRATION_FILE,\n });\n\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(reg.keepaliveTimer).toBe(timer);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.RECONNECTING);\n expect(lineEmitter).nthCalledWith(2, LINE_EVENTS.RECONNECTED);\n expect(lineEmitter).toBeCalledTimes(2);\n });\n\n it('verify failure keep-alive cases: Restore failure', async () => {\n await beforeEachSetupForKeepalive();\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n lineEmitter.mockClear();\n\n webex.request.mockRejectedValue(failurePayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n\n const timer = reg.keepaliveTimer;\n\n jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n\n // sendKeepAlive tries to retry 5 times before accepting failure\n // later 2 attempts to register with primary server\n expect(handleErrorSpy).toBeCalledTimes(7);\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(reconnectSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restoreSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restartRegSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n\n expect(webex.request).toBeCalledTimes(7);\n expect(reg.keepaliveTimer).toBe(undefined);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.RECONNECTING);\n expect(lineEmitter).nthCalledWith(4, LINE_EVENTS.RECONNECTING);\n expect(lineEmitter).nthCalledWith(5, LINE_EVENTS.UNREGISTERED);\n\n /** there will be 2 registration attempts */\n expect(lineEmitter).nthCalledWith(6, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(7, LINE_EVENTS.UNREGISTERED);\n expect(lineEmitter).nthCalledWith(8, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(9, LINE_EVENTS.UNREGISTERED);\n expect(lineEmitter).toBeCalledTimes(9);\n });\n\n it('verify failure keep-alive cases: Restore Success', async () => {\n await beforeEachSetupForKeepalive();\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n /* successful registration */\n // webex.request.mockResolvedValue(successPayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n\n const url = 'https://mobius.asydm-m-1.prod.infra.webex.com/api/v1';\n\n /* set active Url and expect the registration to restore to this url */\n reg.setActiveMobiusUrl(url);\n\n const timer = reg.keepaliveTimer;\n\n jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n expect(handleErrorSpy).toBeCalledTimes(5);\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(reconnectSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restoreSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.getActiveMobiusUrl()).toStrictEqual(url);\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(reg.keepaliveTimer).toBeTruthy();\n expect(reg.keepaliveTimer).not.toBe(timer);\n });\n\n it('verify failure followed by recovery of keepalive', async () => {\n await beforeEachSetupForKeepalive();\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n\n const timer = reg.keepaliveTimer;\n\n // sendKeepAlive tries to retry 3 times and receiving success on third time\n jest.advanceTimersByTime(3 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toBeCalledTimes(3);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(handleErrorSpy).toBeCalledTimes(2);\n expect(clearIntervalSpy).not.toBeCalled();\n expect(reg.keepaliveTimer).toBe(timer);\n });\n\n it('cc: verify failover to backup server after 4 keep alive failure with primary server', async () => {\n // Register with contact center service\n setupRegistration({...MockServiceData, indicator: ServiceIndicator.CONTACT_CENTER});\n await beforeEachSetupForKeepalive();\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n jest\n .spyOn(reg, 'postKeepAlive')\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n\n const timer = reg.keepaliveTimer;\n\n jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(reg.keepaliveTimer).not.toBe(timer);\n\n webex.request.mockResolvedValue(successPayload);\n\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n });\n\n it('verify final error for keep-alive', async () => {\n await beforeEachSetupForKeepalive();\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 404,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request.mockRejectedValue(failurePayload);\n\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n\n /* send one keepalive */\n jest.advanceTimersByTime(mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledTimes(1);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(reconnectSpy).not.toBeCalled();\n expect(restoreSpy).not.toBeCalled();\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(webex.request).toBeCalledOnceWith({\n headers: mockResponse.headers,\n uri: `${mockKeepAliveBody.device.uri}/status`,\n method: 'POST',\n service: mockResponse.service,\n });\n expect(reg.keepaliveTimer).toBe(undefined);\n expect(handleErrorSpy).toBeCalledOnceWith(failurePayload, expect.anything(), {\n file: REGISTRATION_FILE,\n method: KEEPALIVE_UTIL,\n });\n });\n\n it('verify failure keep-alive case with active call present: Restore Success after call ends', async () => {\n await beforeEachSetupForKeepalive();\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n // jest.spyOn(callingClient['registration'], 'createDevice').mockResolvedValue(successPayload);\n\n const url = 'https://mobius.asydm-m-1.prod.infra.webex.com/api/v1';\n\n reg.setActiveMobiusUrl(url);\n\n expect(reg.reconnectPending).toStrictEqual(false);\n\n const timer = reg.keepaliveTimer;\n\n /* add a call to the callManager */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const call = reg.callManager.createCall();\n\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(1);\n\n /* send one keepalive */\n jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n expect(handleErrorSpy).toBeCalledTimes(5);\n expect(reg.keepaliveTimer).toStrictEqual(undefined);\n expect(reg.failbackTimer).toStrictEqual(undefined);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(lineEmitter).lastCalledWith(LINE_EVENTS.UNREGISTERED);\n expect(reconnectSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restoreSpy).not.toBeCalled();\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.reconnectPending).toStrictEqual(true);\n expect(logSpy).toBeCalledWith(\n 'Active call(s) present, deferred reconnect till call cleanup.',\n {file: REGISTRATION_FILE, method: expect.any(String)}\n );\n\n reconnectSpy.mockClear();\n\n /* simulate call disconnect and Calling client will trigger reconnect upon receiving disconnect event from CallManager */\n reg.callManager.callCollection = {};\n await reg.reconnectOnFailure(CALLS_CLEARED_HANDLER_UTIL);\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(0);\n\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(reconnectSpy).toBeCalledOnceWith(CALLS_CLEARED_HANDLER_UTIL);\n expect(restoreSpy).toBeCalledOnceWith(CALLS_CLEARED_HANDLER_UTIL);\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(reg.getActiveMobiusUrl()).toStrictEqual(url);\n expect(reg.keepaliveTimer).toBeTruthy();\n expect(reg.keepaliveTimer).not.toBe(timer);\n });\n });\n});\n"],"mappings":"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"}
1
+ {"version":3,"names":["_asyncMutex","require","_register","_testUtil","_types","utils","_interopRequireWildcard","_Logger","_interopRequireDefault","_types2","_registerFixtures","_common","_types3","_constants","_types4","_LineError","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","webex","getTestUtilsWebex","MockServiceData","indicator","ServiceIndicator","CALLING","domain","logSpy","jest","spyOn","log","warnSpy","handleErrorSpy","describe","originalProcessNextTick","process","nextTick","flushPromises","_promise","resolve","lineEmitter","fn","mobiusUris","filterMobiusUris","getMobiusDiscoveryResponse","URL","mockResponse","getMockRequestTemplate","uri","concat","primary","body","userId","internal","device","clientDeviceUri","url","serviceData","ccMockResponse","failurePayload","statusCode","mockPostResponse","failurePayload429One","headers","failurePayload429Two","failurePayload429Three","failurePayload429Four","successPayload","reg","restartSpy","restoreSpy","postRegistrationSpy","failoverSpy","retry429Spy","setupRegistration","mockServiceData","mutex","Mutex","createRegistration","LOGGER","INFO","setMobiusServers","backup","clearAllMocks","beforeEach","afterEach","request","clearAllTimers","useRealTimers","it","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","mockReturnValueOnce","triggerRegistration","expect","toBeCalledOnceWith","method","getStatus","toEqual","RegistrationStatus","ACTIVE","toBeCalledTimes","toBeCalledWith","LINE_EVENTS","CONNECTING","REGISTERED","stop","_callee2","error","_callee2$","_context2","mockRejectedValue","createLineError","ERROR_TYPE","TOKEN_ERROR","INACTIVE","nthCalledWith","ERROR","undefined","_callee3","_callee3$","_context3","mockRejectedValueOnce","errorCode","devices","mockResolvedValueOnce","global","fetch","json","mockDeleteResponse","IDLE","anything","UNREGISTERED","loggerContext","file","REGISTRATION_FILE","FAILOVER_UTIL","pop","_callee4","_callee4$","_context4","useFakeTimers","mockClear","toHaveBeenNthCalledWith","retryAfter","advanceTimersByTime","Number","SEC_TO_MSEC_MFACTOR","not","toBeCalled","_callee5","_callee5$","_context5","isCCFlow","_callee6","_callee6$","_context6","_callee7","_callee7$","_context7","REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC","_callee8","_callee8$","_context8","_callee9","_callee9$","_context9","_callee10","_callee10$","_context10","REG_TRY_BACKUP_TIMER_VAL_IN_SEC","getActiveMobiusUrl","_callee11","_callee11$","_context11","CONTACT_CENTER","_callee12","_callee12$","_context12","_callee13","_callee13$","_context13","mockResolvedValue","rehomingIntervalMin","DEFAULT_REHOMING_INTERVAL_MIN","rehomingIntervalMax","DEFAULT_REHOMING_INTERVAL_MAX","toStrictEqual","_callee14","_callee14$","_context14","MINUTES_TO_SEC_MFACTOR","failback429RetryAttempts","toBe","REG_429_RETRY_UTIL","failbackTimer","_callee15","_callee15$","_context15","FAILBACK_UTIL","_callee16","finalErrorPayload","_callee16$","_context16","_callee17","_callee17$","_context17","_callee18","_callee18$","_context18","_callee19","_callee19$","_context19","callManager","createCall","_keys","getActiveCalls","logObj","mockKeepAliveBody","beforeEachSetupForKeepalive","_ref20","_callee20","_callee20$","_context20","keepaliveTimer","clearInterval","reconnectPending","calls","_values","end","_callee21","keepAlivePayload","funcSpy","_callee21$","_context21","mockReturnValue","keepaliveInterval","lastCalledWith","_callee22","timer","_callee22$","_context22","RECONNECTING","RECONNECTED","_callee23","restartRegSpy","reconnectSpy","clearIntervalSpy","_callee23$","_context23","KEEPALIVE_UTIL","_callee24","_callee24$","_context24","setActiveMobiusUrl","toBeTruthy","_callee25","_callee25$","_context25","_callee26","_callee26$","_context26","_callee27","_callee27$","_context27","service","_callee28","_callee28$","_context28","any","String","callCollection","reconnectOnFailure","CALLS_CLEARED_HANDLER_UTIL"],"sources":["register.test.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-shadow */\nimport {Mutex} from 'async-mutex';\nimport {createRegistration} from './register';\nimport {\n getMobiusDiscoveryResponse,\n getMockRequestTemplate,\n getTestUtilsWebex,\n} from '../../common/testUtil';\nimport {RegistrationStatus, ServiceIndicator, WebexRequestPayload} from '../../common/types';\nimport * as utils from '../../common/Utils';\nimport log from '../../Logger';\nimport {LOGGER} from '../../Logger/types';\nimport {URL, mockDeleteResponse, mockPostResponse} from './registerFixtures';\nimport {filterMobiusUris} from '../../common';\nimport {ERROR_TYPE} from '../../Errors/types';\nimport {\n CALLS_CLEARED_HANDLER_UTIL,\n DEFAULT_REHOMING_INTERVAL_MAX,\n DEFAULT_REHOMING_INTERVAL_MIN,\n FAILBACK_UTIL,\n FAILOVER_UTIL,\n KEEPALIVE_UTIL,\n MINUTES_TO_SEC_MFACTOR,\n REGISTRATION_FILE,\n REG_429_RETRY_UTIL,\n REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC,\n REG_TRY_BACKUP_TIMER_VAL_IN_SEC,\n SEC_TO_MSEC_MFACTOR,\n} from '../constants';\nimport {ICall} from '../calling/types';\nimport {LINE_EVENTS} from '../line/types';\nimport {createLineError} from '../../Errors/catalog/LineError';\nimport {IRegistration} from './types';\n\nconst webex = getTestUtilsWebex();\nconst MockServiceData = {\n indicator: ServiceIndicator.CALLING,\n domain: '',\n};\nconst logSpy = jest.spyOn(log, 'info');\nconst warnSpy = jest.spyOn(log, 'warn');\nconst handleErrorSpy = jest.spyOn(utils, 'handleRegistrationErrors');\n\ndescribe('Registration Tests', () => {\n const originalProcessNextTick = process.nextTick;\n function flushPromises() {\n return new Promise((resolve) => {\n originalProcessNextTick(resolve);\n });\n }\n\n const lineEmitter = jest.fn();\n\n const mobiusUris = filterMobiusUris(getMobiusDiscoveryResponse(), URL);\n\n const mockResponse = {\n ...getMockRequestTemplate(),\n uri: `${mobiusUris.primary[0]}device`,\n body: {\n userId: webex.internal.device.userId,\n clientDeviceUri: webex.internal.device.url,\n serviceData: {\n domain: '',\n indicator: 'calling',\n },\n },\n };\n\n const ccMockResponse = {\n ...mockResponse,\n body: {\n ...mockResponse.body,\n serviceData: {\n domain: '',\n indicator: 'contactcenter',\n },\n },\n };\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 500,\n body: mockPostResponse,\n });\n\n const failurePayload429One = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: mockPostResponse,\n headers: {\n 'retry-after': 42,\n },\n });\n\n const failurePayload429Two = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: mockPostResponse,\n headers: {\n 'retry-after': 33,\n },\n });\n\n const failurePayload429Three = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: mockPostResponse,\n headers: {\n 'retry-after': 136,\n },\n });\n\n const failurePayload429Four = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: mockPostResponse,\n headers: {\n 'retry-after': 81,\n },\n });\n\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockPostResponse,\n });\n\n let reg: IRegistration;\n let restartSpy;\n let restoreSpy;\n let postRegistrationSpy;\n let failoverSpy;\n let retry429Spy;\n\n const setupRegistration = (mockServiceData) => {\n const mutex = new Mutex();\n reg = createRegistration(webex, mockServiceData, mutex, lineEmitter, LOGGER.INFO);\n reg.setMobiusServers(mobiusUris.primary, mobiusUris.backup);\n jest.clearAllMocks();\n restartSpy = jest.spyOn(reg, 'restartRegistration');\n restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n postRegistrationSpy = jest.spyOn(reg, 'postRegistration');\n failoverSpy = jest.spyOn(reg, 'startFailoverTimer');\n retry429Spy = jest.spyOn(reg, 'handle429Retry');\n };\n\n beforeEach(() => {\n setupRegistration(MockServiceData);\n });\n\n afterEach(() => {\n webex.request = jest.fn();\n jest.clearAllTimers();\n jest.clearAllMocks();\n jest.useRealTimers();\n });\n\n it('verify successful registration', async () => {\n webex.request.mockReturnValueOnce({\n body: mockPostResponse,\n });\n\n await reg.triggerRegistration();\n\n expect(webex.request).toBeCalledOnceWith({\n ...mockResponse,\n method: 'POST',\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(lineEmitter).toBeCalledTimes(2);\n expect(lineEmitter).toBeCalledWith(LINE_EVENTS.CONNECTING);\n expect(lineEmitter).toBeCalledWith(LINE_EVENTS.REGISTERED, mockPostResponse);\n });\n\n it('verify failure registration', async () => {\n webex.request.mockRejectedValue({\n body: mockPostResponse,\n statusCode: 401,\n });\n\n await reg.triggerRegistration();\n\n expect(webex.request).toBeCalledOnceWith({\n ...mockResponse,\n method: 'POST',\n });\n\n const error = createLineError(\n 'User is unauthorized due to an expired token. Sign out, then sign back in.',\n {},\n ERROR_TYPE.TOKEN_ERROR,\n RegistrationStatus.INACTIVE\n );\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(lineEmitter).toBeCalledTimes(2);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(2, LINE_EVENTS.ERROR, undefined, error);\n });\n\n it('verify failure registration 403-101', async () => {\n webex.request\n .mockRejectedValueOnce({\n body: {\n userId: mockPostResponse.userId,\n errorCode: 101,\n devices: [mockPostResponse.device],\n },\n statusCode: 403,\n })\n .mockResolvedValueOnce({\n statusCode: 200,\n body: mockPostResponse,\n });\n\n global.fetch = jest.fn(() => Promise.resolve({json: () => mockDeleteResponse})) as jest.Mock;\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n expect(webex.request).toBeCalledTimes(2);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n });\n expect(global.fetch).toBeCalledOnceWith(mockPostResponse.device.uri, {\n method: 'DELETE',\n headers: expect.anything(),\n });\n\n expect(warnSpy).toBeCalledWith('User device limit exceeded', expect.anything());\n expect(logSpy).toBeCalledWith('Registration restoration in progress.', expect.anything());\n expect(logSpy).toBeCalledWith('Registration restored successfully.', expect.anything());\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(lineEmitter).toBeCalledTimes(4);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(2, LINE_EVENTS.UNREGISTERED);\n expect(lineEmitter).nthCalledWith(3, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(4, LINE_EVENTS.REGISTERED, mockPostResponse);\n });\n\n describe('429 handling tests', () => {\n const loggerContext = {\n file: REGISTRATION_FILE,\n method: FAILOVER_UTIL,\n };\n const logSpy = jest.spyOn(log, 'log');\n\n beforeEach(() => {\n mobiusUris.backup.pop();\n });\n\n afterEach(() => {\n mobiusUris.backup.push(URL);\n jest.clearAllMocks();\n });\n\n it('handle 429 received during initial registration failure and first attempt with primary', async () => {\n jest.useFakeTimers();\n logSpy.mockClear();\n webex.request\n .mockRejectedValueOnce(failurePayload429One)\n .mockRejectedValueOnce(failurePayload429Two)\n .mockRejectedValueOnce(failurePayload);\n\n await reg.triggerRegistration();\n\n /* Initial registration failed with 429 with higher retyrAfter, interval should be updtaed with retryAfter.\n * The first attempt to register with primary should be made after retryAfter seconds.\n */\n\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(retry429Spy).toBeCalledOnceWith(\n failurePayload429One.headers['retry-after'],\n 'triggerRegistration'\n );\n expect(reg.retryAfter).toEqual(failurePayload429One.headers['retry-after']);\n expect(failoverSpy).toBeCalledOnceWith();\n\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with primary in ${failurePayload429One.headers['retry-after']} seconds, number of attempts : 1`,\n loggerContext\n );\n\n retry429Spy.mockClear();\n failoverSpy.mockClear();\n jest.advanceTimersByTime(\n Number(failurePayload429One.headers['retry-after']) * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n /* The first attempt to register with primary failed with 429 with lower retryAfter, interval should remain the same.\n * The second attempt to register with primary will be scheduled as per the interval calculated.\n */\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(retry429Spy).toBeCalledOnceWith(\n failurePayload429Two.headers['retry-after'],\n 'startFailoverTimer'\n );\n expect(reg.retryAfter).toEqual(failurePayload429Two.headers['retry-after']);\n expect(failoverSpy).toBeCalledOnceWith(2, failurePayload429One.headers['retry-after']);\n\n retry429Spy.mockClear();\n failoverSpy.mockClear();\n jest.advanceTimersByTime(43 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n /* The second attempt to register with primary failed with 500, the retryAfter should be undefined.\n * The third attempt to register with primary will be scheduled as per the interval calculated.\n */\n expect(webex.request).toHaveBeenNthCalledWith(3, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(retry429Spy).not.toBeCalled();\n expect(reg.retryAfter).toEqual(undefined);\n expect(failoverSpy).toBeCalledOnceWith(3, 85);\n });\n\n it('handle 429 received with higher retryAfter than the interval when interval with elapsedTime is already reaching threshold timer so we failover immediately', async () => {\n reg.isCCFlow = true;\n jest\n .spyOn(reg as any, 'getRegRetryInterval')\n .mockReturnValueOnce(33)\n .mockReturnValueOnce(40)\n .mockReturnValueOnce(47)\n .mockReturnValueOnce(52);\n jest.useFakeTimers();\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload429One)\n .mockResolvedValueOnce(successPayload);\n\n await reg.triggerRegistration();\n\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(retry429Spy).not.toBeCalled();\n expect(failoverSpy).toBeCalledOnceWith();\n\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with primary in 33 seconds, number of attempts : 1`,\n loggerContext\n );\n\n failoverSpy.mockClear();\n jest.advanceTimersByTime(33 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(retry429Spy).not.toBeCalled();\n expect(failoverSpy).toBeCalledOnceWith(2, 33);\n\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with primary in 40 seconds, number of attempts : 2`,\n loggerContext\n );\n\n logSpy.mockClear();\n failoverSpy.mockClear();\n jest.advanceTimersByTime(40 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toHaveBeenNthCalledWith(3, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(retry429Spy).toBeCalledOnceWith(\n failurePayload429One.headers['retry-after'],\n 'startFailoverTimer'\n );\n expect(failoverSpy).toBeCalledOnceWith(3, 73);\n\n expect(logSpy).not.toBeCalledWith(\n `Scheduled retry with primary in ${failurePayload429One.headers['retry-after']} seconds, number of attempts : 3`,\n loggerContext\n );\n\n expect(logSpy).toBeCalledWith(`Failing over to backup servers.`, loggerContext);\n\n expect(webex.request).toHaveBeenNthCalledWith(4, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n });\n\n it('handle 429 received while the last attempt for primary', async () => {\n reg.isCCFlow = true;\n jest\n .spyOn(reg as any, 'getRegRetryInterval')\n .mockReturnValueOnce(33)\n .mockReturnValueOnce(40)\n .mockReturnValueOnce(47)\n .mockReturnValueOnce(52);\n jest.useFakeTimers();\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload429One)\n .mockResolvedValueOnce(successPayload);\n\n await reg.triggerRegistration();\n\n /* Initial registration and first 2 attempts with primary failed with non-final 5xx error responses.\n * Last attempt with primary failed with 429, the retryAfter should be used to schedule the next attempt but\n * the failover is triggered before the scheduling logic kicks in.\n */\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(retry429Spy).not.toBeCalled();\n expect(failoverSpy).toBeCalledOnceWith();\n\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with primary in 33 seconds, number of attempts : 1`,\n loggerContext\n );\n\n failoverSpy.mockClear();\n jest.advanceTimersByTime(33 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(retry429Spy).not.toBeCalled();\n expect(failoverSpy).toBeCalledOnceWith(2, 33);\n\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with primary in 40 seconds, number of attempts : 2`,\n loggerContext\n );\n\n logSpy.mockClear();\n failoverSpy.mockClear();\n jest.advanceTimersByTime(40 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toHaveBeenNthCalledWith(3, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(retry429Spy).not.toBeCalled();\n expect(failoverSpy).toBeCalledOnceWith(3, 73);\n\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with primary in 41 seconds, number of attempts : 3`,\n loggerContext\n );\n\n failoverSpy.mockClear();\n jest.advanceTimersByTime(41 * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toHaveBeenNthCalledWith(4, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(retry429Spy).toBeCalledOnceWith(\n failurePayload429One.headers['retry-after'],\n 'startFailoverTimer'\n );\n expect(failoverSpy).toBeCalledOnceWith(4, 114);\n\n expect(logSpy).toBeCalledWith(`Failing over to backup servers.`, loggerContext);\n\n expect(webex.request).toHaveBeenNthCalledWith(5, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n });\n\n it('handle 429 received while failing over to backup server for CC flow', async () => {\n reg.isCCFlow = true;\n jest.useFakeTimers();\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload429One)\n .mockResolvedValueOnce(successPayload);\n\n await reg.triggerRegistration();\n\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n /* Failover to backup server failed with 429, the retryAfter is used to schedule the next attempt with backup server.\n * Interval will be updated with retryAfter as interval calculated is less than the retryAfter.\n */\n expect(webex.request).toHaveBeenNthCalledWith(3, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n\n expect(retry429Spy).toBeCalledOnceWith(\n failurePayload429One.headers['retry-after'],\n 'startFailoverTimer'\n );\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with backup servers in ${failurePayload429One.headers['retry-after']} seconds.`,\n loggerContext\n );\n\n webex.request.mockClear();\n jest.advanceTimersByTime(\n Number(failurePayload429One.headers['retry-after']) * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(webex.request).toBeCalledOnceWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n });\n\n it('checking the retryAfter exceeding the threshold timers in first attempt itself', async () => {\n reg.isCCFlow = true;\n jest.useFakeTimers();\n jest.spyOn(reg as any, 'getRegRetryInterval').mockReturnValueOnce(40);\n webex.request.mockRejectedValueOnce(failurePayload429Three);\n\n await reg.triggerRegistration();\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(failoverSpy).toBeCalledOnceWith();\n\n expect(logSpy).not.toBeCalledWith(\n `Scheduled retry with primary in 40 seconds, number of attempts : 1`,\n loggerContext\n );\n\n expect(logSpy).not.toBeCalledWith(\n `Scheduled retry with primary in ${failurePayload429Three.headers['retry-after']} seconds, number of attempts : 1`,\n loggerContext\n );\n\n expect(logSpy).toBeCalledWith(`Failing over to backup servers.`, loggerContext);\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n });\n\n it('checking the retryAfter exceeding the threshold timers in later attempts', async () => {\n reg.isCCFlow = true;\n jest.useFakeTimers();\n jest\n .spyOn(reg as any, 'getRegRetryInterval')\n .mockReturnValueOnce(39)\n .mockReturnValueOnce(43);\n webex.request\n .mockRejectedValueOnce(failurePayload429One)\n .mockRejectedValueOnce(failurePayload429Four)\n .mockResolvedValueOnce(successPayload);\n\n await reg.triggerRegistration();\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(failoverSpy).toBeCalledOnceWith();\n\n expect(logSpy).toBeCalledWith(\n `Scheduled retry with primary in ${failurePayload429One.headers['retry-after']} seconds, number of attempts : 1`,\n loggerContext\n );\n\n failoverSpy.mockClear();\n jest.advanceTimersByTime(\n Number(failurePayload429One.headers['retry-after']) * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(failoverSpy).toBeCalledOnceWith(2, failurePayload429One.headers['retry-after']);\n\n expect(logSpy).not.toBeCalledWith(\n `Scheduled retry with primary in 43 seconds, number of attempts : 2`,\n loggerContext\n );\n\n expect(logSpy).toBeCalledWith(`Failing over to backup servers.`, loggerContext);\n\n expect(logSpy).not.toBeCalledWith(\n `Scheduled retry with primary in ${failurePayload429Four.headers['retry-after']} seconds, number of attempts : 2`,\n loggerContext\n );\n\n expect(logSpy).toBeCalledWith(`Failing over to backup servers.`, loggerContext);\n\n expect(webex.request).toHaveBeenNthCalledWith(3, {\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n });\n });\n\n describe('Registration failover tests', () => {\n it('verify unreachable primary with reachable backup servers', async () => {\n jest.useFakeTimers();\n // try the primary twice and register successfully with backup servers\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValueOnce(successPayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);\n });\n\n it('cc: verify unreachable primary with reachable backup server', async () => {\n setupRegistration({...MockServiceData, indicator: ServiceIndicator.CONTACT_CENTER});\n\n jest.useFakeTimers();\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValueOnce(successPayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toBeCalledWith({\n ...ccMockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...ccMockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);\n });\n\n it('verify unreachable primary and backup servers', async () => {\n jest.useFakeTimers();\n // try the primary twice and register successfully with backup servers\n webex.request.mockRejectedValue(failurePayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n /*\n * 2 calls for primary -> initial and after timer expiry.\n * 2 calls for each backup entry -> 2 * 2 = 4.\n * So a total of 6 calls to webex.request and handleErrors\n */\n expect(webex.request).toBeCalledTimes(6);\n expect(handleErrorSpy).toBeCalledTimes(6);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[1]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n });\n });\n\n describe('Registration failback tests', () => {\n beforeEach(async () => {\n /* keep keepalive as active so that it wont interfere with the failback tests */\n jest.spyOn(reg, 'postKeepAlive').mockResolvedValue(successPayload);\n jest.useFakeTimers();\n postRegistrationSpy\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValueOnce(successPayload);\n\n await reg.triggerRegistration();\n\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n reg.rehomingIntervalMin = DEFAULT_REHOMING_INTERVAL_MIN;\n reg.rehomingIntervalMax = DEFAULT_REHOMING_INTERVAL_MAX;\n\n /* These 2 calls to handleErrorSpy are for primary after which it fails over to backup */\n expect(handleErrorSpy).toBeCalledTimes(2);\n\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n });\n\n it('verify 429 error with failback to primary after initial registration with backup: Restore failure', async () => {\n // delete should be successful\n global.fetch = jest.fn(() => Promise.resolve({json: () => mockDeleteResponse})) as jest.Mock;\n\n postRegistrationSpy.mockRejectedValue(failurePayload429Two);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n\n jest.advanceTimersByTime(10000);\n await flushPromises();\n\n expect(retry429Spy).toBeCalledWith(\n failurePayload429Two.headers['retry-after'],\n 'executeFailback'\n );\n expect(reg.failback429RetryAttempts).toBe(0);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(REG_429_RETRY_UTIL);\n expect(restartSpy).toBeCalledOnceWith(REG_429_RETRY_UTIL);\n expect(reg.failbackTimer).toBe(undefined);\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore failure', async () => {\n postRegistrationSpy.mockRejectedValue(failurePayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(restartSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore failure with final error', async () => {\n const finalErrorPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 401,\n body: mockPostResponse,\n });\n postRegistrationSpy.mockClear();\n postRegistrationSpy\n .mockRejectedValue(finalErrorPayload)\n .mockRejectedValueOnce(failurePayload);\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(restartSpy).not.toBeCalled();\n expect(reg.failbackTimer).toBe(undefined);\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore success', async () => {\n postRegistrationSpy.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n /* Active Url should still match backup url */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(restartSpy).not.toBeCalled();\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify successful failback to primary after initial registration with backup', async () => {\n postRegistrationSpy.mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n\n /* Active Url must now match with the primary url */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.primary[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(reg.failbackTimer).toBe(undefined);\n expect(restoreSpy).not.toBeCalled();\n expect(reg.rehomingIntervalMin).toBe(mockPostResponse.rehomingIntervalMin);\n expect(reg.rehomingIntervalMax).toBe(mockPostResponse.rehomingIntervalMax);\n });\n\n it('verify unsuccessful failback attempt due to active call', async () => {\n /** create a new call */\n reg.callManager.createCall();\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(1);\n\n postRegistrationSpy.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Active calls present, deferring failback to next cycle.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n\n /* Active Url should still match backup url */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(restoreSpy).not.toBeCalled();\n expect(restartSpy).not.toBeCalled();\n\n expect(logSpy).toBeCalledWith('Active calls present, deferring failback to next cycle.', {\n file: REGISTRATION_FILE,\n method: FAILBACK_UTIL,\n });\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n });\n\n // Keep-alive related test cases\n describe('Keep-alive Tests', () => {\n const logObj = {\n file: REGISTRATION_FILE,\n method: 'startKeepaliveTimer',\n };\n const mockKeepAliveBody = {device: mockPostResponse.device};\n\n const beforeEachSetupForKeepalive = async () => {\n postRegistrationSpy.mockResolvedValueOnce(successPayload);\n jest.useFakeTimers();\n await reg.triggerRegistration();\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n };\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n\n if (reg.keepaliveTimer) {\n clearInterval(reg.keepaliveTimer);\n reg.keepaliveTimer = undefined;\n }\n reg.reconnectPending = false;\n const calls = Object.values(reg.callManager.getActiveCalls()) as ICall[];\n\n calls.forEach((call) => {\n call.end();\n });\n });\n\n it('verify successful keep-alive cases', async () => {\n await beforeEachSetupForKeepalive();\n const keepAlivePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n webex.request.mockReturnValue(keepAlivePayload);\n\n const funcSpy = jest.spyOn(reg, 'postKeepAlive');\n\n jest.advanceTimersByTime(2 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n expect(funcSpy).toBeCalledTimes(2); // should be called 2 times: first try and after the interval.\n expect(logSpy).lastCalledWith('Sent Keepalive, status: 200', logObj);\n });\n\n it('verify failure keep-alive cases: Retry Success', async () => {\n await beforeEachSetupForKeepalive();\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n const successPayload = {\n statusCode: 200,\n body: mockKeepAliveBody,\n };\n\n const timer = reg.keepaliveTimer;\n\n lineEmitter.mockClear();\n webex.request.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n jest.advanceTimersByTime(2 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(handleErrorSpy).toBeCalledOnceWith(failurePayload, expect.anything(), {\n method: 'startKeepaliveTimer',\n file: REGISTRATION_FILE,\n });\n\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(reg.keepaliveTimer).toBe(timer);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.RECONNECTING);\n expect(lineEmitter).nthCalledWith(2, LINE_EVENTS.RECONNECTED);\n expect(lineEmitter).toBeCalledTimes(2);\n });\n\n it('verify failure keep-alive cases: Restore failure', async () => {\n await beforeEachSetupForKeepalive();\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n lineEmitter.mockClear();\n\n webex.request.mockRejectedValue(failurePayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n\n const timer = reg.keepaliveTimer;\n\n jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n\n // sendKeepAlive tries to retry 5 times before accepting failure\n // later 2 attempts to register with primary server\n expect(handleErrorSpy).toBeCalledTimes(7);\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(reconnectSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restoreSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restartRegSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n\n expect(webex.request).toBeCalledTimes(7);\n expect(reg.keepaliveTimer).toBe(undefined);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.RECONNECTING);\n expect(lineEmitter).nthCalledWith(4, LINE_EVENTS.RECONNECTING);\n expect(lineEmitter).nthCalledWith(5, LINE_EVENTS.UNREGISTERED);\n\n /** there will be 2 registration attempts */\n expect(lineEmitter).nthCalledWith(6, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(7, LINE_EVENTS.UNREGISTERED);\n expect(lineEmitter).nthCalledWith(8, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(9, LINE_EVENTS.UNREGISTERED);\n expect(lineEmitter).toBeCalledTimes(9);\n });\n\n it('verify failure keep-alive cases: Restore Success', async () => {\n await beforeEachSetupForKeepalive();\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n /* successful registration */\n // webex.request.mockResolvedValue(successPayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n\n const url = 'https://mobius.asydm-m-1.prod.infra.webex.com/api/v1';\n\n /* set active Url and expect the registration to restore to this url */\n reg.setActiveMobiusUrl(url);\n\n const timer = reg.keepaliveTimer;\n\n jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n expect(handleErrorSpy).toBeCalledTimes(5);\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(reconnectSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restoreSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.getActiveMobiusUrl()).toStrictEqual(url);\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(reg.keepaliveTimer).toBeTruthy();\n expect(reg.keepaliveTimer).not.toBe(timer);\n });\n\n it('verify failure followed by recovery of keepalive', async () => {\n await beforeEachSetupForKeepalive();\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n\n const timer = reg.keepaliveTimer;\n\n // sendKeepAlive tries to retry 3 times and receiving success on third time\n jest.advanceTimersByTime(3 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toBeCalledTimes(3);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(handleErrorSpy).toBeCalledTimes(2);\n expect(clearIntervalSpy).not.toBeCalled();\n expect(reg.keepaliveTimer).toBe(timer);\n });\n\n it('cc: verify failover to backup server after 4 keep alive failure with primary server', async () => {\n // Register with contact center service\n setupRegistration({...MockServiceData, indicator: ServiceIndicator.CONTACT_CENTER});\n await beforeEachSetupForKeepalive();\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n jest\n .spyOn(reg, 'postKeepAlive')\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n\n const timer = reg.keepaliveTimer;\n\n jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(reg.keepaliveTimer).not.toBe(timer);\n\n webex.request.mockResolvedValue(successPayload);\n\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n });\n\n it('verify final error for keep-alive', async () => {\n await beforeEachSetupForKeepalive();\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 404,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request.mockRejectedValue(failurePayload);\n\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n\n /* send one keepalive */\n jest.advanceTimersByTime(mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledTimes(1);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(reconnectSpy).not.toBeCalled();\n expect(restoreSpy).not.toBeCalled();\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(webex.request).toBeCalledOnceWith({\n headers: mockResponse.headers,\n uri: `${mockKeepAliveBody.device.uri}/status`,\n method: 'POST',\n service: mockResponse.service,\n });\n expect(reg.keepaliveTimer).toBe(undefined);\n expect(handleErrorSpy).toBeCalledOnceWith(failurePayload, expect.anything(), {\n file: REGISTRATION_FILE,\n method: KEEPALIVE_UTIL,\n });\n });\n\n it('verify failure keep-alive case with active call present: Restore Success after call ends', async () => {\n await beforeEachSetupForKeepalive();\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n // jest.spyOn(callingClient['registration'], 'createDevice').mockResolvedValue(successPayload);\n\n const url = 'https://mobius.asydm-m-1.prod.infra.webex.com/api/v1';\n\n reg.setActiveMobiusUrl(url);\n\n expect(reg.reconnectPending).toStrictEqual(false);\n\n const timer = reg.keepaliveTimer;\n\n /* add a call to the callManager */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const call = reg.callManager.createCall();\n\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(1);\n\n /* send one keepalive */\n jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n expect(handleErrorSpy).toBeCalledTimes(5);\n expect(reg.keepaliveTimer).toStrictEqual(undefined);\n expect(reg.failbackTimer).toStrictEqual(undefined);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(lineEmitter).lastCalledWith(LINE_EVENTS.UNREGISTERED);\n expect(reconnectSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restoreSpy).not.toBeCalled();\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.reconnectPending).toStrictEqual(true);\n expect(logSpy).toBeCalledWith(\n 'Active call(s) present, deferred reconnect till call cleanup.',\n {file: REGISTRATION_FILE, method: expect.any(String)}\n );\n\n reconnectSpy.mockClear();\n\n /* simulate call disconnect and Calling client will trigger reconnect upon receiving disconnect event from CallManager */\n reg.callManager.callCollection = {};\n await reg.reconnectOnFailure(CALLS_CLEARED_HANDLER_UTIL);\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(0);\n\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(reconnectSpy).toBeCalledOnceWith(CALLS_CLEARED_HANDLER_UTIL);\n expect(restoreSpy).toBeCalledOnceWith(CALLS_CLEARED_HANDLER_UTIL);\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(reg.getActiveMobiusUrl()).toStrictEqual(url);\n expect(reg.keepaliveTimer).toBeTruthy();\n expect(reg.keepaliveTimer).not.toBe(timer);\n });\n });\n});\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {IDeviceInfo, RegistrationStatus} from '../../common/types';\n\nexport type Header = {\n [key: string]: string;\n};\n\nexport type restoreRegistrationCallBack = (\n restoreData: IDeviceInfo,\n caller: string\n) => Promise<boolean>;\n\n/**\n * Represents an interface for managing registration-related operations.\n */\nexport interface IRegistration {\n /**\n * Sets the primary and backup Mobius server URLs.\n *\n * @param primaryMobiusUris - An array of primary Mobius server URLs.\n * @param backupMobiusUris - An array of backup Mobius server URLs.\n */\n setMobiusServers(primaryMobiusUris: string[], backupMobiusUris: string[]): void;\n\n /**\n * Triggers the registration process with the given list of servers\n * Registration is attempted with primary and backup until it succeeds or the list is exhausted\n */\n triggerRegistration(): Promise<void>;\n\n /**\n * Checks if the device is currently registered.\n *\n */\n isDeviceRegistered(): boolean;\n\n /**\n * Sets the status of the registration.\n *\n * @param value - The registration status to set.\n */\n setStatus(value: RegistrationStatus): void;\n\n /**\n * Retrieves the current registration status.\n *\n */\n getStatus(): RegistrationStatus;\n\n /**\n * Retrieves information about the device as {@link IDeviceInfo}.\n *\n */\n getDeviceInfo(): IDeviceInfo;\n\n /**\n * Clears the keep-alive timer used for registration.\n */\n clearKeepaliveTimer(): void;\n\n /**\n * Deregisters the device.\n */\n deregister(): void;\n\n /**\n * Sets the active Mobius server URL to use for registration.\n *\n * @param url - The Mobius server URL to set as active.\n */\n setActiveMobiusUrl(url: string): void;\n\n /**\n * Retrieves the active Mobius server URL.\n *\n */\n getActiveMobiusUrl(): string;\n\n /**\n * Attempts to reconnect after a connection failure.\n *\n * @param caller - The caller's identifier for reconnection.\n */\n reconnectOnFailure(caller: string): Promise<void>;\n\n /**\n * Checks if a reconnection attempt is pending.\n *\n */\n isReconnectPending(): boolean;\n\n /**\n * Restores the connection and attempts refreshing existing registration with server.\n * Allows retry if not restored in the first attempt.\n *\n * @param retry - Set to `true` to trigger a retry after restoration.\n */\n handleConnectionRestoration(retry: boolean): Promise<boolean>;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {IDeviceInfo, RegistrationStatus} from '../../common/types';\n\nexport type Header = {\n [key: string]: string;\n};\n\nexport type restoreRegistrationCallBack = (\n restoreData: IDeviceInfo,\n caller: string\n) => Promise<boolean>;\n\nexport type retry429CallBack = (retryAfter: number, caller: string) => void;\n/**\n * Represents an interface for managing registration-related operations.\n */\nexport interface IRegistration {\n /**\n * Sets the primary and backup Mobius server URLs.\n *\n * @param primaryMobiusUris - An array of primary Mobius server URLs.\n * @param backupMobiusUris - An array of backup Mobius server URLs.\n */\n setMobiusServers(primaryMobiusUris: string[], backupMobiusUris: string[]): void;\n\n /**\n * Triggers the registration process with the given list of servers\n * Registration is attempted with primary and backup until it succeeds or the list is exhausted\n */\n triggerRegistration(): Promise<void>;\n\n /**\n * Checks if the device is currently registered.\n *\n */\n isDeviceRegistered(): boolean;\n\n /**\n * Sets the status of the registration.\n *\n * @param value - The registration status to set.\n */\n setStatus(value: RegistrationStatus): void;\n\n /**\n * Retrieves the current registration status.\n *\n */\n getStatus(): RegistrationStatus;\n\n /**\n * Retrieves information about the device as {@link IDeviceInfo}.\n *\n */\n getDeviceInfo(): IDeviceInfo;\n\n /**\n * Clears the keep-alive timer used for registration.\n */\n clearKeepaliveTimer(): void;\n\n /**\n * Deregisters the device.\n */\n deregister(): void;\n\n /**\n * Sets the active Mobius server URL to use for registration.\n *\n * @param url - The Mobius server URL to set as active.\n */\n setActiveMobiusUrl(url: string): void;\n\n /**\n * Retrieves the active Mobius server URL.\n *\n */\n getActiveMobiusUrl(): string;\n\n /**\n * Attempts to reconnect after a connection failure.\n *\n * @param caller - The caller's identifier for reconnection.\n */\n reconnectOnFailure(caller: string): Promise<void>;\n\n /**\n * Checks if a reconnection attempt is pending.\n *\n */\n isReconnectPending(): boolean;\n\n /**\n * Restores the connection and attempts refreshing existing registration with server.\n * Allows retry if not restored in the first attempt.\n *\n * @param retry - Set to `true` to trigger a retry after restoration.\n */\n handleConnectionRestoration(retry: boolean): Promise<boolean>;\n}\n"],"mappings":""}