@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.
- package/dist/CallHistory/CallHistory.js +195 -67
- package/dist/CallHistory/CallHistory.js.map +1 -1
- package/dist/CallHistory/CallHistory.test.js +331 -108
- package/dist/CallHistory/CallHistory.test.js.map +1 -1
- package/dist/CallHistory/callHistoryFixtures.js +25 -1
- package/dist/CallHistory/callHistoryFixtures.js.map +1 -1
- package/dist/CallHistory/constants.js +4 -1
- package/dist/CallHistory/constants.js.map +1 -1
- package/dist/CallHistory/types.js.map +1 -1
- package/dist/CallingClient/CallingClient.js +2 -2
- package/dist/CallingClient/CallingClient.js.map +1 -1
- package/dist/CallingClient/CallingClient.test.js +1 -1
- package/dist/CallingClient/CallingClient.test.js.map +1 -1
- package/dist/CallingClient/calling/CallerId/index.js +14 -5
- package/dist/CallingClient/calling/CallerId/index.js.map +1 -1
- package/dist/CallingClient/calling/CallerId/index.test.js +6 -6
- package/dist/CallingClient/calling/CallerId/index.test.js.map +1 -1
- package/dist/CallingClient/calling/call.js +434 -348
- package/dist/CallingClient/calling/call.js.map +1 -1
- package/dist/CallingClient/calling/call.test.js +516 -386
- package/dist/CallingClient/calling/call.test.js.map +1 -1
- package/dist/CallingClient/calling/callManager.js +6 -6
- package/dist/CallingClient/calling/callManager.js.map +1 -1
- package/dist/CallingClient/calling/callManager.test.js +3 -3
- package/dist/CallingClient/calling/callManager.test.js.map +1 -1
- package/dist/CallingClient/calling/types.js +6 -1
- package/dist/CallingClient/calling/types.js.map +1 -1
- package/dist/CallingClient/constants.js +2 -3
- package/dist/CallingClient/constants.js.map +1 -1
- package/dist/CallingClient/line/index.js +14 -7
- package/dist/CallingClient/line/index.js.map +1 -1
- package/dist/CallingClient/line/line.test.js +84 -22
- package/dist/CallingClient/line/line.test.js.map +1 -1
- package/dist/CallingClient/line/types.js.map +1 -1
- package/dist/CallingClient/registration/register.js +79 -59
- package/dist/CallingClient/registration/register.js.map +1 -1
- package/dist/CallingClient/registration/register.test.js +1 -1
- package/dist/CallingClient/registration/register.test.js.map +1 -1
- package/dist/CallingClient/types.js.map +1 -1
- package/dist/Events/types.js +2 -0
- package/dist/Events/types.js.map +1 -1
- package/dist/common/Utils.js +18 -13
- package/dist/common/Utils.js.map +1 -1
- package/dist/common/Utils.test.js +97 -0
- package/dist/common/Utils.test.js.map +1 -1
- package/dist/common/constants.js +4 -3
- package/dist/common/constants.js.map +1 -1
- package/dist/common/types.js +1 -0
- package/dist/common/types.js.map +1 -1
- package/dist/module/CallHistory/CallHistory.js +64 -2
- package/dist/module/CallHistory/callHistoryFixtures.js +24 -0
- package/dist/module/CallHistory/constants.js +3 -0
- package/dist/module/CallingClient/CallingClient.js +1 -1
- package/dist/module/CallingClient/calling/CallerId/index.js +6 -6
- package/dist/module/CallingClient/calling/call.js +66 -22
- package/dist/module/CallingClient/calling/callManager.js +5 -5
- package/dist/module/CallingClient/calling/types.js +5 -0
- package/dist/module/CallingClient/constants.js +1 -2
- package/dist/module/CallingClient/line/index.js +14 -8
- package/dist/module/CallingClient/registration/register.js +12 -4
- package/dist/module/Events/types.js +2 -0
- package/dist/module/common/Utils.js +12 -5
- package/dist/module/common/constants.js +3 -2
- package/dist/module/common/types.js +1 -0
- package/dist/types/CallHistory/CallHistory.d.ts +4 -2
- package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
- package/dist/types/CallHistory/callHistoryFixtures.d.ts +6 -2
- package/dist/types/CallHistory/callHistoryFixtures.d.ts.map +1 -1
- package/dist/types/CallHistory/constants.d.ts +3 -0
- package/dist/types/CallHistory/constants.d.ts.map +1 -1
- package/dist/types/CallHistory/types.d.ts +9 -0
- package/dist/types/CallHistory/types.d.ts.map +1 -1
- package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/CallerId/index.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/call.d.ts +7 -5
- package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/callManager.d.ts +1 -1
- package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/types.d.ts +6 -2
- package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
- package/dist/types/CallingClient/constants.d.ts +1 -2
- package/dist/types/CallingClient/constants.d.ts.map +1 -1
- package/dist/types/CallingClient/line/index.d.ts +3 -2
- package/dist/types/CallingClient/line/index.d.ts.map +1 -1
- package/dist/types/CallingClient/line/types.d.ts +1 -1
- package/dist/types/CallingClient/line/types.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/register.d.ts +4 -2
- package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
- package/dist/types/CallingClient/types.d.ts +1 -0
- package/dist/types/CallingClient/types.d.ts.map +1 -1
- package/dist/types/Contacts/ContactsClient.d.ts +1 -1
- package/dist/types/Events/types.d.ts +15 -2
- package/dist/types/Events/types.d.ts.map +1 -1
- package/dist/types/Voicemail/UcmBackendConnector.d.ts +1 -1
- package/dist/types/Voicemail/WxCallBackendConnector.d.ts +1 -1
- package/dist/types/common/Utils.d.ts +2 -2
- package/dist/types/common/Utils.d.ts.map +1 -1
- package/dist/types/common/constants.d.ts +1 -0
- package/dist/types/common/constants.d.ts.map +1 -1
- package/dist/types/common/types.d.ts +2 -1
- package/dist/types/common/types.d.ts.map +1 -1
- 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":""}
|
package/dist/Events/types.js
CHANGED
|
@@ -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) {
|
package/dist/Events/types.js.map
CHANGED
|
@@ -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"}
|
package/dist/common/Utils.js
CHANGED
|
@@ -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 :
|
|
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
|
-
|
|
891
|
-
|
|
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
|
-
|
|
898
|
+
throw new Error('Calling backend is not identified, exiting....');
|
|
899
|
+
case 19:
|
|
900
|
+
_context5.next = 26;
|
|
898
901
|
break;
|
|
899
|
-
case
|
|
900
|
-
_context5.prev =
|
|
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
|
|
908
|
+
case 26:
|
|
906
909
|
case "end":
|
|
907
910
|
return _context5.stop();
|
|
908
911
|
}
|
|
909
|
-
}, _callee5, null, [[0,
|
|
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(
|
|
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.');
|