@webex/calling 3.5.0 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/CallHistory/CallHistory.js +195 -67
  2. package/dist/CallHistory/CallHistory.js.map +1 -1
  3. package/dist/CallHistory/CallHistory.test.js +331 -108
  4. package/dist/CallHistory/CallHistory.test.js.map +1 -1
  5. package/dist/CallHistory/callHistoryFixtures.js +25 -1
  6. package/dist/CallHistory/callHistoryFixtures.js.map +1 -1
  7. package/dist/CallHistory/constants.js +4 -1
  8. package/dist/CallHistory/constants.js.map +1 -1
  9. package/dist/CallHistory/types.js.map +1 -1
  10. package/dist/CallingClient/CallingClient.js +2 -2
  11. package/dist/CallingClient/CallingClient.js.map +1 -1
  12. package/dist/CallingClient/CallingClient.test.js +1 -1
  13. package/dist/CallingClient/CallingClient.test.js.map +1 -1
  14. package/dist/CallingClient/calling/CallerId/index.js +14 -5
  15. package/dist/CallingClient/calling/CallerId/index.js.map +1 -1
  16. package/dist/CallingClient/calling/CallerId/index.test.js +6 -6
  17. package/dist/CallingClient/calling/CallerId/index.test.js.map +1 -1
  18. package/dist/CallingClient/calling/call.js +434 -348
  19. package/dist/CallingClient/calling/call.js.map +1 -1
  20. package/dist/CallingClient/calling/call.test.js +516 -386
  21. package/dist/CallingClient/calling/call.test.js.map +1 -1
  22. package/dist/CallingClient/calling/callManager.js +6 -6
  23. package/dist/CallingClient/calling/callManager.js.map +1 -1
  24. package/dist/CallingClient/calling/callManager.test.js +3 -3
  25. package/dist/CallingClient/calling/callManager.test.js.map +1 -1
  26. package/dist/CallingClient/calling/types.js +6 -1
  27. package/dist/CallingClient/calling/types.js.map +1 -1
  28. package/dist/CallingClient/constants.js +2 -3
  29. package/dist/CallingClient/constants.js.map +1 -1
  30. package/dist/CallingClient/line/index.js +14 -7
  31. package/dist/CallingClient/line/index.js.map +1 -1
  32. package/dist/CallingClient/line/line.test.js +84 -22
  33. package/dist/CallingClient/line/line.test.js.map +1 -1
  34. package/dist/CallingClient/line/types.js.map +1 -1
  35. package/dist/CallingClient/registration/register.js +79 -59
  36. package/dist/CallingClient/registration/register.js.map +1 -1
  37. package/dist/CallingClient/registration/register.test.js +1 -1
  38. package/dist/CallingClient/registration/register.test.js.map +1 -1
  39. package/dist/CallingClient/types.js.map +1 -1
  40. package/dist/Events/types.js +2 -0
  41. package/dist/Events/types.js.map +1 -1
  42. package/dist/common/Utils.js +18 -13
  43. package/dist/common/Utils.js.map +1 -1
  44. package/dist/common/Utils.test.js +97 -0
  45. package/dist/common/Utils.test.js.map +1 -1
  46. package/dist/common/constants.js +4 -3
  47. package/dist/common/constants.js.map +1 -1
  48. package/dist/common/types.js +1 -0
  49. package/dist/common/types.js.map +1 -1
  50. package/dist/module/CallHistory/CallHistory.js +64 -2
  51. package/dist/module/CallHistory/callHistoryFixtures.js +24 -0
  52. package/dist/module/CallHistory/constants.js +3 -0
  53. package/dist/module/CallingClient/CallingClient.js +1 -1
  54. package/dist/module/CallingClient/calling/CallerId/index.js +6 -6
  55. package/dist/module/CallingClient/calling/call.js +66 -22
  56. package/dist/module/CallingClient/calling/callManager.js +5 -5
  57. package/dist/module/CallingClient/calling/types.js +5 -0
  58. package/dist/module/CallingClient/constants.js +1 -2
  59. package/dist/module/CallingClient/line/index.js +14 -8
  60. package/dist/module/CallingClient/registration/register.js +12 -4
  61. package/dist/module/Events/types.js +2 -0
  62. package/dist/module/common/Utils.js +12 -5
  63. package/dist/module/common/constants.js +3 -2
  64. package/dist/module/common/types.js +1 -0
  65. package/dist/types/CallHistory/CallHistory.d.ts +4 -2
  66. package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
  67. package/dist/types/CallHistory/callHistoryFixtures.d.ts +6 -2
  68. package/dist/types/CallHistory/callHistoryFixtures.d.ts.map +1 -1
  69. package/dist/types/CallHistory/constants.d.ts +3 -0
  70. package/dist/types/CallHistory/constants.d.ts.map +1 -1
  71. package/dist/types/CallHistory/types.d.ts +9 -0
  72. package/dist/types/CallHistory/types.d.ts.map +1 -1
  73. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  74. package/dist/types/CallingClient/calling/CallerId/index.d.ts.map +1 -1
  75. package/dist/types/CallingClient/calling/call.d.ts +7 -5
  76. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  77. package/dist/types/CallingClient/calling/callManager.d.ts +1 -1
  78. package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
  79. package/dist/types/CallingClient/calling/types.d.ts +6 -2
  80. package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
  81. package/dist/types/CallingClient/constants.d.ts +1 -2
  82. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  83. package/dist/types/CallingClient/line/index.d.ts +3 -2
  84. package/dist/types/CallingClient/line/index.d.ts.map +1 -1
  85. package/dist/types/CallingClient/line/types.d.ts +1 -1
  86. package/dist/types/CallingClient/line/types.d.ts.map +1 -1
  87. package/dist/types/CallingClient/registration/register.d.ts +4 -2
  88. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  89. package/dist/types/CallingClient/types.d.ts +1 -0
  90. package/dist/types/CallingClient/types.d.ts.map +1 -1
  91. package/dist/types/Contacts/ContactsClient.d.ts +1 -1
  92. package/dist/types/Events/types.d.ts +15 -2
  93. package/dist/types/Events/types.d.ts.map +1 -1
  94. package/dist/types/Voicemail/UcmBackendConnector.d.ts +1 -1
  95. package/dist/types/Voicemail/WxCallBackendConnector.d.ts +1 -1
  96. package/dist/types/common/Utils.d.ts +2 -2
  97. package/dist/types/common/Utils.d.ts.map +1 -1
  98. package/dist/types/common/constants.d.ts +1 -0
  99. package/dist/types/common/constants.d.ts.map +1 -1
  100. package/dist/types/common/types.d.ts +2 -1
  101. package/dist/types/common/types.d.ts.map +1 -1
  102. package/package.json +3 -3
@@ -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.mockRejectedValueOnce(failurePayload).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","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 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import * as Media from '@webex/internal-media-core';\nimport {LOGGER} from '../Logger/types';\nimport {ISDKConnector} from '../SDKConnector/types';\nimport {Eventing} from '../Events/impl';\nimport {CallingClientEventTypes} from '../Events/types';\nimport {ServiceData} from '../common/types';\nimport {ICall} from './calling/types';\nimport {CallingClientError} from '../Errors';\nimport {ILine} from './line/types';\n\nexport interface LoggerConfig {\n level: LOGGER;\n}\n\ninterface DiscoveryConfig {\n country: string;\n region: string;\n}\n\nexport interface CallingClientConfig {\n logger?: LoggerConfig;\n discovery?: DiscoveryConfig;\n serviceData?: ServiceData;\n}\n\nexport type CallingClientErrorEmitterCallback = (\n err: CallingClientError,\n finalError?: boolean\n) => void;\n\n/**\n * An interface for the `CallingClient` module.\n * The `CallingClient` module is designed to provide a set of APIs related to line registration and calling functionalities within the SDK.\n *\n * @example\n * ```javascript\n * const callingClient = createClient(webex, callingConfig);\n * ```\n */\nexport interface ICallingClient extends Eventing<CallingClientEventTypes> {\n /**\n * Represents the `mediaEngine for managing media-related operations within the CallingClient.\n * The media engine provides access to audio and video devices such as cameras, microphones, and speakers within the media layer.\n *\n * @public\n * @example\n * ```\n * const microphones = await callingClient.mediaEngine.Media.getMicrophones();\n * const speakers = await callingClient.mediaEngine.Media.getSpeakers();\n * const cameras = await callingClient.mediaEngine.Media.getCameras();\n * ```\n */\n mediaEngine: typeof Media;\n\n /**\n * @ignore\n */\n getSDKConnector(): ISDKConnector;\n\n /**\n * @ignore\n */\n getLoggingLevel(): LOGGER;\n\n /**\n * Retrieves details of the line object(s) belonging to a user.\n *\n * This method gathers all the {@link ILine} objects and organizes them into a dictionary\n * where keys represent `lineId`s and values are arrays of {@link ILine} objects registered with\n * the `callingClient`\n *\n * @example\n * ```typescript\n * const lines = callingClient.getLines();\n * ```\n * The `lines` response object will have `lineId` as its key and\n * a list {@link ILine} objects as it's value.\n * ```\n * {\n * 'lineId1': lineObj1,\n * 'lineId2': lineObj2,\n * }\n * ```\n */\n getLines(): Record<string, ILine>;\n\n /**\n * Retrieves a dictionary of active calls grouped by `lineId`.\n *\n * This method gathers active {@link ICall} objects and organizes them into a dictionary\n * where keys represent `lineId`s and values are arrays of {@link ICall} objects of active calls associated\n * with each line.\n *\n * @example\n * ```typescript\n * const activeCalls = callingClient.getActiveCalls();\n * ```\n * The `activeCalls` response object will have `lineId` as its key and\n * a list {@link ICall} objects as it's value.\n *\n * ```\n * {\n * 'line1': [call1, call2],\n * 'line2': [call3],\n * }\n * ```\n */\n getActiveCalls(): Record<string, ICall[]>;\n\n /**\n * Retrieves the {@link ICall} object for the currently connected call in the client.\n *\n * This method iterates through active call objects and returns the call\n * that is currently connected (not on hold).\n *\n * @example\n * ```typescript\n * const connectedCall : ICall = callingClient.getConnectedCall();\n * ```\n * The `connectedCall` object will be the Call object of the connected call with the client\n */\n getConnectedCall(): ICall | undefined;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import * as Media from '@webex/internal-media-core';\nimport {LOGGER} from '../Logger/types';\nimport {ISDKConnector} from '../SDKConnector/types';\nimport {Eventing} from '../Events/impl';\nimport {CallingClientEventTypes} from '../Events/types';\nimport {ServiceData} from '../common/types';\nimport {ICall} from './calling/types';\nimport {CallingClientError} from '../Errors';\nimport {ILine} from './line/types';\n\nexport interface LoggerConfig {\n level: LOGGER;\n}\n\ninterface DiscoveryConfig {\n country: string;\n region: string;\n}\n\nexport interface CallingClientConfig {\n logger?: LoggerConfig;\n discovery?: DiscoveryConfig;\n serviceData?: ServiceData;\n jwe?: string;\n}\n\nexport type CallingClientErrorEmitterCallback = (\n err: CallingClientError,\n finalError?: boolean\n) => void;\n\n/**\n * An interface for the `CallingClient` module.\n * The `CallingClient` module is designed to provide a set of APIs related to line registration and calling functionalities within the SDK.\n *\n * @example\n * ```javascript\n * const callingClient = createClient(webex, callingConfig);\n * ```\n */\nexport interface ICallingClient extends Eventing<CallingClientEventTypes> {\n /**\n * Represents the `mediaEngine for managing media-related operations within the CallingClient.\n * The media engine provides access to audio and video devices such as cameras, microphones, and speakers within the media layer.\n *\n * @public\n * @example\n * ```\n * const microphones = await callingClient.mediaEngine.Media.getMicrophones();\n * const speakers = await callingClient.mediaEngine.Media.getSpeakers();\n * const cameras = await callingClient.mediaEngine.Media.getCameras();\n * ```\n */\n mediaEngine: typeof Media;\n\n /**\n * @ignore\n */\n getSDKConnector(): ISDKConnector;\n\n /**\n * @ignore\n */\n getLoggingLevel(): LOGGER;\n\n /**\n * Retrieves details of the line object(s) belonging to a user.\n *\n * This method gathers all the {@link ILine} objects and organizes them into a dictionary\n * where keys represent `lineId`s and values are arrays of {@link ILine} objects registered with\n * the `callingClient`\n *\n * @example\n * ```typescript\n * const lines = callingClient.getLines();\n * ```\n * The `lines` response object will have `lineId` as its key and\n * a list {@link ILine} objects as it's value.\n * ```\n * {\n * 'lineId1': lineObj1,\n * 'lineId2': lineObj2,\n * }\n * ```\n */\n getLines(): Record<string, ILine>;\n\n /**\n * Retrieves a dictionary of active calls grouped by `lineId`.\n *\n * This method gathers active {@link ICall} objects and organizes them into a dictionary\n * where keys represent `lineId`s and values are arrays of {@link ICall} objects of active calls associated\n * with each line.\n *\n * @example\n * ```typescript\n * const activeCalls = callingClient.getActiveCalls();\n * ```\n * The `activeCalls` response object will have `lineId` as its key and\n * a list {@link ICall} objects as it's value.\n *\n * ```\n * {\n * 'line1': [call1, call2],\n * 'line2': [call3],\n * }\n * ```\n */\n getActiveCalls(): Record<string, ICall[]>;\n\n /**\n * Retrieves the {@link ICall} object for the currently connected call in the client.\n *\n * This method iterates through active call objects and returns the call\n * that is currently connected (not on hold).\n *\n * @example\n * ```typescript\n * const connectedCall : ICall = callingClient.getConnectedCall();\n * ```\n * The `connectedCall` object will be the Call object of the connected call with the client\n */\n getConnectedCall(): ICall | undefined;\n}\n"],"mappings":""}
@@ -13,6 +13,7 @@ var COMMON_EVENT_KEYS = exports.COMMON_EVENT_KEYS = /*#__PURE__*/function (COMMO
13
13
  COMMON_EVENT_KEYS["CB_VOICEMESSAGE_CONTENT_GET"] = "call_back_voicemail_content_get";
14
14
  COMMON_EVENT_KEYS["CALL_HISTORY_USER_SESSION_INFO"] = "callHistory:user_recent_sessions";
15
15
  COMMON_EVENT_KEYS["CALL_HISTORY_USER_VIEWED_SESSIONS"] = "callHistory:user_viewed_sessions";
16
+ COMMON_EVENT_KEYS["CALL_HISTORY_USER_SESSIONS_DELETED"] = "callHistory:user_sessions_deleted";
16
17
  return COMMON_EVENT_KEYS;
17
18
  }({});
18
19
  var LINE_EVENT_KEYS = exports.LINE_EVENT_KEYS = /*#__PURE__*/function (LINE_EVENT_KEYS) {
@@ -72,6 +73,7 @@ var MOBIUS_EVENT_KEYS = exports.MOBIUS_EVENT_KEYS = /*#__PURE__*/function (MOBIU
72
73
  MOBIUS_EVENT_KEYS["CALL_SESSION_EVENT_INCLUSIVE"] = "event:janus.user_recent_sessions";
73
74
  MOBIUS_EVENT_KEYS["CALL_SESSION_EVENT_LEGACY"] = "event:janus.user_sessions";
74
75
  MOBIUS_EVENT_KEYS["CALL_SESSION_EVENT_VIEWED"] = "event:janus.user_viewed_sessions";
76
+ MOBIUS_EVENT_KEYS["CALL_SESSION_EVENT_DELETED"] = "event:janus.user_sessions_deleted";
75
77
  return MOBIUS_EVENT_KEYS;
76
78
  }({});
77
79
  var MEDIA_CONNECTION_EVENT_KEYS = exports.MEDIA_CONNECTION_EVENT_KEYS = /*#__PURE__*/function (MEDIA_CONNECTION_EVENT_KEYS) {
@@ -1 +1 @@
1
- {"version":3,"names":["_types","require","COMMON_EVENT_KEYS","exports","LINE_EVENT_KEYS","CALLING_CLIENT_EVENT_KEYS","CALL_EVENT_KEYS","SUPPLEMENTARY_SERVICES","MOBIUS_MIDCALL_STATE","Disposition","SessionType","MOBIUS_EVENT_KEYS","MEDIA_CONNECTION_EVENT_KEYS","CALL_STATE","WEBSOCKET_SCOPE","WEBSOCKET_KEYS"],"sources":["types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */ // TODO: remove once we define the payloads\nimport {ILine} from '../api';\nimport {LINE_EVENTS} from '../CallingClient/line/types';\nimport type {ICall} from '../CallingClient/calling/types';\nimport {CallId, DisplayInformation} from '../common/types';\nimport {CallError, CallingClientError, LineError} from '../Errors';\n\n/** External Eventing Start */\nexport enum COMMON_EVENT_KEYS {\n CB_VOICEMESSAGE_CONTENT_GET = 'call_back_voicemail_content_get',\n CALL_HISTORY_USER_SESSION_INFO = 'callHistory:user_recent_sessions',\n CALL_HISTORY_USER_VIEWED_SESSIONS = 'callHistory:user_viewed_sessions',\n}\n\nexport enum LINE_EVENT_KEYS {\n INCOMING_CALL = 'incoming_call',\n}\n\nexport enum CALLING_CLIENT_EVENT_KEYS {\n ERROR = 'callingClient:error',\n OUTGOING_CALL = 'callingClient:outgoing_call',\n USER_SESSION_INFO = 'callingClient:user_recent_sessions',\n ALL_CALLS_CLEARED = 'callingClient:all_calls_cleared',\n}\n\nexport enum CALL_EVENT_KEYS {\n ALERTING = 'alerting',\n CALL_ERROR = 'call_error',\n CALLER_ID = 'caller_id',\n CONNECT = 'connect',\n DISCONNECT = 'disconnect',\n ESTABLISHED = 'established',\n HELD = 'held',\n HOLD_ERROR = 'hold_error',\n PROGRESS = 'progress',\n REMOTE_MEDIA = 'remote_media',\n RESUME_ERROR = 'resume_error',\n RESUMED = 'resumed',\n TRANSFER_ERROR = 'transfer_error',\n}\n\nexport enum SUPPLEMENTARY_SERVICES {\n HOLD = 'hold',\n RESUME = 'resume',\n DIVERT = 'divert',\n TRANSFER = 'transfer',\n PARK = 'park',\n}\n\nexport enum MOBIUS_MIDCALL_STATE {\n HELD = 'HELD',\n CONNECTED = 'CONNECTED',\n}\n\nexport enum Disposition {\n ANSWERED = 'Answered',\n CANCELED = 'Canceled',\n INITIATED = 'Initiated',\n MISSED = 'MISSED',\n}\n\nexport type CallRecordLink = {\n locusUrl?: string;\n conversationUrl?: string;\n callbackAddress: string;\n};\n\nexport type CallBackInfo = {\n callbackAddress: string;\n callbackType: string;\n};\n\nexport type LookUpInfo = {\n lookupLink: string;\n type: string;\n};\n\nexport type CallRecordSelf = {\n id: string;\n name?: string;\n phoneNumber?: string;\n cucmDN?: string;\n ucmLineNumber?: number;\n};\n\nexport type CallRecordListOther = {\n ownerId?: string;\n id: string;\n name?: string;\n sipUrl?: string;\n primaryDisplayString?: string;\n secondaryDisplayString?: string;\n isPrivate: boolean;\n callbackAddress: string;\n phoneNumber?: string;\n contact?: string;\n email?: string;\n};\n\nexport type RedirectionDetails = {\n phoneNumber?: string;\n sipUrl?: string;\n name?: string;\n reason: string;\n userId?: string;\n isPrivate: boolean;\n};\n\nexport enum SessionType {\n SPARK = 'SPARK',\n WEBEX_CALLING = 'WEBEXCALLING',\n}\n\nexport type UserSession = {\n id: string;\n sessionId: string;\n disposition: Disposition;\n startTime: string;\n endTime: string;\n url: string;\n durationSeconds: number;\n joinedDurationSeconds: number;\n participantCount: number;\n isDeleted: boolean;\n isPMR: boolean;\n correlationIds: string[];\n links: CallRecordLink;\n self: CallRecordSelf;\n durationSecs: number;\n other: CallRecordListOther;\n sessionType: SessionType;\n direction: string;\n callingSpecifics?: {\n redirectionDetails: RedirectionDetails;\n };\n};\n\nexport type CallingParty = {\n name?: string;\n number?: string;\n privacyEnabled?: boolean;\n userId?: string;\n address?: string;\n};\n\nexport type Item = {\n id?: string;\n duration?: number;\n callingParty?: CallingParty;\n urgent?: boolean;\n confidential?: boolean;\n read?: boolean;\n created?: string;\n messageId?: string;\n time?: number;\n};\n\nexport enum MOBIUS_EVENT_KEYS {\n SERVER_EVENT_INCLUSIVE = 'event:mobius',\n CALL_SESSION_EVENT_INCLUSIVE = 'event:janus.user_recent_sessions',\n CALL_SESSION_EVENT_LEGACY = 'event:janus.user_sessions',\n CALL_SESSION_EVENT_VIEWED = 'event:janus.user_viewed_sessions',\n}\n\nexport type CallSessionData = {\n userSessions: {\n userSessions: UserSession[];\n statusCode: number;\n };\n eventType:\n | MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_INCLUSIVE\n | MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_LEGACY;\n};\n\nexport type CallSessionEvent = {\n id: string;\n data: CallSessionData;\n timestamp: number;\n trackingId: string;\n};\n\nexport enum MEDIA_CONNECTION_EVENT_KEYS {\n ROAP_MESSAGE_TO_SEND = 'roap:messageToSend',\n MEDIA_TYPE_AUDIO = 'audio',\n}\n\nexport type CallerIdDisplay = {\n correlationId: string;\n callerId: DisplayInformation;\n};\n\nexport type LineEventTypes = {\n [LINE_EVENTS.CONNECTING]: () => void;\n [LINE_EVENTS.ERROR]: (error: LineError) => void;\n [LINE_EVENTS.RECONNECTED]: () => void;\n [LINE_EVENTS.RECONNECTING]: () => void;\n [LINE_EVENTS.REGISTERED]: (lineInfo: ILine) => void;\n [LINE_EVENTS.UNREGISTERED]: () => void;\n [LINE_EVENTS.INCOMING_CALL]: (callObj: ICall) => void;\n};\n\nexport type CallEventTypes = {\n [CALL_EVENT_KEYS.ALERTING]: (callId: CallId) => void;\n [CALL_EVENT_KEYS.CALL_ERROR]: (error: CallError) => void;\n [CALL_EVENT_KEYS.CALLER_ID]: (display: CallerIdDisplay) => void;\n [CALL_EVENT_KEYS.CONNECT]: (callId: CallId) => void;\n [CALL_EVENT_KEYS.DISCONNECT]: (callId: CallId) => void;\n [CALL_EVENT_KEYS.ESTABLISHED]: (callId: CallId) => void;\n [CALL_EVENT_KEYS.HELD]: (callId: CallId) => void;\n [CALL_EVENT_KEYS.HOLD_ERROR]: (error: CallError) => void;\n [LINE_EVENT_KEYS.INCOMING_CALL]: (callObj: ICall) => void;\n [CALL_EVENT_KEYS.PROGRESS]: (callId: CallId) => void;\n [CALL_EVENT_KEYS.REMOTE_MEDIA]: (track: MediaStreamTrack) => void;\n [CALL_EVENT_KEYS.RESUME_ERROR]: (error: CallError) => void;\n [CALL_EVENT_KEYS.RESUMED]: (callId: CallId) => void;\n [CALL_EVENT_KEYS.TRANSFER_ERROR]: (error: CallError) => void;\n [CALLING_CLIENT_EVENT_KEYS.ALL_CALLS_CLEARED]: () => void;\n};\n\nexport type MessageId = {\n messageId: string;\n};\n\nexport type VoicemailEventTypes = {\n [COMMON_EVENT_KEYS.CB_VOICEMESSAGE_CONTENT_GET]: (messageId: MessageId) => void;\n};\n\nexport type CallingClientEventTypes = {\n [CALLING_CLIENT_EVENT_KEYS.ERROR]: (error: CallingClientError) => void;\n [CALLING_CLIENT_EVENT_KEYS.USER_SESSION_INFO]: (event: CallSessionEvent) => void;\n [CALLING_CLIENT_EVENT_KEYS.OUTGOING_CALL]: (callId: string) => void;\n [CALLING_CLIENT_EVENT_KEYS.ALL_CALLS_CLEARED]: () => void;\n};\n\nexport type CallHistoryEventTypes = {\n [COMMON_EVENT_KEYS.CALL_HISTORY_USER_SESSION_INFO]: (event: CallSessionEvent) => void;\n [COMMON_EVENT_KEYS.CALL_HISTORY_USER_VIEWED_SESSIONS]: (event: CallSessionViewedEvent) => void;\n};\n/* External Eventing End */\n\n/** Internal Eventing Start */\nenum CALL_STATE {\n HELD = 'held',\n REMOTE_HELD = 'remoteheld',\n CONNECTED = 'connected',\n}\n\ntype eventType = string;\n\ntype callProgressData = {\n alerting: boolean;\n inbandROAP: boolean;\n};\n\nexport type CallerIdInfo = {\n 'x-broadworks-remote-party-info'?: string;\n 'p-asserted-identity'?: string;\n from?: string;\n};\n\ntype callId = string;\ntype deviceId = string;\ntype correlationId = string;\ntype callUrl = string;\ntype causecode = number;\ntype cause = string;\n\ntype eventData = {\n callerId: CallerIdInfo;\n callState: CALL_STATE;\n};\n\ntype midCallServiceData = {\n eventType: eventType;\n eventData: eventData;\n};\n\ntype midCallService = Array<midCallServiceData>;\ninterface BaseMessage {\n eventType: eventType;\n correlationId: correlationId;\n deviceId: deviceId;\n callId: callId;\n callUrl: callUrl;\n}\nexport interface CallSetupMessage extends BaseMessage {\n callerId: CallerIdInfo;\n trackingId: string;\n alertType: string;\n}\ninterface CallProgressMessage extends BaseMessage {\n callProgressData: callProgressData;\n callerId: CallerIdInfo;\n}\n\nexport const WEBSOCKET_SCOPE = 'mobius';\n\nexport enum WEBSOCKET_KEYS {\n CALL_PROGRESS = 'callprogress',\n CALL_CONNECTED = 'callconnected',\n CALL_DISCONNECTED = 'callconnected',\n CALL_INFO = 'callinfo',\n CALL = 'call',\n ROAP = 'ROAP',\n}\n/** Internal Eventing End */\n\n/** State Machine Events */\n\nexport type CallEvent =\n /* Received Events */\n | {type: 'E_RECV_CALL_SETUP'; data?: unknown}\n | {type: 'E_RECV_CALL_PROGRESS'; data?: unknown}\n | {type: 'E_RECV_CALL_CONNECT'; data?: unknown}\n | {type: 'E_RECV_CALL_DISCONNECT'; data?: unknown}\n\n /* Sent Events */\n | {type: 'E_SEND_CALL_SETUP'; data?: unknown}\n | {type: 'E_SEND_CALL_ALERTING'; data?: unknown}\n | {type: 'E_SEND_CALL_CONNECT'; data?: unknown}\n | {type: 'E_SEND_CALL_DISCONNECT'; data?: unknown}\n\n /* Common Events */\n | {type: 'E_CALL_ESTABLISHED'; data?: unknown}\n | {type: 'E_CALL_INFO'; data?: unknown}\n | {type: 'E_UNKNOWN'; data?: unknown}\n | {type: 'E_CALL_CLEARED'; data?: unknown}\n | {type: 'E_CALL_HOLD'; data?: unknown}\n | {type: 'E_CALL_RESUME'; data?: unknown};\n\n/* ROAP Events */\nexport type RoapEvent =\n | {type: 'E_SEND_ROAP_OFFER'; data?: unknown}\n | {type: 'E_SEND_ROAP_ANSWER'; data?: unknown}\n | {type: 'E_RECV_ROAP_OFFER'; data?: unknown}\n | {type: 'E_RECV_ROAP_ANSWER'; data?: unknown}\n | {type: 'E_ROAP_ERROR'; data?: unknown}\n | {type: 'E_ROAP_OK'; data?: unknown}\n | {type: 'E_RECV_ROAP_OFFER_REQUEST'; data?: unknown} // ROAP request to explicitly ask Client to do OFFER\n | {type: 'E_ROAP_TEARDOWN'; data?: unknown};\n\n// TODO: export RoapMessage type from the media SDK to use here\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface RoapMessage {\n seq: number;\n messageType: 'OFFER' | 'ANSWER' | 'OK' | 'ERROR' | 'OFFER_REQUEST';\n offererSessionId?: string;\n answererSessionId?: string;\n sdp?: string;\n version?: string;\n tieBreaker?: string;\n errorType?: string;\n}\n\nexport type UserReadSessions = {\n sessionId: string;\n};\n\nexport type CallSessionViewedData = {\n userReadSessions: {\n userReadSessions: UserReadSessions[];\n statusCode: number;\n };\n eventType: MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_VIEWED;\n};\n\nexport type CallSessionViewedEvent = {\n id: string;\n data: CallSessionViewedData;\n timestamp: number;\n trackingId: string;\n};\n\nexport type EndTimeSessionId = {\n endTime: string;\n sessionId: string;\n};\n\nexport type SanitizedEndTimeAndSessionId = {\n endTime: number;\n sessionId: string;\n};\n\nexport type UCMLine = {\n dnorpattern: string;\n index: number;\n label: string | null;\n};\n\nexport type UCMDevice = {\n name: string;\n model: number;\n lines: UCMLine[];\n};\n\nexport type UCMLinesApiResponse = {\n devices: UCMDevice[];\n};\n"],"mappings":";;;;;;;AAEA,IAAAA,MAAA,GAAAC,OAAA;AAFA;AAAuD;AAOvD;AAAA,IACYC,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA;AAAA,IAMjBE,eAAe,GAAAD,OAAA,CAAAC,eAAA,0BAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAAA,IAIfC,yBAAyB,GAAAF,OAAA,CAAAE,yBAAA,0BAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAA,OAAzBA,yBAAyB;AAAA;AAAA,IAOzBC,eAAe,GAAAH,OAAA,CAAAG,eAAA,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAAA,IAgBfC,sBAAsB,GAAAJ,OAAA,CAAAI,sBAAA,0BAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAA,OAAtBA,sBAAsB;AAAA;AAAA,IAQtBC,oBAAoB,GAAAL,OAAA,CAAAK,oBAAA,0BAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAAA,OAApBA,oBAAoB;AAAA;AAAA,IAKpBC,WAAW,GAAAN,OAAA,CAAAM,WAAA,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;AAAA,IAsDXC,WAAW,GAAAP,OAAA,CAAAO,WAAA,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;AAAA,IAiDXC,iBAAiB,GAAAR,OAAA,CAAAQ,iBAAA,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA;AAAA,IAwBjBC,2BAA2B,GAAAT,OAAA,CAAAS,2BAAA,0BAA3BA,2BAA2B;EAA3BA,2BAA2B;EAA3BA,2BAA2B;EAAA,OAA3BA,2BAA2B;AAAA;AAyDvC;AAEA;AAAA,IACKC,UAAU,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA,EAAVA,UAAU;AAsDR,IAAMC,eAAe,GAAAX,OAAA,CAAAW,eAAA,GAAG,QAAQ;AAAC,IAE5BC,cAAc,GAAAZ,OAAA,CAAAY,cAAA,0BAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA;AAQ1B;AAEA;AAuBA;AAWA;AACA"}
1
+ {"version":3,"names":["_types","require","COMMON_EVENT_KEYS","exports","LINE_EVENT_KEYS","CALLING_CLIENT_EVENT_KEYS","CALL_EVENT_KEYS","SUPPLEMENTARY_SERVICES","MOBIUS_MIDCALL_STATE","Disposition","SessionType","MOBIUS_EVENT_KEYS","MEDIA_CONNECTION_EVENT_KEYS","CALL_STATE","WEBSOCKET_SCOPE","WEBSOCKET_KEYS"],"sources":["types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */ // TODO: remove once we define the payloads\nimport {ILine} from '../api';\nimport {LINE_EVENTS} from '../CallingClient/line/types';\nimport type {ICall} from '../CallingClient/calling/types';\nimport {CallId, DisplayInformation} from '../common/types';\nimport {CallError, CallingClientError, LineError} from '../Errors';\n\n/** External Eventing Start */\nexport enum COMMON_EVENT_KEYS {\n CB_VOICEMESSAGE_CONTENT_GET = 'call_back_voicemail_content_get',\n CALL_HISTORY_USER_SESSION_INFO = 'callHistory:user_recent_sessions',\n CALL_HISTORY_USER_VIEWED_SESSIONS = 'callHistory:user_viewed_sessions',\n CALL_HISTORY_USER_SESSIONS_DELETED = 'callHistory:user_sessions_deleted',\n}\n\nexport enum LINE_EVENT_KEYS {\n INCOMING_CALL = 'incoming_call',\n}\n\nexport enum CALLING_CLIENT_EVENT_KEYS {\n ERROR = 'callingClient:error',\n OUTGOING_CALL = 'callingClient:outgoing_call',\n USER_SESSION_INFO = 'callingClient:user_recent_sessions',\n ALL_CALLS_CLEARED = 'callingClient:all_calls_cleared',\n}\n\nexport enum CALL_EVENT_KEYS {\n ALERTING = 'alerting',\n CALL_ERROR = 'call_error',\n CALLER_ID = 'caller_id',\n CONNECT = 'connect',\n DISCONNECT = 'disconnect',\n ESTABLISHED = 'established',\n HELD = 'held',\n HOLD_ERROR = 'hold_error',\n PROGRESS = 'progress',\n REMOTE_MEDIA = 'remote_media',\n RESUME_ERROR = 'resume_error',\n RESUMED = 'resumed',\n TRANSFER_ERROR = 'transfer_error',\n}\n\nexport enum SUPPLEMENTARY_SERVICES {\n HOLD = 'hold',\n RESUME = 'resume',\n DIVERT = 'divert',\n TRANSFER = 'transfer',\n PARK = 'park',\n}\n\nexport enum MOBIUS_MIDCALL_STATE {\n HELD = 'HELD',\n CONNECTED = 'CONNECTED',\n}\n\nexport enum Disposition {\n ANSWERED = 'Answered',\n CANCELED = 'Canceled',\n INITIATED = 'Initiated',\n MISSED = 'MISSED',\n}\n\nexport type CallRecordLink = {\n locusUrl?: string;\n conversationUrl?: string;\n callbackAddress: string;\n};\n\nexport type CallBackInfo = {\n callbackAddress: string;\n callbackType: string;\n};\n\nexport type LookUpInfo = {\n lookupLink: string;\n type: string;\n};\n\nexport type CallRecordSelf = {\n id: string;\n name?: string;\n phoneNumber?: string;\n cucmDN?: string;\n ucmLineNumber?: number;\n};\n\nexport type CallRecordListOther = {\n ownerId?: string;\n id: string;\n name?: string;\n sipUrl?: string;\n primaryDisplayString?: string;\n secondaryDisplayString?: string;\n isPrivate: boolean;\n callbackAddress: string;\n phoneNumber?: string;\n contact?: string;\n email?: string;\n};\n\nexport type RedirectionDetails = {\n phoneNumber?: string;\n sipUrl?: string;\n name?: string;\n reason: string;\n userId?: string;\n isPrivate: boolean;\n};\n\nexport enum SessionType {\n SPARK = 'SPARK',\n WEBEX_CALLING = 'WEBEXCALLING',\n}\n\nexport type UserSession = {\n id: string;\n sessionId: string;\n disposition: Disposition;\n startTime: string;\n endTime: string;\n url: string;\n durationSeconds: number;\n joinedDurationSeconds: number;\n participantCount: number;\n isDeleted: boolean;\n isPMR: boolean;\n correlationIds: string[];\n links: CallRecordLink;\n self: CallRecordSelf;\n durationSecs: number;\n other: CallRecordListOther;\n sessionType: SessionType;\n direction: string;\n callingSpecifics?: {\n redirectionDetails: RedirectionDetails;\n };\n};\n\nexport type CallingParty = {\n name?: string;\n number?: string;\n privacyEnabled?: boolean;\n userId?: string;\n address?: string;\n};\n\nexport type Item = {\n id?: string;\n duration?: number;\n callingParty?: CallingParty;\n urgent?: boolean;\n confidential?: boolean;\n read?: boolean;\n created?: string;\n messageId?: string;\n time?: number;\n};\n\nexport enum MOBIUS_EVENT_KEYS {\n SERVER_EVENT_INCLUSIVE = 'event:mobius',\n CALL_SESSION_EVENT_INCLUSIVE = 'event:janus.user_recent_sessions',\n CALL_SESSION_EVENT_LEGACY = 'event:janus.user_sessions',\n CALL_SESSION_EVENT_VIEWED = 'event:janus.user_viewed_sessions',\n CALL_SESSION_EVENT_DELETED = 'event:janus.user_sessions_deleted',\n}\n\nexport type CallSessionData = {\n userSessions: {\n userSessions: UserSession[];\n statusCode: number;\n };\n eventType:\n | MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_INCLUSIVE\n | MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_LEGACY;\n};\n\nexport type CallSessionEvent = {\n id: string;\n data: CallSessionData;\n timestamp: number;\n trackingId: string;\n};\n\nexport enum MEDIA_CONNECTION_EVENT_KEYS {\n ROAP_MESSAGE_TO_SEND = 'roap:messageToSend',\n MEDIA_TYPE_AUDIO = 'audio',\n}\n\nexport type CallerIdDisplay = {\n correlationId: string;\n callerId: DisplayInformation;\n};\n\nexport type LineEventTypes = {\n [LINE_EVENTS.CONNECTING]: () => void;\n [LINE_EVENTS.ERROR]: (error: LineError) => void;\n [LINE_EVENTS.RECONNECTED]: () => void;\n [LINE_EVENTS.RECONNECTING]: () => void;\n [LINE_EVENTS.REGISTERED]: (lineInfo: ILine) => void;\n [LINE_EVENTS.UNREGISTERED]: () => void;\n [LINE_EVENTS.INCOMING_CALL]: (callObj: ICall) => void;\n};\n\nexport type CallEventTypes = {\n [CALL_EVENT_KEYS.ALERTING]: (callId: CallId) => void;\n [CALL_EVENT_KEYS.CALL_ERROR]: (error: CallError) => void;\n [CALL_EVENT_KEYS.CALLER_ID]: (display: CallerIdDisplay) => void;\n [CALL_EVENT_KEYS.CONNECT]: (callId: CallId) => void;\n [CALL_EVENT_KEYS.DISCONNECT]: (callId: CallId) => void;\n [CALL_EVENT_KEYS.ESTABLISHED]: (callId: CallId) => void;\n [CALL_EVENT_KEYS.HELD]: (callId: CallId) => void;\n [CALL_EVENT_KEYS.HOLD_ERROR]: (error: CallError) => void;\n [LINE_EVENT_KEYS.INCOMING_CALL]: (callObj: ICall) => void;\n [CALL_EVENT_KEYS.PROGRESS]: (callId: CallId) => void;\n [CALL_EVENT_KEYS.REMOTE_MEDIA]: (track: MediaStreamTrack) => void;\n [CALL_EVENT_KEYS.RESUME_ERROR]: (error: CallError) => void;\n [CALL_EVENT_KEYS.RESUMED]: (callId: CallId) => void;\n [CALL_EVENT_KEYS.TRANSFER_ERROR]: (error: CallError) => void;\n [CALLING_CLIENT_EVENT_KEYS.ALL_CALLS_CLEARED]: () => void;\n};\n\nexport type MessageId = {\n messageId: string;\n};\n\nexport type VoicemailEventTypes = {\n [COMMON_EVENT_KEYS.CB_VOICEMESSAGE_CONTENT_GET]: (messageId: MessageId) => void;\n};\n\nexport type CallingClientEventTypes = {\n [CALLING_CLIENT_EVENT_KEYS.ERROR]: (error: CallingClientError) => void;\n [CALLING_CLIENT_EVENT_KEYS.USER_SESSION_INFO]: (event: CallSessionEvent) => void;\n [CALLING_CLIENT_EVENT_KEYS.OUTGOING_CALL]: (callId: string) => void;\n [CALLING_CLIENT_EVENT_KEYS.ALL_CALLS_CLEARED]: () => void;\n};\n\nexport type CallHistoryEventTypes = {\n [COMMON_EVENT_KEYS.CALL_HISTORY_USER_SESSION_INFO]: (event: CallSessionEvent) => void;\n [COMMON_EVENT_KEYS.CALL_HISTORY_USER_VIEWED_SESSIONS]: (event: CallSessionViewedEvent) => void;\n [COMMON_EVENT_KEYS.CALL_HISTORY_USER_SESSIONS_DELETED]: (event: CallSessionDeletedEvent) => void;\n};\n/* External Eventing End */\n\n/** Internal Eventing Start */\nenum CALL_STATE {\n HELD = 'held',\n REMOTE_HELD = 'remoteheld',\n CONNECTED = 'connected',\n}\n\ntype eventType = string;\n\ntype callProgressData = {\n alerting: boolean;\n inbandROAP: boolean;\n};\n\nexport type CallerIdInfo = {\n 'x-broadworks-remote-party-info'?: string;\n 'p-asserted-identity'?: string;\n from?: string;\n};\n\ntype callId = string;\ntype deviceId = string;\ntype correlationId = string;\ntype callUrl = string;\ntype causecode = number;\ntype cause = string;\n\ntype eventData = {\n callerId: CallerIdInfo;\n callState: CALL_STATE;\n};\n\ntype midCallServiceData = {\n eventType: eventType;\n eventData: eventData;\n};\n\ntype midCallService = Array<midCallServiceData>;\ninterface BaseMessage {\n eventType: eventType;\n correlationId: correlationId;\n deviceId: deviceId;\n callId: callId;\n callUrl: callUrl;\n}\nexport interface CallSetupMessage extends BaseMessage {\n callerId: CallerIdInfo;\n trackingId: string;\n alertType: string;\n}\ninterface CallProgressMessage extends BaseMessage {\n callProgressData: callProgressData;\n callerId: CallerIdInfo;\n}\n\nexport const WEBSOCKET_SCOPE = 'mobius';\n\nexport enum WEBSOCKET_KEYS {\n CALL_PROGRESS = 'callprogress',\n CALL_CONNECTED = 'callconnected',\n CALL_DISCONNECTED = 'callconnected',\n CALL_INFO = 'callinfo',\n CALL = 'call',\n ROAP = 'ROAP',\n}\n/** Internal Eventing End */\n\n/** State Machine Events */\n\nexport type CallEvent =\n /* Received Events */\n | {type: 'E_RECV_CALL_SETUP'; data?: unknown}\n | {type: 'E_RECV_CALL_PROGRESS'; data?: unknown}\n | {type: 'E_RECV_CALL_CONNECT'; data?: unknown}\n | {type: 'E_RECV_CALL_DISCONNECT'; data?: unknown}\n\n /* Sent Events */\n | {type: 'E_SEND_CALL_SETUP'; data?: unknown}\n | {type: 'E_SEND_CALL_ALERTING'; data?: unknown}\n | {type: 'E_SEND_CALL_CONNECT'; data?: unknown}\n | {type: 'E_SEND_CALL_DISCONNECT'; data?: unknown}\n\n /* Common Events */\n | {type: 'E_CALL_ESTABLISHED'; data?: unknown}\n | {type: 'E_CALL_INFO'; data?: unknown}\n | {type: 'E_UNKNOWN'; data?: unknown}\n | {type: 'E_CALL_CLEARED'; data?: unknown}\n | {type: 'E_CALL_HOLD'; data?: unknown}\n | {type: 'E_CALL_RESUME'; data?: unknown};\n\n/* ROAP Events */\nexport type RoapEvent =\n | {type: 'E_SEND_ROAP_OFFER'; data?: unknown}\n | {type: 'E_SEND_ROAP_ANSWER'; data?: unknown}\n | {type: 'E_RECV_ROAP_OFFER'; data?: unknown}\n | {type: 'E_RECV_ROAP_ANSWER'; data?: unknown}\n | {type: 'E_ROAP_ERROR'; data?: unknown}\n | {type: 'E_ROAP_OK'; data?: unknown}\n | {type: 'E_RECV_ROAP_OFFER_REQUEST'; data?: unknown} // ROAP request to explicitly ask Client to do OFFER\n | {type: 'E_ROAP_TEARDOWN'; data?: unknown};\n\n// TODO: export RoapMessage type from the media SDK to use here\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface RoapMessage {\n seq: number;\n messageType: 'OFFER' | 'ANSWER' | 'OK' | 'ERROR' | 'OFFER_REQUEST';\n offererSessionId?: string;\n answererSessionId?: string;\n sdp?: string;\n version?: string;\n tieBreaker?: string;\n errorType?: string;\n}\n\nexport type UserReadSessions = {\n sessionId: string;\n};\n\nexport type CallSessionViewedData = {\n userReadSessions: {\n userReadSessions: UserReadSessions[];\n statusCode: number;\n };\n eventType: MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_VIEWED;\n};\n\nexport type CallSessionViewedEvent = {\n id: string;\n data: CallSessionViewedData;\n timestamp: number;\n trackingId: string;\n};\n\nexport type CallSessionDeletedData = {\n deletedSessions: string[];\n eventType: MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_DELETED;\n};\n\nexport type CallSessionDeletedEvent = {\n id: string;\n data: CallSessionDeletedData;\n timestamp: number;\n trackingId: string;\n};\n\nexport type EndTimeSessionId = {\n endTime: string;\n sessionId: string;\n};\n\nexport type SanitizedEndTimeAndSessionId = {\n endTime: number;\n sessionId: string;\n};\n\nexport type UCMLine = {\n dnorpattern: string;\n index: number;\n label: string | null;\n};\n\nexport type UCMDevice = {\n name: string;\n model: number;\n lines: UCMLine[];\n};\n\nexport type UCMLinesApiResponse = {\n devices: UCMDevice[];\n};\n"],"mappings":";;;;;;;AAEA,IAAAA,MAAA,GAAAC,OAAA;AAFA;AAAuD;AAOvD;AAAA,IACYC,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA;AAAA,IAOjBE,eAAe,GAAAD,OAAA,CAAAC,eAAA,0BAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAAA,IAIfC,yBAAyB,GAAAF,OAAA,CAAAE,yBAAA,0BAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAzBA,yBAAyB;EAAA,OAAzBA,yBAAyB;AAAA;AAAA,IAOzBC,eAAe,GAAAH,OAAA,CAAAG,eAAA,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAAA,IAgBfC,sBAAsB,GAAAJ,OAAA,CAAAI,sBAAA,0BAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAA,OAAtBA,sBAAsB;AAAA;AAAA,IAQtBC,oBAAoB,GAAAL,OAAA,CAAAK,oBAAA,0BAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAAA,OAApBA,oBAAoB;AAAA;AAAA,IAKpBC,WAAW,GAAAN,OAAA,CAAAM,WAAA,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;AAAA,IAsDXC,WAAW,GAAAP,OAAA,CAAAO,WAAA,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;AAAA,IAiDXC,iBAAiB,GAAAR,OAAA,CAAAQ,iBAAA,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA;AAAA,IAyBjBC,2BAA2B,GAAAT,OAAA,CAAAS,2BAAA,0BAA3BA,2BAA2B;EAA3BA,2BAA2B;EAA3BA,2BAA2B;EAAA,OAA3BA,2BAA2B;AAAA;AA0DvC;AAEA;AAAA,IACKC,UAAU,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA,EAAVA,UAAU;AAsDR,IAAMC,eAAe,GAAAX,OAAA,CAAAW,eAAA,GAAG,QAAQ;AAAC,IAE5BC,cAAc,GAAAZ,OAAA,CAAAY,cAAA,0BAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA;AAQ1B;AAEA;AAuBA;AAWA;AACA"}
@@ -858,13 +858,13 @@ function getXsiActionEndpoint(_x17, _x18, _x19) {
858
858
  */
859
859
  function _getXsiActionEndpoint() {
860
860
  _getXsiActionEndpoint = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(webex, loggerContext, callingBackend) {
861
- var userIdResponse, response, xsiEndpoint, bwTokenResponse, _response, _xsiEndpoint, errorInfo;
861
+ var userIdResponse, response, xsiEndpoint, bwTokenResponse, _response, _xsiEndpoint, xsiUrl, errorInfo;
862
862
  return _regenerator.default.wrap(function _callee5$(_context5) {
863
863
  while (1) switch (_context5.prev = _context5.next) {
864
864
  case 0:
865
865
  _context5.prev = 0;
866
866
  _context5.t0 = callingBackend;
867
- _context5.next = _context5.t0 === _types2.CALLING_BACKEND.WXC ? 4 : _context5.t0 === _types2.CALLING_BACKEND.BWRKS ? 10 : 17;
867
+ _context5.next = _context5.t0 === _types2.CALLING_BACKEND.WXC ? 4 : _context5.t0 === _types2.CALLING_BACKEND.BWRKS ? 10 : 18;
868
868
  break;
869
869
  case 4:
870
870
  _context5.next = 6;
@@ -887,26 +887,29 @@ function _getXsiActionEndpoint() {
887
887
  bwTokenResponse = _context5.sent;
888
888
  _response = bwTokenResponse.body;
889
889
  _xsiEndpoint = _response[_constants2.DEVICES][0][_constants2.SETTINGS][_constants2.BW_XSI_URL];
890
- if (_response[_constants2.DEVICES][0][_constants2.SETTINGS][_constants2.BW_XSI_URL].endsWith(_constants2.BW_XSI_ENDPOINT_VERSION)) {
891
- _xsiEndpoint = _response[_constants2.DEVICES][0][_constants2.SETTINGS][_constants2.BW_XSI_URL].slice(0, -5);
890
+ xsiUrl = _response[_constants2.DEVICES][0][_constants2.SETTINGS][_constants2.BW_XSI_URL]; // Check if it ends with specific version and slice accordingly
891
+ if (xsiUrl.endsWith(_constants2.BW_XSI_ENDPOINT_VERSION)) {
892
+ _xsiEndpoint = xsiUrl.slice(0, -5); // Remove 'v2.0'
893
+ } else if (xsiUrl.endsWith(_constants2.BW_XSI_ENDPOINT_VERSION_WITH_SLASH)) {
894
+ _xsiEndpoint = xsiUrl.slice(0, -6); // Remove 'v2.0/'
892
895
  }
893
896
  return _context5.abrupt("return", _xsiEndpoint);
894
- case 17:
895
- throw new Error('Calling backend is not identified, exiting....');
896
897
  case 18:
897
- _context5.next = 25;
898
+ throw new Error('Calling backend is not identified, exiting....');
899
+ case 19:
900
+ _context5.next = 26;
898
901
  break;
899
- case 20:
900
- _context5.prev = 20;
902
+ case 21:
903
+ _context5.prev = 21;
901
904
  _context5.t1 = _context5["catch"](0);
902
905
  errorInfo = _context5.t1;
903
906
  serviceErrorCodeHandler(errorInfo, loggerContext);
904
907
  return _context5.abrupt("return", errorInfo);
905
- case 25:
908
+ case 26:
906
909
  case "end":
907
910
  return _context5.stop();
908
911
  }
909
- }, _callee5, null, [[0, 20]]);
912
+ }, _callee5, null, [[0, 21]]);
910
913
  }));
911
914
  return _getXsiActionEndpoint.apply(this, arguments);
912
915
  }
@@ -1236,7 +1239,7 @@ function isValidServiceDomain(serviceData) {
1236
1239
  var regexp = /^[a-z0-9]+([-.]{1}[a-z0-9]+)*\.[a-z]{2,6}$/i;
1237
1240
  var domain = serviceData.domain;
1238
1241
  if (!domain) {
1239
- return serviceData.indicator === _types2.ServiceIndicator.CALLING;
1242
+ return serviceData.indicator === _types2.ServiceIndicator.CALLING || serviceData.indicator === _types2.ServiceIndicator.GUEST_CALLING;
1240
1243
  }
1241
1244
  return regexp.test(domain);
1242
1245
  }
@@ -1249,8 +1252,10 @@ function isValidServiceDomain(serviceData) {
1249
1252
  * @param serviceData - Input service data to be validated.
1250
1253
  */
1251
1254
  function validateServiceData(serviceData) {
1255
+ var allowedValues = (0, _values.default)(_types2.ServiceIndicator);
1256
+ var formattedValues = allowedValues.join(', ').replace(/,([^,]*)$/, ' and$1');
1252
1257
  if (!isValidServiceIndicator(serviceData.indicator)) {
1253
- throw new Error("Invalid service indicator, Allowed values are: ".concat((0, _values.default)(_types2.ServiceIndicator)));
1258
+ throw new Error("Invalid service indicator, Allowed values are: ".concat(formattedValues));
1254
1259
  }
1255
1260
  if (!isValidServiceDomain(serviceData)) {
1256
1261
  throw new Error('Invalid service domain.');