@webex/calling 3.12.0-mobius-socket.11 → 3.12.0-mobius-socket.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CallingClient/line/line.test.js +1 -1
- package/dist/CallingClient/line/line.test.js.map +1 -1
- package/dist/CallingClient/registration/register.js +76 -43
- package/dist/CallingClient/registration/register.js.map +1 -1
- package/dist/CallingClient/registration/types.js.map +1 -1
- package/dist/common/Utils.js +70 -30
- package/dist/common/Utils.js.map +1 -1
- package/dist/module/CallingClient/registration/register.js +30 -7
- package/dist/module/common/Utils.js +17 -4
- package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/types.d.ts +1 -1
- package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
- package/dist/types/common/Utils.d.ts +4 -1
- package/dist/types/common/Utils.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -190,7 +190,7 @@ describe('Line Tests', function () {
|
|
|
190
190
|
expect(handleErrorSpy).toBeCalledOnceWith(expect.anything(), expect.anything(), {
|
|
191
191
|
file: _constants.REGISTRATION_FILE,
|
|
192
192
|
method: 'triggerRegistration'
|
|
193
|
-
}, expect.anything(), expect.anything());
|
|
193
|
+
}, expect.anything(), expect.anything(), expect.any(Number));
|
|
194
194
|
case 2:
|
|
195
195
|
case "end":
|
|
196
196
|
return _context3.stop();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_asyncMutex","require","_testUtil","_registerFixtures","_common","_types","_types2","_","_interopRequireDefault","utils","_interopRequireWildcard","_SDKConnector","_constants","_types3","regUtils","_request","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","jest","mock","getMobiusSocketInstance","fn","mockReturnValue","sendWssRequest","spyOn","mockResolvedValue","undefined","describe","mutex","Mutex","webex","getTestUtilsWebex","SDKConnector","setWebex","beforeEach","APIRequest","resetInstance","getInstance","isMobiusSocketEnabled","defaultServiceData","indicator","ServiceIndicator","CALLING","domain","createRegistrationSpy","mobiusUris","filterMobiusUris","getMobiusDiscoveryResponse","URL","primaryMobiusUris","primary","backupMobiusUris","backup","userId","internal","device","clientDeviceUri","url","mockJwe","guestServiceData","GUEST_CALLING","guestName","handleErrorSpy","global","fetch","request","clearAllMocks","line","mockRegistrationBody","getMockDeviceInfo","discoveryBody","primaryUrl","concat","uris","registrationPayload","statusCode","body","Line","LOGGER","INFO","afterEach","clearAllTimers","useRealTimers","removeAllListeners","it","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","useFakeTimers","expect","toBeCalledOnceWith","any","anything","getStatus","toEqual","RegistrationStatus","IDLE","register","getMockRequestTemplate","serviceData","uri","method","not","toBeCalled","ACTIVE","getActiveMobiusUrl","getLoggingLevel","getDeviceId","deviceId","callManager","lineDict","mockClear","advanceTimersByTime","_promise","resolve","stop","_callee2","guestLine","_context2","jwe","_callee3","_context3","LINE_EVENTS","ERROR","mockRejectedValue","on","error","message","toBe","waitForMsecs","INACTIVE","file","REGISTRATION_FILE","_callee4","_context4","mockReturnValueOnce","deregister","createCallSpy","makeCall","address","type","CallType","URI","CallDirection","OUTBOUND","lineId","toBeTruthy","getCall","getCorrelationId","direction","toStrictEqual","end","destination","done","toBeUndefined","assertions","toBeCalledWith","String"],"sources":["line.test.ts"],"sourcesContent":["import {Mutex} from 'async-mutex';\nimport {\n getMobiusDiscoveryResponse,\n getMockDeviceInfo,\n getMockRequestTemplate,\n getTestUtilsWebex,\n} from '../../common/testUtil';\nimport {URL} from '../registration/registerFixtures';\nimport {filterMobiusUris} from '../../common';\nimport {\n CallDirection,\n CallType,\n MobiusServers,\n RegistrationStatus,\n ServiceIndicator,\n WebexRequestPayload,\n} from '../../common/types';\nimport {LINE_EVENTS} from './types';\nimport Line from '.';\nimport * as utils from '../../common/Utils';\nimport SDKConnector from '../../SDKConnector';\nimport {REGISTRATION_FILE} from '../constants';\nimport {LOGGER} from '../../Logger/types';\nimport * as regUtils from '../registration/register';\nimport {APIRequest} from '../utils/request';\n\njest.mock('../../mobius-socket', () => ({\n getMobiusSocketInstance: jest.fn().mockReturnValue({\n sendWssRequest: jest.fn(),\n }),\n}));\njest.spyOn(utils, 'uploadLogs').mockResolvedValue(undefined);\n\ndescribe('Line Tests', () => {\n const mutex = new Mutex();\n const webex = getTestUtilsWebex();\n SDKConnector.setWebex(webex);\n\n beforeEach(() => {\n APIRequest.resetInstance();\n APIRequest.getInstance({webex, isMobiusSocketEnabled: false});\n });\n\n const defaultServiceData = {indicator: ServiceIndicator.CALLING, domain: ''};\n const createRegistrationSpy = jest.spyOn(regUtils, 'createRegistration');\n\n const mobiusUris = filterMobiusUris(getMobiusDiscoveryResponse(), URL);\n const primaryMobiusUris = jest.fn(() => mobiusUris.primary);\n const backupMobiusUris = jest.fn(() => mobiusUris.backup);\n const userId = webex.internal.device.userId;\n const clientDeviceUri = webex.internal.device.url;\n const mockJwe = 'mockJwe';\n const guestServiceData = {\n indicator: ServiceIndicator.GUEST_CALLING,\n domain: '',\n guestName: 'testUser',\n };\n\n const handleErrorSpy = jest.spyOn(utils, 'handleRegistrationErrors');\n // Simulate node fetch by adding the mock webex.request\n global.fetch = webex.request;\n\n jest.clearAllMocks();\n\n describe('Line Registration tests', () => {\n let line;\n const mockRegistrationBody = getMockDeviceInfo();\n\n const discoveryBody: MobiusServers = getMobiusDiscoveryResponse();\n const primaryUrl = `${discoveryBody.primary.uris[0]}/calling/web/`;\n\n const registrationPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockRegistrationBody,\n });\n\n beforeEach(() => {\n line = new Line(\n userId,\n clientDeviceUri,\n mutex,\n primaryMobiusUris(),\n backupMobiusUris(),\n LOGGER.INFO\n );\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n jest.useRealTimers();\n line.removeAllListeners();\n });\n\n it('verify successful Registration cases and keepalive', async () => {\n jest.useFakeTimers();\n webex.request.mockReturnValue(registrationPayload);\n\n expect(createRegistrationSpy).toBeCalledOnceWith(\n webex,\n defaultServiceData,\n expect.any(Mutex),\n expect.anything(),\n LOGGER.INFO,\n undefined\n );\n expect(line.getStatus()).toEqual(RegistrationStatus.IDLE);\n await line.register();\n\n expect(webex.request).toBeCalledOnceWith({\n ...getMockRequestTemplate(),\n body: {\n userId,\n clientDeviceUri,\n serviceData: defaultServiceData,\n },\n uri: `${primaryUrl}device`,\n method: 'POST',\n });\n expect(handleErrorSpy).not.toBeCalled();\n\n expect(line.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(line.getActiveMobiusUrl()).toEqual(primaryUrl);\n expect(line.getLoggingLevel()).toEqual(LOGGER.INFO);\n expect(line.getDeviceId()).toEqual(mockRegistrationBody.device.deviceId);\n expect(line.callManager.lineDict[mockRegistrationBody.device.deviceId]).toEqual(line);\n\n webex.request.mockClear();\n\n jest.advanceTimersByTime(30 * 1000);\n await Promise.resolve();\n\n jest.useRealTimers();\n });\n\n it('verify successful Registration cases and keepalive for a guest user', async () => {\n createRegistrationSpy.mockClear();\n const guestLine = new Line(\n userId,\n clientDeviceUri,\n mutex,\n primaryMobiusUris(),\n backupMobiusUris(),\n LOGGER.INFO,\n guestServiceData,\n mockJwe\n );\n jest.useFakeTimers();\n webex.request.mockReturnValue(registrationPayload);\n\n expect(createRegistrationSpy).toBeCalledOnceWith(\n webex,\n guestServiceData,\n expect.any(Mutex),\n expect.anything(),\n LOGGER.INFO,\n mockJwe\n );\n expect(guestLine.getStatus()).toEqual(RegistrationStatus.IDLE);\n await guestLine.register();\n\n expect(webex.request).toBeCalledOnceWith({\n ...getMockRequestTemplate(),\n body: {\n userId,\n clientDeviceUri,\n serviceData: {...guestServiceData, jwe: mockJwe},\n },\n uri: `${primaryUrl}device`,\n method: 'POST',\n });\n expect(handleErrorSpy).not.toBeCalled();\n\n expect(guestLine.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(guestLine.getActiveMobiusUrl()).toEqual(primaryUrl);\n expect(guestLine.getLoggingLevel()).toEqual(LOGGER.INFO);\n expect(guestLine.getDeviceId()).toEqual(mockRegistrationBody.device.deviceId);\n\n webex.request.mockClear();\n\n jest.advanceTimersByTime(30 * 1000);\n await Promise.resolve();\n\n jest.useRealTimers();\n });\n\n it('verify failure Registration cases all requests fail ', async () => {\n line.removeAllListeners(LINE_EVENTS.ERROR);\n\n webex.request.mockRejectedValue({\n statusCode: 401,\n });\n\n line.on(LINE_EVENTS.ERROR, (error) => {\n expect(error.message).toBe(\n 'User is unauthorized due to an expired token. Sign out, then sign back in.'\n );\n });\n\n expect(line.getStatus()).toBe(RegistrationStatus.IDLE);\n line.register();\n await utils.waitForMsecs(20);\n\n expect(line.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(handleErrorSpy).toBeCalledOnceWith(\n expect.anything(),\n expect.anything(),\n {\n file: REGISTRATION_FILE,\n method: 'triggerRegistration',\n },\n expect.anything(),\n expect.anything()\n );\n });\n\n it('verify successful de-registration cases', async () => {\n webex.request.mockReturnValueOnce(registrationPayload);\n\n expect(line.getStatus()).toEqual(RegistrationStatus.IDLE);\n await line.register();\n expect(line.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n\n await line.deregister();\n expect(line.getStatus()).toEqual(RegistrationStatus.IDLE);\n });\n });\n\n describe('Line calling tests', () => {\n let line;\n\n beforeEach(() => {\n line = new Line(\n userId,\n clientDeviceUri,\n mutex,\n primaryMobiusUris(),\n backupMobiusUris(),\n LOGGER.INFO\n );\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n jest.useRealTimers();\n line.removeAllListeners();\n });\n it('Return a successful call object while making call', () => {\n const createCallSpy = jest.spyOn(line.callManager, 'createCall');\n const call = line.makeCall({address: '5003', type: CallType.URI});\n\n expect(createCallSpy).toBeCalledOnceWith(CallDirection.OUTBOUND, undefined, line.lineId, {\n address: 'tel:5003',\n type: 'uri',\n });\n expect(call).toBeTruthy();\n expect(line.getCall(call ? call.getCorrelationId() : '')).toBe(call);\n expect(call ? call.direction : undefined).toStrictEqual(CallDirection.OUTBOUND);\n call?.end();\n });\n\n it('Return a successful call object while making call to FAC codes', () => {\n const createCallSpy = jest.spyOn(line.callManager, 'createCall');\n const call = line.makeCall({address: '*25', type: CallType.URI});\n\n expect(createCallSpy).toBeCalledOnceWith(CallDirection.OUTBOUND, undefined, line.lineId, {\n address: 'tel:*25',\n type: 'uri',\n });\n expect(call).toBeTruthy();\n expect(call ? call.direction : undefined).toStrictEqual(CallDirection.OUTBOUND);\n call?.end();\n });\n\n it('Remove spaces from dialled number while making call', () => {\n const createCallSpy = jest.spyOn(line.callManager, 'createCall');\n const call = line.makeCall({address: '+91 123 456 7890', type: CallType.URI});\n\n expect(createCallSpy).toBeCalledOnceWith(CallDirection.OUTBOUND, undefined, line.lineId, {\n address: 'tel:+911234567890',\n type: 'uri',\n });\n expect(call).toBeTruthy();\n expect(call ? call.direction : undefined).toStrictEqual(CallDirection.OUTBOUND);\n expect(call ? call.destination.address : undefined).toStrictEqual('tel:+911234567890');\n call?.end();\n });\n\n it('Remove hyphen from dialled number while making call', () => {\n const createCallSpy = jest.spyOn(line.callManager, 'createCall');\n const call = line.makeCall({address: '123-456-7890', type: CallType.URI});\n\n expect(createCallSpy).toBeCalledOnceWith(CallDirection.OUTBOUND, undefined, line.lineId, {\n address: 'tel:1234567890',\n type: 'uri',\n });\n expect(call).toBeTruthy();\n expect(call ? call.direction : undefined).toStrictEqual(CallDirection.OUTBOUND);\n expect(call ? call.destination.address : undefined).toStrictEqual('tel:1234567890');\n call?.end();\n });\n\n it('attempt to create call with incorrect number format 1', (done) => {\n // There may be other listeners , which may create race\n line.removeAllListeners(LINE_EVENTS.ERROR);\n const createCallSpy = jest.spyOn(line.callManager, 'createCall');\n\n line.on(LINE_EVENTS.ERROR, (error) => {\n expect(error.message).toBe(\n 'An invalid phone number was detected. Check the number and try again.'\n );\n done();\n });\n try {\n const call = line.makeCall({address: 'select#$@^^', type: CallType.URI});\n\n expect(call).toBeUndefined();\n expect(createCallSpy).not.toBeCalledOnceWith({});\n } catch (error) {\n done(error);\n }\n });\n\n it('attempt to create call with incorrect number format 2', (done) => {\n expect.assertions(4);\n const createCallSpy = jest.spyOn(line.callManager, 'createCall');\n\n line.on(LINE_EVENTS.ERROR, (error) => {\n expect(error.message).toBe(\n 'An invalid phone number was detected. Check the number and try again.'\n );\n done();\n });\n\n try {\n const call = line.makeCall({address: '+1@8883332505', type: CallType.URI});\n\n expect(call).toBeUndefined();\n expect(createCallSpy).not.toBeCalledOnceWith({});\n } catch (error) {\n done(error);\n }\n });\n\n it('attempt to create call with guest calling service indicator', () => {\n expect.assertions(2);\n const createCallSpy = jest.spyOn(line.callManager, 'createCall');\n\n // Mocking the serviceData to have GUEST_CALLING indicator\n line = new Line(\n userId,\n clientDeviceUri,\n mutex,\n primaryMobiusUris(),\n backupMobiusUris(),\n LOGGER.INFO,\n {indicator: ServiceIndicator.GUEST_CALLING}\n );\n const call = line.makeCall();\n\n expect(call).toBeTruthy();\n expect(createCallSpy).toBeCalledWith(CallDirection.OUTBOUND, undefined, expect.any(String));\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_asyncMutex","require","_testUtil","_registerFixtures","_common","_types","_types2","_","_interopRequireDefault","utils","_interopRequireWildcard","_SDKConnector","_constants","_types3","regUtils","_request","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","jest","mock","getMobiusSocketInstance","fn","mockReturnValue","sendWssRequest","spyOn","mockResolvedValue","undefined","describe","mutex","Mutex","webex","getTestUtilsWebex","SDKConnector","setWebex","beforeEach","APIRequest","resetInstance","getInstance","isMobiusSocketEnabled","defaultServiceData","indicator","ServiceIndicator","CALLING","domain","createRegistrationSpy","mobiusUris","filterMobiusUris","getMobiusDiscoveryResponse","URL","primaryMobiusUris","primary","backupMobiusUris","backup","userId","internal","device","clientDeviceUri","url","mockJwe","guestServiceData","GUEST_CALLING","guestName","handleErrorSpy","global","fetch","request","clearAllMocks","line","mockRegistrationBody","getMockDeviceInfo","discoveryBody","primaryUrl","concat","uris","registrationPayload","statusCode","body","Line","LOGGER","INFO","afterEach","clearAllTimers","useRealTimers","removeAllListeners","it","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","useFakeTimers","expect","toBeCalledOnceWith","any","anything","getStatus","toEqual","RegistrationStatus","IDLE","register","getMockRequestTemplate","serviceData","uri","method","not","toBeCalled","ACTIVE","getActiveMobiusUrl","getLoggingLevel","getDeviceId","deviceId","callManager","lineDict","mockClear","advanceTimersByTime","_promise","resolve","stop","_callee2","guestLine","_context2","jwe","_callee3","_context3","LINE_EVENTS","ERROR","mockRejectedValue","on","error","message","toBe","waitForMsecs","INACTIVE","file","REGISTRATION_FILE","Number","_callee4","_context4","mockReturnValueOnce","deregister","createCallSpy","makeCall","address","type","CallType","URI","CallDirection","OUTBOUND","lineId","toBeTruthy","getCall","getCorrelationId","direction","toStrictEqual","end","destination","done","toBeUndefined","assertions","toBeCalledWith","String"],"sources":["line.test.ts"],"sourcesContent":["import {Mutex} from 'async-mutex';\nimport {\n getMobiusDiscoveryResponse,\n getMockDeviceInfo,\n getMockRequestTemplate,\n getTestUtilsWebex,\n} from '../../common/testUtil';\nimport {URL} from '../registration/registerFixtures';\nimport {filterMobiusUris} from '../../common';\nimport {\n CallDirection,\n CallType,\n MobiusServers,\n RegistrationStatus,\n ServiceIndicator,\n WebexRequestPayload,\n} from '../../common/types';\nimport {LINE_EVENTS} from './types';\nimport Line from '.';\nimport * as utils from '../../common/Utils';\nimport SDKConnector from '../../SDKConnector';\nimport {REGISTRATION_FILE} from '../constants';\nimport {LOGGER} from '../../Logger/types';\nimport * as regUtils from '../registration/register';\nimport {APIRequest} from '../utils/request';\n\njest.mock('../../mobius-socket', () => ({\n getMobiusSocketInstance: jest.fn().mockReturnValue({\n sendWssRequest: jest.fn(),\n }),\n}));\njest.spyOn(utils, 'uploadLogs').mockResolvedValue(undefined);\n\ndescribe('Line Tests', () => {\n const mutex = new Mutex();\n const webex = getTestUtilsWebex();\n SDKConnector.setWebex(webex);\n\n beforeEach(() => {\n APIRequest.resetInstance();\n APIRequest.getInstance({webex, isMobiusSocketEnabled: false});\n });\n\n const defaultServiceData = {indicator: ServiceIndicator.CALLING, domain: ''};\n const createRegistrationSpy = jest.spyOn(regUtils, 'createRegistration');\n\n const mobiusUris = filterMobiusUris(getMobiusDiscoveryResponse(), URL);\n const primaryMobiusUris = jest.fn(() => mobiusUris.primary);\n const backupMobiusUris = jest.fn(() => mobiusUris.backup);\n const userId = webex.internal.device.userId;\n const clientDeviceUri = webex.internal.device.url;\n const mockJwe = 'mockJwe';\n const guestServiceData = {\n indicator: ServiceIndicator.GUEST_CALLING,\n domain: '',\n guestName: 'testUser',\n };\n\n const handleErrorSpy = jest.spyOn(utils, 'handleRegistrationErrors');\n // Simulate node fetch by adding the mock webex.request\n global.fetch = webex.request;\n\n jest.clearAllMocks();\n\n describe('Line Registration tests', () => {\n let line;\n const mockRegistrationBody = getMockDeviceInfo();\n\n const discoveryBody: MobiusServers = getMobiusDiscoveryResponse();\n const primaryUrl = `${discoveryBody.primary.uris[0]}/calling/web/`;\n\n const registrationPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockRegistrationBody,\n });\n\n beforeEach(() => {\n line = new Line(\n userId,\n clientDeviceUri,\n mutex,\n primaryMobiusUris(),\n backupMobiusUris(),\n LOGGER.INFO\n );\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n jest.useRealTimers();\n line.removeAllListeners();\n });\n\n it('verify successful Registration cases and keepalive', async () => {\n jest.useFakeTimers();\n webex.request.mockReturnValue(registrationPayload);\n\n expect(createRegistrationSpy).toBeCalledOnceWith(\n webex,\n defaultServiceData,\n expect.any(Mutex),\n expect.anything(),\n LOGGER.INFO,\n undefined\n );\n expect(line.getStatus()).toEqual(RegistrationStatus.IDLE);\n await line.register();\n\n expect(webex.request).toBeCalledOnceWith({\n ...getMockRequestTemplate(),\n body: {\n userId,\n clientDeviceUri,\n serviceData: defaultServiceData,\n },\n uri: `${primaryUrl}device`,\n method: 'POST',\n });\n expect(handleErrorSpy).not.toBeCalled();\n\n expect(line.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(line.getActiveMobiusUrl()).toEqual(primaryUrl);\n expect(line.getLoggingLevel()).toEqual(LOGGER.INFO);\n expect(line.getDeviceId()).toEqual(mockRegistrationBody.device.deviceId);\n expect(line.callManager.lineDict[mockRegistrationBody.device.deviceId]).toEqual(line);\n\n webex.request.mockClear();\n\n jest.advanceTimersByTime(30 * 1000);\n await Promise.resolve();\n\n jest.useRealTimers();\n });\n\n it('verify successful Registration cases and keepalive for a guest user', async () => {\n createRegistrationSpy.mockClear();\n const guestLine = new Line(\n userId,\n clientDeviceUri,\n mutex,\n primaryMobiusUris(),\n backupMobiusUris(),\n LOGGER.INFO,\n guestServiceData,\n mockJwe\n );\n jest.useFakeTimers();\n webex.request.mockReturnValue(registrationPayload);\n\n expect(createRegistrationSpy).toBeCalledOnceWith(\n webex,\n guestServiceData,\n expect.any(Mutex),\n expect.anything(),\n LOGGER.INFO,\n mockJwe\n );\n expect(guestLine.getStatus()).toEqual(RegistrationStatus.IDLE);\n await guestLine.register();\n\n expect(webex.request).toBeCalledOnceWith({\n ...getMockRequestTemplate(),\n body: {\n userId,\n clientDeviceUri,\n serviceData: {...guestServiceData, jwe: mockJwe},\n },\n uri: `${primaryUrl}device`,\n method: 'POST',\n });\n expect(handleErrorSpy).not.toBeCalled();\n\n expect(guestLine.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(guestLine.getActiveMobiusUrl()).toEqual(primaryUrl);\n expect(guestLine.getLoggingLevel()).toEqual(LOGGER.INFO);\n expect(guestLine.getDeviceId()).toEqual(mockRegistrationBody.device.deviceId);\n\n webex.request.mockClear();\n\n jest.advanceTimersByTime(30 * 1000);\n await Promise.resolve();\n\n jest.useRealTimers();\n });\n\n it('verify failure Registration cases all requests fail ', async () => {\n line.removeAllListeners(LINE_EVENTS.ERROR);\n\n webex.request.mockRejectedValue({\n statusCode: 401,\n });\n\n line.on(LINE_EVENTS.ERROR, (error) => {\n expect(error.message).toBe(\n 'User is unauthorized due to an expired token. Sign out, then sign back in.'\n );\n });\n\n expect(line.getStatus()).toBe(RegistrationStatus.IDLE);\n line.register();\n await utils.waitForMsecs(20);\n\n expect(line.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(handleErrorSpy).toBeCalledOnceWith(\n expect.anything(),\n expect.anything(),\n {\n file: REGISTRATION_FILE,\n method: 'triggerRegistration',\n },\n expect.anything(),\n expect.anything(),\n expect.any(Number)\n );\n });\n\n it('verify successful de-registration cases', async () => {\n webex.request.mockReturnValueOnce(registrationPayload);\n\n expect(line.getStatus()).toEqual(RegistrationStatus.IDLE);\n await line.register();\n expect(line.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n\n await line.deregister();\n expect(line.getStatus()).toEqual(RegistrationStatus.IDLE);\n });\n });\n\n describe('Line calling tests', () => {\n let line;\n\n beforeEach(() => {\n line = new Line(\n userId,\n clientDeviceUri,\n mutex,\n primaryMobiusUris(),\n backupMobiusUris(),\n LOGGER.INFO\n );\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n jest.useRealTimers();\n line.removeAllListeners();\n });\n it('Return a successful call object while making call', () => {\n const createCallSpy = jest.spyOn(line.callManager, 'createCall');\n const call = line.makeCall({address: '5003', type: CallType.URI});\n\n expect(createCallSpy).toBeCalledOnceWith(CallDirection.OUTBOUND, undefined, line.lineId, {\n address: 'tel:5003',\n type: 'uri',\n });\n expect(call).toBeTruthy();\n expect(line.getCall(call ? call.getCorrelationId() : '')).toBe(call);\n expect(call ? call.direction : undefined).toStrictEqual(CallDirection.OUTBOUND);\n call?.end();\n });\n\n it('Return a successful call object while making call to FAC codes', () => {\n const createCallSpy = jest.spyOn(line.callManager, 'createCall');\n const call = line.makeCall({address: '*25', type: CallType.URI});\n\n expect(createCallSpy).toBeCalledOnceWith(CallDirection.OUTBOUND, undefined, line.lineId, {\n address: 'tel:*25',\n type: 'uri',\n });\n expect(call).toBeTruthy();\n expect(call ? call.direction : undefined).toStrictEqual(CallDirection.OUTBOUND);\n call?.end();\n });\n\n it('Remove spaces from dialled number while making call', () => {\n const createCallSpy = jest.spyOn(line.callManager, 'createCall');\n const call = line.makeCall({address: '+91 123 456 7890', type: CallType.URI});\n\n expect(createCallSpy).toBeCalledOnceWith(CallDirection.OUTBOUND, undefined, line.lineId, {\n address: 'tel:+911234567890',\n type: 'uri',\n });\n expect(call).toBeTruthy();\n expect(call ? call.direction : undefined).toStrictEqual(CallDirection.OUTBOUND);\n expect(call ? call.destination.address : undefined).toStrictEqual('tel:+911234567890');\n call?.end();\n });\n\n it('Remove hyphen from dialled number while making call', () => {\n const createCallSpy = jest.spyOn(line.callManager, 'createCall');\n const call = line.makeCall({address: '123-456-7890', type: CallType.URI});\n\n expect(createCallSpy).toBeCalledOnceWith(CallDirection.OUTBOUND, undefined, line.lineId, {\n address: 'tel:1234567890',\n type: 'uri',\n });\n expect(call).toBeTruthy();\n expect(call ? call.direction : undefined).toStrictEqual(CallDirection.OUTBOUND);\n expect(call ? call.destination.address : undefined).toStrictEqual('tel:1234567890');\n call?.end();\n });\n\n it('attempt to create call with incorrect number format 1', (done) => {\n // There may be other listeners , which may create race\n line.removeAllListeners(LINE_EVENTS.ERROR);\n const createCallSpy = jest.spyOn(line.callManager, 'createCall');\n\n line.on(LINE_EVENTS.ERROR, (error) => {\n expect(error.message).toBe(\n 'An invalid phone number was detected. Check the number and try again.'\n );\n done();\n });\n try {\n const call = line.makeCall({address: 'select#$@^^', type: CallType.URI});\n\n expect(call).toBeUndefined();\n expect(createCallSpy).not.toBeCalledOnceWith({});\n } catch (error) {\n done(error);\n }\n });\n\n it('attempt to create call with incorrect number format 2', (done) => {\n expect.assertions(4);\n const createCallSpy = jest.spyOn(line.callManager, 'createCall');\n\n line.on(LINE_EVENTS.ERROR, (error) => {\n expect(error.message).toBe(\n 'An invalid phone number was detected. Check the number and try again.'\n );\n done();\n });\n\n try {\n const call = line.makeCall({address: '+1@8883332505', type: CallType.URI});\n\n expect(call).toBeUndefined();\n expect(createCallSpy).not.toBeCalledOnceWith({});\n } catch (error) {\n done(error);\n }\n });\n\n it('attempt to create call with guest calling service indicator', () => {\n expect.assertions(2);\n const createCallSpy = jest.spyOn(line.callManager, 'createCall');\n\n // Mocking the serviceData to have GUEST_CALLING indicator\n line = new Line(\n userId,\n clientDeviceUri,\n mutex,\n primaryMobiusUris(),\n backupMobiusUris(),\n LOGGER.INFO,\n {indicator: ServiceIndicator.GUEST_CALLING}\n );\n const call = line.makeCall();\n\n expect(call).toBeTruthy();\n expect(createCallSpy).toBeCalledWith(CallDirection.OUTBOUND, undefined, expect.any(String));\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -322,20 +322,34 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
|
|
|
322
322
|
while (1) switch (_context5.prev = _context5.next) {
|
|
323
323
|
case 0:
|
|
324
324
|
abort = false;
|
|
325
|
-
if (!this.
|
|
326
|
-
_context5.next =
|
|
325
|
+
if (!this.apiRequest.isSocketEnabled()) {
|
|
326
|
+
_context5.next = 1;
|
|
327
327
|
break;
|
|
328
328
|
}
|
|
329
|
+
_Logger.default.info("Disconnecting from Mobius socket to restore previous registration.", {
|
|
330
|
+
file: _constants2.REGISTRATION_FILE,
|
|
331
|
+
method: 'restorePreviousRegistration'
|
|
332
|
+
});
|
|
329
333
|
_context5.next = 1;
|
|
330
|
-
return this.
|
|
334
|
+
return this.apiRequest.disconnectFromMobiusSocket({
|
|
335
|
+
code: 3050,
|
|
336
|
+
reason: 'done (permanent)'
|
|
337
|
+
});
|
|
331
338
|
case 1:
|
|
339
|
+
if (!this.activeMobiusUrl) {
|
|
340
|
+
_context5.next = 7;
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
343
|
+
_context5.next = 2;
|
|
344
|
+
return this.attemptRegistrationWithServers(caller, [this.activeMobiusUrl]);
|
|
345
|
+
case 2:
|
|
332
346
|
abort = _context5.sent;
|
|
333
347
|
if (!this.retryAfter) {
|
|
334
|
-
_context5.next =
|
|
348
|
+
_context5.next = 7;
|
|
335
349
|
break;
|
|
336
350
|
}
|
|
337
351
|
if (!(this.retryAfter < _constants2.RETRY_TIMER_UPPER_LIMIT)) {
|
|
338
|
-
_context5.next =
|
|
352
|
+
_context5.next = 3;
|
|
339
353
|
break;
|
|
340
354
|
}
|
|
341
355
|
// If retry-after is less than threshold, honor it and schedule retry
|
|
@@ -351,28 +365,28 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
|
|
|
351
365
|
}
|
|
352
366
|
}, _callee4);
|
|
353
367
|
})), this.retryAfter * 1000);
|
|
354
|
-
_context5.next =
|
|
368
|
+
_context5.next = 6;
|
|
355
369
|
break;
|
|
356
|
-
case
|
|
370
|
+
case 3:
|
|
357
371
|
if (!(this.primaryMobiusUris.includes(this.activeMobiusUrl) && this.backupMobiusUris.length > 0)) {
|
|
358
|
-
_context5.next =
|
|
372
|
+
_context5.next = 5;
|
|
359
373
|
break;
|
|
360
374
|
}
|
|
361
|
-
_context5.next =
|
|
375
|
+
_context5.next = 4;
|
|
362
376
|
return this.attemptRegistrationWithServers(caller, this.backupMobiusUris);
|
|
363
|
-
case
|
|
377
|
+
case 4:
|
|
364
378
|
abort = _context5.sent;
|
|
365
|
-
_context5.next =
|
|
379
|
+
_context5.next = 6;
|
|
366
380
|
break;
|
|
367
|
-
case 4:
|
|
368
|
-
// If we are using backup and got 429, restart registration
|
|
369
|
-
this.restartRegistration(caller);
|
|
370
381
|
case 5:
|
|
382
|
+
_context5.next = 6;
|
|
383
|
+
return this.restartRegistration(caller);
|
|
384
|
+
case 6:
|
|
371
385
|
this.retryAfter = undefined;
|
|
372
386
|
return _context5.abrupt("return", true);
|
|
373
|
-
case 6:
|
|
374
|
-
return _context5.abrupt("return", abort);
|
|
375
387
|
case 7:
|
|
388
|
+
return _context5.abrupt("return", abort);
|
|
389
|
+
case 8:
|
|
376
390
|
case "end":
|
|
377
391
|
return _context5.stop();
|
|
378
392
|
}
|
|
@@ -602,13 +616,24 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
|
|
|
602
616
|
}, _callee0);
|
|
603
617
|
})), interval * _constants2.SEC_TO_MSEC_MFACTOR);
|
|
604
618
|
_Logger.default.log("Scheduled retry with primary in ".concat(interval, " seconds, number of attempts : ").concat(attempt), loggerContext);
|
|
605
|
-
_context11.next =
|
|
619
|
+
_context11.next = 6;
|
|
606
620
|
break;
|
|
607
621
|
case 1:
|
|
608
622
|
if (!this.backupMobiusUris.length) {
|
|
609
|
-
_context11.next =
|
|
623
|
+
_context11.next = 4;
|
|
610
624
|
break;
|
|
611
625
|
}
|
|
626
|
+
if (!this.apiRequest.isSocketEnabled()) {
|
|
627
|
+
_context11.next = 2;
|
|
628
|
+
break;
|
|
629
|
+
}
|
|
630
|
+
_Logger.default.info('Disconnecting from primary Mobius socket for failover to backup servers', loggerContext);
|
|
631
|
+
_context11.next = 2;
|
|
632
|
+
return this.apiRequest.disconnectFromMobiusSocket({
|
|
633
|
+
code: 3050,
|
|
634
|
+
reason: 'done (permanent)'
|
|
635
|
+
});
|
|
636
|
+
case 2:
|
|
612
637
|
this.saveFailoverState({
|
|
613
638
|
attempt: attempt,
|
|
614
639
|
timeElapsed: timeElapsed,
|
|
@@ -617,9 +642,9 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
|
|
|
617
642
|
});
|
|
618
643
|
_Logger.default.info('Failing over to backup servers.', loggerContext);
|
|
619
644
|
this.failoverImmediately = false;
|
|
620
|
-
_context11.next =
|
|
645
|
+
_context11.next = 3;
|
|
621
646
|
return this.attemptRegistrationWithServers(_constants2.FAILOVER_UTIL, this.backupMobiusUris);
|
|
622
|
-
case
|
|
647
|
+
case 3:
|
|
623
648
|
abort = _context11.sent;
|
|
624
649
|
if (!abort && !this.isDeviceRegistered()) {
|
|
625
650
|
interval = this.getRegRetryInterval();
|
|
@@ -663,16 +688,16 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
|
|
|
663
688
|
})), interval * _constants2.SEC_TO_MSEC_MFACTOR);
|
|
664
689
|
_Logger.default.log("Scheduled retry with backup servers in ".concat(interval, " seconds."), loggerContext);
|
|
665
690
|
}
|
|
666
|
-
_context11.next =
|
|
691
|
+
_context11.next = 6;
|
|
667
692
|
break;
|
|
668
|
-
case 3:
|
|
669
|
-
_context11.next = 4;
|
|
670
|
-
return (0, _common.uploadLogs)();
|
|
671
693
|
case 4:
|
|
694
|
+
_context11.next = 5;
|
|
695
|
+
return (0, _common.uploadLogs)();
|
|
696
|
+
case 5:
|
|
672
697
|
(0, _common.emitFinalFailure)(function (clientError) {
|
|
673
698
|
_this3.lineEmitter(_types3.LINE_EVENTS.ERROR, undefined, clientError);
|
|
674
699
|
}, loggerContext, interval < 0 ? 'Timer threshold exceeded during failover' : undefined);
|
|
675
|
-
case
|
|
700
|
+
case 6:
|
|
676
701
|
case "end":
|
|
677
702
|
return _context11.stop();
|
|
678
703
|
}
|
|
@@ -1291,7 +1316,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
|
|
|
1291
1316
|
_context23.prev = 3;
|
|
1292
1317
|
_loop = /*#__PURE__*/_regenerator.default.mark(function _loop() {
|
|
1293
1318
|
var _this8$backupMobiusUr;
|
|
1294
|
-
var url, serverType, _this8$deviceInfo$dev, _resp$headers, _resp$headers$trackin, _resp$headers2, _this8$deviceInfo$dev2, wssNormalizedUrl, resp, body, _t5;
|
|
1319
|
+
var url, serverType, _this8$deviceInfo$dev, _resp$headers, _resp$headers$trackin, _resp$headers2, _this8$deviceInfo$dev2, wssNormalizedUrl, resp, body, _yield$handleRegistra, finalError, shouldDisconnect, _t5;
|
|
1295
1320
|
return _regenerator.default.wrap(function (_context22) {
|
|
1296
1321
|
while (1) switch (_context22.prev = _context22.next) {
|
|
1297
1322
|
case 0:
|
|
@@ -1338,19 +1363,11 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
|
|
|
1338
1363
|
case 5:
|
|
1339
1364
|
_context22.prev = 5;
|
|
1340
1365
|
_t5 = _context22["catch"](1);
|
|
1341
|
-
connectedWebSocketUrl = undefined;
|
|
1342
|
-
// eslint-disable-next-line no-await-in-loop
|
|
1343
|
-
_context22.next = 6;
|
|
1344
|
-
return _this8.apiRequest.disconnectFromMobiusSocket({
|
|
1345
|
-
code: 3050,
|
|
1346
|
-
reason: 'done (permanent)'
|
|
1347
|
-
});
|
|
1348
|
-
case 6:
|
|
1349
1366
|
body = _t5; // eslint-disable-next-line no-await-in-loop, @typescript-eslint/no-unused-vars
|
|
1350
|
-
_context22.next =
|
|
1351
|
-
return (0, _common.handleRegistrationErrors)(body, function (clientError,
|
|
1367
|
+
_context22.next = 6;
|
|
1368
|
+
return (0, _common.handleRegistrationErrors)(body, function (clientError, isFinalError) {
|
|
1352
1369
|
var _body$headers$trackin, _body$headers;
|
|
1353
|
-
if (
|
|
1370
|
+
if (isFinalError) {
|
|
1354
1371
|
_this8.lineEmitter(_types3.LINE_EVENTS.ERROR, undefined, clientError);
|
|
1355
1372
|
} else {
|
|
1356
1373
|
_this8.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
|
|
@@ -1361,11 +1378,14 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
|
|
|
1361
1378
|
file: _constants2.REGISTRATION_FILE
|
|
1362
1379
|
}, function (retryAfter, retryCaller) {
|
|
1363
1380
|
return _this8.handle429Retry(retryAfter, retryCaller);
|
|
1364
|
-
}, _this8.restoreRegistrationCallBack());
|
|
1365
|
-
case
|
|
1366
|
-
|
|
1381
|
+
}, _this8.restoreRegistrationCallBack(), servers.length);
|
|
1382
|
+
case 6:
|
|
1383
|
+
_yield$handleRegistra = _context22.sent;
|
|
1384
|
+
finalError = _yield$handleRegistra.finalError;
|
|
1385
|
+
shouldDisconnect = _yield$handleRegistra.shouldDisconnect;
|
|
1386
|
+
abort = finalError;
|
|
1367
1387
|
if (!(_this8.registrationStatus === _types2.RegistrationStatus.ACTIVE)) {
|
|
1368
|
-
_context22.next =
|
|
1388
|
+
_context22.next = 7;
|
|
1369
1389
|
break;
|
|
1370
1390
|
}
|
|
1371
1391
|
_Logger.default.info("[".concat(caller, "] : Device is already restored, active mobius url: ").concat(_this8.activeMobiusUrl), {
|
|
@@ -1373,6 +1393,18 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
|
|
|
1373
1393
|
method: _this8.attemptRegistrationWithServers.name
|
|
1374
1394
|
});
|
|
1375
1395
|
return _context22.abrupt("return", 0);
|
|
1396
|
+
case 7:
|
|
1397
|
+
if (!(shouldDisconnect && _this8.apiRequest.isSocketEnabled())) {
|
|
1398
|
+
_context22.next = 8;
|
|
1399
|
+
break;
|
|
1400
|
+
}
|
|
1401
|
+
connectedWebSocketUrl = undefined;
|
|
1402
|
+
// eslint-disable-next-line no-await-in-loop
|
|
1403
|
+
_context22.next = 8;
|
|
1404
|
+
return _this8.apiRequest.disconnectFromMobiusSocket({
|
|
1405
|
+
code: 3050,
|
|
1406
|
+
reason: 'done (permanent)'
|
|
1407
|
+
});
|
|
1376
1408
|
case 8:
|
|
1377
1409
|
if (!abort) {
|
|
1378
1410
|
_context22.next = 10;
|
|
@@ -1468,7 +1500,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
|
|
|
1468
1500
|
});
|
|
1469
1501
|
_this9.webWorker.onmessage = /*#__PURE__*/function () {
|
|
1470
1502
|
var _ref11 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee23(event) {
|
|
1471
|
-
var logContext, _this9$webWorker, res, _err$headers, _this9$webWorker2, error, _error, abort, _t7;
|
|
1503
|
+
var logContext, _this9$webWorker, res, _err$headers, _this9$webWorker2, error, _error, _yield$handleRegistra2, abort, _t7;
|
|
1472
1504
|
return _regenerator.default.wrap(function (_context24) {
|
|
1473
1505
|
while (1) switch (_context24.prev = _context24.next) {
|
|
1474
1506
|
case 0:
|
|
@@ -1532,7 +1564,8 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
|
|
|
1532
1564
|
return _this9.handle429Retry(retryAfter, retryCaller);
|
|
1533
1565
|
});
|
|
1534
1566
|
case 5:
|
|
1535
|
-
|
|
1567
|
+
_yield$handleRegistra2 = _context24.sent;
|
|
1568
|
+
abort = _yield$handleRegistra2.finalError;
|
|
1536
1569
|
if (!(abort || event.data.keepAliveRetryCount >= RETRY_COUNT_THRESHOLD)) {
|
|
1537
1570
|
_context24.next = 10;
|
|
1538
1571
|
break;
|