@webex/calling 3.12.0-next.3 → 3.12.0-next.31
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/CallingClient.js +463 -205
- package/dist/CallingClient/CallingClient.js.map +1 -1
- package/dist/CallingClient/CallingClient.test.js +170 -77
- package/dist/CallingClient/CallingClient.test.js.map +1 -1
- package/dist/CallingClient/calling/call.js +32 -8
- package/dist/CallingClient/calling/call.js.map +1 -1
- package/dist/CallingClient/calling/call.test.js +581 -445
- package/dist/CallingClient/calling/call.test.js.map +1 -1
- package/dist/CallingClient/calling/callManager.js +53 -30
- package/dist/CallingClient/calling/callManager.js.map +1 -1
- package/dist/CallingClient/calling/callManager.test.js +35 -0
- package/dist/CallingClient/calling/callManager.test.js.map +1 -1
- package/dist/CallingClient/calling/types.js +2 -0
- package/dist/CallingClient/calling/types.js.map +1 -1
- package/dist/CallingClient/constants.js +24 -3
- package/dist/CallingClient/constants.js.map +1 -1
- package/dist/CallingClient/line/line.test.js +16 -1
- package/dist/CallingClient/line/line.test.js.map +1 -1
- package/dist/CallingClient/registration/register.js +694 -406
- package/dist/CallingClient/registration/register.js.map +1 -1
- package/dist/CallingClient/registration/register.test.js +202 -21
- package/dist/CallingClient/registration/register.test.js.map +1 -1
- package/dist/CallingClient/registration/types.js.map +1 -1
- package/dist/CallingClient/registration/webWorker.js +41 -104
- package/dist/CallingClient/registration/webWorker.js.map +1 -1
- package/dist/CallingClient/registration/webWorker.test.js +39 -153
- package/dist/CallingClient/registration/webWorker.test.js.map +1 -1
- package/dist/CallingClient/registration/webWorkerStr.js +1 -1
- package/dist/CallingClient/registration/webWorkerStr.js.map +1 -1
- package/dist/CallingClient/utils/constants.js +46 -0
- package/dist/CallingClient/utils/constants.js.map +1 -0
- package/dist/CallingClient/utils/index.js +63 -0
- package/dist/CallingClient/utils/index.js.map +1 -0
- package/dist/CallingClient/utils/mobiusSocketMapper.js +122 -0
- package/dist/CallingClient/utils/mobiusSocketMapper.js.map +1 -0
- package/dist/CallingClient/utils/mobiusSocketMapper.test.js +211 -0
- package/dist/CallingClient/utils/mobiusSocketMapper.test.js.map +1 -0
- package/dist/CallingClient/utils/request.js +349 -0
- package/dist/CallingClient/utils/request.js.map +1 -0
- package/dist/CallingClient/utils/request.test.js +881 -0
- package/dist/CallingClient/utils/request.test.js.map +1 -0
- package/dist/CallingClient/utils/types.js +7 -0
- package/dist/CallingClient/utils/types.js.map +1 -0
- package/dist/CallingClient/utils/wsFeatureFlag.js +70 -0
- package/dist/CallingClient/utils/wsFeatureFlag.js.map +1 -0
- package/dist/CallingClient/utils/wsFeatureFlag.test.js +139 -0
- package/dist/CallingClient/utils/wsFeatureFlag.test.js.map +1 -0
- package/dist/Contacts/ContactsClient.test.js +3 -8
- package/dist/Contacts/ContactsClient.test.js.map +1 -1
- package/dist/Events/types.js +1 -11
- package/dist/Events/types.js.map +1 -1
- package/dist/Metrics/index.js +60 -0
- package/dist/Metrics/index.js.map +1 -1
- package/dist/Metrics/index.test.js +356 -0
- package/dist/Metrics/index.test.js.map +1 -1
- package/dist/Metrics/types.js +11 -1
- package/dist/Metrics/types.js.map +1 -1
- package/dist/SDKConnector/types.js.map +1 -1
- package/dist/common/Utils.js +138 -44
- package/dist/common/Utils.js.map +1 -1
- package/dist/common/testUtil.js +8 -4
- package/dist/common/testUtil.js.map +1 -1
- package/dist/common/types.js +2 -0
- package/dist/common/types.js.map +1 -1
- package/dist/mobius-socket/config.js +24 -0
- package/dist/mobius-socket/config.js.map +1 -0
- package/dist/mobius-socket/errors.js +150 -0
- package/dist/mobius-socket/errors.js.map +1 -0
- package/dist/mobius-socket/index.js +57 -0
- package/dist/mobius-socket/index.js.map +1 -0
- package/dist/mobius-socket/mobius-socket-events.test.js +485 -0
- package/dist/mobius-socket/mobius-socket-events.test.js.map +1 -0
- package/dist/mobius-socket/mobius-socket.js +804 -0
- package/dist/mobius-socket/mobius-socket.js.map +1 -0
- package/dist/mobius-socket/mobius-socket.test.js +1833 -0
- package/dist/mobius-socket/mobius-socket.test.js.map +1 -0
- package/dist/mobius-socket/socket/constants.js +34 -0
- package/dist/mobius-socket/socket/constants.js.map +1 -0
- package/dist/mobius-socket/socket/index.js +15 -0
- package/dist/mobius-socket/socket/index.js.map +1 -0
- package/dist/mobius-socket/socket/socket-base.js +604 -0
- package/dist/mobius-socket/socket/socket-base.js.map +1 -0
- package/dist/mobius-socket/socket/socket.js +19 -0
- package/dist/mobius-socket/socket/socket.js.map +1 -0
- package/dist/mobius-socket/socket/socket.shim.js +26 -0
- package/dist/mobius-socket/socket/socket.shim.js.map +1 -0
- package/dist/mobius-socket/socket/types.js +7 -0
- package/dist/mobius-socket/socket/types.js.map +1 -0
- package/dist/mobius-socket/socket.test.js +727 -0
- package/dist/mobius-socket/socket.test.js.map +1 -0
- package/dist/mobius-socket/test/mocha-helpers.js +23 -0
- package/dist/mobius-socket/test/mocha-helpers.js.map +1 -0
- package/dist/mobius-socket/test/promise-tick.js +28 -0
- package/dist/mobius-socket/test/promise-tick.js.map +1 -0
- package/dist/mobius-socket/types.js +7 -0
- package/dist/mobius-socket/types.js.map +1 -0
- package/dist/module/CallingClient/CallingClient.js +141 -10
- package/dist/module/CallingClient/calling/call.js +24 -6
- package/dist/module/CallingClient/calling/callManager.js +27 -7
- package/dist/module/CallingClient/calling/types.js +2 -0
- package/dist/module/CallingClient/constants.js +20 -0
- package/dist/module/CallingClient/registration/register.js +226 -62
- package/dist/module/CallingClient/registration/webWorker.js +42 -61
- package/dist/module/CallingClient/registration/webWorkerStr.js +47 -82
- package/dist/module/CallingClient/utils/constants.js +30 -0
- package/dist/module/CallingClient/utils/index.js +5 -0
- package/dist/module/CallingClient/utils/mobiusSocketMapper.js +72 -0
- package/dist/module/CallingClient/utils/request.js +162 -0
- package/dist/module/CallingClient/utils/types.js +1 -0
- package/dist/module/CallingClient/utils/wsFeatureFlag.js +41 -0
- package/dist/module/Events/types.js +0 -10
- package/dist/module/Metrics/index.js +46 -0
- package/dist/module/Metrics/types.js +10 -0
- package/dist/module/common/Utils.js +52 -12
- package/dist/module/common/testUtil.js +5 -1
- package/dist/module/common/types.js +2 -0
- package/dist/module/mobius-socket/config.js +15 -0
- package/dist/module/mobius-socket/errors.js +64 -0
- package/dist/module/mobius-socket/index.js +24 -0
- package/dist/module/mobius-socket/mobius-socket.js +571 -0
- package/dist/module/mobius-socket/socket/constants.js +10 -0
- package/dist/module/mobius-socket/socket/index.js +4 -0
- package/dist/module/mobius-socket/socket/socket-base.js +368 -0
- package/dist/module/mobius-socket/socket/socket.js +9 -0
- package/dist/module/mobius-socket/socket/socket.shim.js +12 -0
- package/dist/module/mobius-socket/socket/types.js +1 -0
- package/dist/module/mobius-socket/types.js +1 -0
- package/dist/types/CallingClient/CallingClient.d.ts +7 -0
- package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/call.d.ts +2 -0
- package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/callManager.d.ts +3 -2
- package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/types.d.ts +21 -9
- package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
- package/dist/types/CallingClient/constants.d.ts +20 -0
- package/dist/types/CallingClient/constants.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/register.d.ts +6 -0
- package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/types.d.ts +3 -1
- package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/webWorkerStr.d.ts +1 -1
- package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -1
- package/dist/types/CallingClient/utils/constants.d.ts +30 -0
- package/dist/types/CallingClient/utils/constants.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/index.d.ts +6 -0
- package/dist/types/CallingClient/utils/index.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts +5 -0
- package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/request.d.ts +23 -0
- package/dist/types/CallingClient/utils/request.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/types.d.ts +29 -0
- package/dist/types/CallingClient/utils/types.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts +4 -0
- package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts.map +1 -0
- package/dist/types/Events/types.d.ts +0 -10
- package/dist/types/Events/types.d.ts.map +1 -1
- package/dist/types/Metrics/index.d.ts.map +1 -1
- package/dist/types/Metrics/types.d.ts +11 -1
- package/dist/types/Metrics/types.d.ts.map +1 -1
- package/dist/types/SDKConnector/types.d.ts +24 -0
- package/dist/types/SDKConnector/types.d.ts.map +1 -1
- package/dist/types/common/Utils.d.ts +9 -2
- package/dist/types/common/Utils.d.ts.map +1 -1
- package/dist/types/common/testUtil.d.ts +4 -1
- package/dist/types/common/testUtil.d.ts.map +1 -1
- package/dist/types/common/types.d.ts +3 -0
- package/dist/types/common/types.d.ts.map +1 -1
- package/dist/types/mobius-socket/config.d.ts +17 -0
- package/dist/types/mobius-socket/config.d.ts.map +1 -0
- package/dist/types/mobius-socket/errors.d.ts +32 -0
- package/dist/types/mobius-socket/errors.d.ts.map +1 -0
- package/dist/types/mobius-socket/index.d.ts +14 -0
- package/dist/types/mobius-socket/index.d.ts.map +1 -0
- package/dist/types/mobius-socket/mobius-socket.d.ts +48 -0
- package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -0
- package/dist/types/mobius-socket/socket/constants.d.ts +11 -0
- package/dist/types/mobius-socket/socket/constants.d.ts.map +1 -0
- package/dist/types/mobius-socket/socket/index.d.ts +5 -0
- package/dist/types/mobius-socket/socket/index.d.ts.map +1 -0
- package/dist/types/mobius-socket/socket/socket-base.d.ts +43 -0
- package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -0
- package/dist/types/mobius-socket/socket/socket.d.ts +6 -0
- package/dist/types/mobius-socket/socket/socket.d.ts.map +1 -0
- package/dist/types/mobius-socket/socket/socket.shim.d.ts +6 -0
- package/dist/types/mobius-socket/socket/socket.shim.d.ts.map +1 -0
- package/dist/types/mobius-socket/socket/types.d.ts +61 -0
- package/dist/types/mobius-socket/socket/types.d.ts.map +1 -0
- package/dist/types/mobius-socket/types.d.ts +21 -0
- package/dist/types/mobius-socket/types.d.ts.map +1 -0
- package/package.json +20 -5
- package/src/mobius-socket/socket/socket.shim.ts +22 -0
- package/src/mobius-socket/socket/socket.ts +14 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_crypto","require","_testHelperChai","_testHelperMockWebSocket","_interopRequireDefault","_sinon","_errors","_config","_socket","_constants","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty3","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty2","crypto","randomUUID","_defineProperty2","value","configurable","describe","mockWebSocket","socket","usingFakeTimers","mockoptions","logger","console","token","trackingId","config","mobiusSocket","emitAuthResponse","_ref","undefined","_ref$statusCode","statusCode","_ref$statusMessage","statusMessage","authRequest","JSON","parse","send","lastCall","args","emit","data","_stringify","type","subtype","MESSAGE_TYPES","AUTH","beforeEach","jest","useFakeTimers","doNotFake","sinon","stub","Socket","callsFake","_len","Array","_key","_construct2","MockWebSocket","promise","open","process","nextTick","afterEach","useRealTimers","getWebSocketConstructor","restore","_promise","resolve","close","then","freshSocket","catch","it","assert","isRejected","forceCloseDelay","openPromise","wssResponseTimeout","logLevelToken","readyState","equal","notEqual","binaryType","bufferedAmount","extensions","protocol","url","s","firstCallArgs","firstCall","code","reason","instanceOf","BadRequest","match","message","NotAuthorized","Forbidden","ConnectionError","property","error","name","called","all","calledWith","p1","p2","transientSocket","spy","on","removeAllListeners","closePromise","advanceTimersByTime","description","closeOptions","expectedCode","expectedReason","_ref2","_asyncToGenerator2","_regenerator","mark","_callee","socketInstance","previousStub","closeSpy","result","wrap","_context","prev","next","_len2","_key2","sent","calledOnce","stop","json","_forEach2","Replaced","concat","id","eventId","eventType","callId","deviceId","acknowledge","notCalled","EVENT_ACK"],"sources":["socket.test.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {randomUUID} from 'crypto';\nimport {forEach} from 'lodash';\nimport {assert} from '@webex/test-helper-chai';\nimport MockWebSocket from '@webex/test-helper-mock-web-socket';\nimport sinon from 'sinon';\nimport {BadRequest, NotAuthorized, Forbidden, ConnectionError} from './errors';\nimport config from './config';\nimport Socket from './socket';\nimport {MESSAGE_TYPES} from './socket/constants';\n\nif (!crypto.randomUUID) {\n Object.defineProperty(crypto, 'randomUUID', {\n value: randomUUID,\n configurable: true,\n });\n}\n\ndescribe('plugin-mobius-socket', () => {\n describe('Socket', () => {\n let mockWebSocket;\n let socket;\n let usingFakeTimers;\n\n const mockoptions = {\n logger: console,\n token: 'mocktoken',\n trackingId: 'mocktrackingid',\n ...config.mobiusSocket,\n };\n\n const emitAuthResponse = ({statusCode = 200, statusMessage = 'OK'} = {}) => {\n const authRequest = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: MESSAGE_TYPES.AUTH,\n trackingId: authRequest.trackingId,\n statusCode,\n statusMessage,\n }),\n });\n };\n\n beforeEach(() => {\n jest.useFakeTimers({doNotFake: ['nextTick']});\n usingFakeTimers = true;\n });\n\n beforeEach(() => {\n sinon.stub(Socket, 'getWebSocketConstructor').callsFake(\n () =>\n function (...args) {\n mockWebSocket = new MockWebSocket(...args);\n\n return mockWebSocket;\n }\n );\n\n socket = new Socket();\n const promise = socket.open('ws://example.com', mockoptions);\n\n mockWebSocket.open();\n // Simulate Mobius auth response (MockWebSocket.open auto-sends mercury.buffer_state which Mobius ignores)\n process.nextTick(() => {\n emitAuthResponse();\n });\n\n return promise;\n });\n\n afterEach(() => {\n if (usingFakeTimers) {\n jest.useRealTimers();\n usingFakeTimers = false;\n }\n\n Socket.getWebSocketConstructor.restore();\n\n return Promise.resolve(socket && socket.close()).then(() => {\n mockWebSocket = undefined;\n socket = undefined;\n });\n });\n\n describe('#open()', () => {\n let freshSocket;\n\n beforeEach(() => {\n freshSocket = new Socket();\n });\n\n afterEach(() => freshSocket.close().catch(() => undefined));\n\n it('requires a url', () => assert.isRejected(freshSocket.open(), /`url` is required/));\n\n it('requires a forceCloseDelay option', () =>\n assert.isRejected(\n freshSocket.open('ws://example.com'),\n /missing required property forceCloseDelay/\n ));\n\n it('requires a token option', () =>\n assert.isRejected(\n freshSocket.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n }),\n /missing required property token/\n ));\n\n it('requires a trackingId option', () =>\n assert.isRejected(\n freshSocket.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n token: 'mocktoken',\n }),\n /missing required property trackingId/\n ));\n\n it('requires a logger option', () =>\n assert.isRejected(\n freshSocket.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n token: 'mocktoken',\n trackingId: 'mocktrackingid',\n }),\n /missing required property logger/\n ));\n\n it('accepts a logLevelToken option', () => {\n const openPromise = freshSocket.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n wssResponseTimeout: mockoptions.wssResponseTimeout,\n logger: console,\n token: 'mocktoken',\n trackingId: 'mocktrackingid',\n logLevelToken: 'mocklogleveltoken',\n });\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n emitAuthResponse();\n\n return openPromise.then(() => {\n assert.equal(freshSocket.logLevelToken, 'mocklogleveltoken');\n });\n });\n });\n\n describe('#binaryType', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.binaryType, 'test');\n mockWebSocket.binaryType = 'test';\n assert.equal(socket.binaryType, 'test');\n });\n });\n\n describe('#bufferedAmount', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.bufferedAmount, 'test');\n mockWebSocket.bufferedAmount = 'test';\n assert.equal(socket.bufferedAmount, 'test');\n });\n });\n\n describe('#extensions', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.extensions, 'test');\n mockWebSocket.extensions = 'test';\n assert.equal(socket.extensions, 'test');\n });\n });\n\n describe('#protocol', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.protocol, 'test');\n mockWebSocket.protocol = 'test';\n assert.equal(socket.protocol, 'test');\n });\n });\n\n describe('#readyState', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.readyState, 'test');\n mockWebSocket.readyState = 'test';\n assert.equal(socket.readyState, 'test');\n });\n });\n\n describe('#url', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.url, 'test');\n mockWebSocket.url = 'test';\n assert.equal(socket.url, 'test');\n });\n });\n\n describe('#open()', () => {\n it('requires a url parameter', () => {\n const s = new Socket();\n\n return assert.isRejected(s.open(), /`url` is required/);\n });\n\n it('cannot be called more than once', () =>\n assert.isRejected(\n socket.open('ws://example.com'),\n /Socket#open\\(\\) can only be called once/\n ));\n\n it(\"sets the underlying socket's binary type\", () =>\n assert.equal(socket.binaryType, 'arraybuffer'));\n\n describe('when connection fails because this is a service account', () => {\n it('rejects with a BadRequest', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n\n mockWebSocket.emit('close', {\n code: 4400,\n reason: \"Service accounts can't use this endpoint\",\n });\n\n return assert.isRejected(promise).then((reason) => {\n assert.instanceOf(reason, BadRequest);\n assert.match(reason.code, 4400);\n assert.match(reason.reason, /Service accounts can't use this endpoint/);\n assert.match(reason.message, /Service accounts can't use this endpoint/);\n\n return s.close();\n });\n });\n });\n\n describe('when connection fails because of an invalid token', () => {\n it('rejects with a NotAuthorized', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n\n mockWebSocket.emit('close', {\n code: 4401,\n reason: 'Authorization Failed',\n });\n\n return assert.isRejected(promise).then((reason) => {\n assert.instanceOf(reason, NotAuthorized);\n assert.match(reason.code, 4401);\n assert.match(reason.reason, /Authorization Failed/);\n assert.match(reason.message, /Authorization Failed/);\n\n return s.close();\n });\n });\n });\n\n describe('when connection fails because of a missing entitlement', () => {\n it('rejects with a Forbidden', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n\n mockWebSocket.emit('close', {\n code: 4403,\n reason: 'Not entitled',\n });\n\n return assert.isRejected(promise).then((reason) => {\n assert.instanceOf(reason, Forbidden);\n assert.match(reason.code, 4403);\n assert.match(reason.reason, /Not entitled/);\n assert.match(reason.message, /Not entitled/);\n\n return s.close();\n });\n });\n });\n\n describe('when connection fails for non-authorization reasons', () => {\n it(\"rejects with the close event's reason\", () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.emit('close', {\n code: 4001,\n reason: 'No',\n });\n\n return assert.isRejected(promise).then((reason) => {\n assert.instanceOf(reason, ConnectionError);\n assert.match(reason.code, 4001);\n assert.match(reason.reason, /No/);\n assert.match(reason.message, /No/);\n\n return s.close();\n });\n });\n });\n\n describe('when the connection succeeds', () => {\n it('sends an auth message up the socket', () => {\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n assert.property(firstCallArgs, 'data');\n assert.property(firstCallArgs.data, 'token');\n assert.equal(firstCallArgs.data.token, 'mocktoken');\n assert.property(firstCallArgs, 'trackingId');\n });\n\n describe('when logLevelToken is set', () => {\n it('includes auth payload with token', () => {\n const s = new Socket();\n\n s.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n wssResponseTimeout: mockoptions.wssResponseTimeout,\n logger: console,\n token: 'mocktoken',\n trackingId: 'mocktrackingid',\n }).catch((reason) => console.error(reason));\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n assert.property(firstCallArgs, 'data');\n assert.equal(firstCallArgs.data.token, 'mocktoken');\n assert.property(firstCallArgs, 'trackingId');\n\n return s.close();\n });\n });\n\n it('resolves upon receiving response_event auth response', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return promise.then(() => s.close());\n });\n\n it('rejects upon receiving a non-2xx auth response_event', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse({statusCode: 401, statusMessage: 'Unauthorized'});\n\n return assert.isRejected(promise).then((reason) => {\n assert.equal(reason.name, 'MobiusSocketResponseError');\n assert.equal(reason.statusCode, 401);\n assert.match(reason.statusMessage, /Unauthorized/);\n\n return s.close();\n });\n });\n });\n });\n\n describe('#close()', () => {\n it('closes the socket', () => socket.close().then(() => assert.called(mockWebSocket.close)));\n\n it('only accepts valid close codes', () =>\n Promise.all([\n assert.isRejected(\n socket.close({code: 1001}),\n /`options.code` must be 1000 or between 3000 and 4999 \\(inclusive\\)/\n ),\n socket.close({code: 1000}),\n ]));\n\n it('accepts a reason', () =>\n socket\n .close({\n code: 3001,\n reason: 'Custom Normal',\n })\n .then(() => assert.calledWith(mockWebSocket.close, 3001, 'Custom Normal')));\n\n it('accepts the logout reason', () =>\n socket\n .close({\n code: 3050,\n reason: 'done (permanent)',\n })\n .then(() => assert.calledWith(mockWebSocket.close, 3050, 'done (permanent)')));\n\n it('can safely be called called multiple times', () => {\n const p1 = socket.close();\n\n mockWebSocket.readyState = 2;\n const p2 = socket.close();\n\n return Promise.all([p1, p2]);\n });\n\n it('signals closure if no close frame is received within the specified window', () => {\n const transientSocket = new Socket();\n const openPromise = transientSocket.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return openPromise.then(() => {\n const spy = sinon.spy();\n\n transientSocket.on('close', spy);\n mockWebSocket.close = () =>\n new Promise(() => {\n /* eslint no-inline-comments: [0] */\n });\n mockWebSocket.removeAllListeners('close');\n\n const closePromise = transientSocket.close();\n\n jest.advanceTimersByTime(mockoptions.forceCloseDelay);\n\n return closePromise.then(() => {\n assert.called(spy);\n assert.calledWith(spy, {\n code: 1000,\n reason: 'Done (forced)',\n });\n });\n });\n });\n\n it('signals closure if no close frame is received within the specified window, but uses the initial options as 3050 if specified by options call', () => {\n const transientSocket = new Socket();\n const openPromise = transientSocket.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return openPromise.then(() => {\n const spy = sinon.spy();\n\n transientSocket.on('close', spy);\n mockWebSocket.close = () =>\n new Promise(() => {\n /* eslint no-inline-comments: [0] */\n });\n mockWebSocket.removeAllListeners('close');\n\n const closePromise = transientSocket.close({code: 3050, reason: 'done (permanent)'});\n\n jest.advanceTimersByTime(mockoptions.forceCloseDelay);\n\n return closePromise.then(() => {\n assert.called(spy);\n assert.calledWith(spy, {\n code: 3050,\n reason: 'done (permanent)',\n });\n });\n });\n });\n\n it('signals closure if no close frame is received within the specified window, and uses default options as 1000 if the code is not 3050', () => {\n const transientSocket = new Socket();\n const openPromise = transientSocket.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return openPromise.then(() => {\n const spy = sinon.spy();\n\n transientSocket.on('close', spy);\n mockWebSocket.close = () =>\n new Promise(() => {\n /* eslint no-inline-comments: [0] */\n });\n mockWebSocket.removeAllListeners('close');\n\n const closePromise = transientSocket.close({code: 1000, reason: 'test'});\n\n jest.advanceTimersByTime(mockoptions.forceCloseDelay);\n\n return closePromise.then(() => {\n assert.called(spy);\n assert.calledWith(spy, {\n code: 1000,\n reason: 'test',\n });\n });\n });\n });\n\n it('signals closure if no close frame is received within the specified window, and uses default options as 1000 if the code is not 3050', () => {\n const transientSocket = new Socket();\n const openPromise = transientSocket.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return openPromise.then(() => {\n const spy = sinon.spy();\n\n transientSocket.on('close', spy);\n mockWebSocket.close = () =>\n new Promise(() => {\n /* eslint no-inline-comments: [0] */\n });\n mockWebSocket.removeAllListeners('close');\n\n const closePromise = transientSocket.close({code: 1000});\n\n jest.advanceTimersByTime(mockoptions.forceCloseDelay);\n\n return closePromise.then(() => {\n assert.called(spy);\n assert.calledWith(spy, {\n code: 1000,\n reason: 'Done (unknown)',\n });\n });\n });\n });\n\n [\n {\n description: 'manually triggers close handler when socket is still connecting',\n closeOptions: {code: 3001, reason: 'Custom close while connecting'},\n expectedCode: 3001,\n expectedReason: 'Custom close while connecting',\n },\n {\n description:\n 'manually triggers close handler with default code when socket is connecting',\n closeOptions: undefined,\n expectedCode: 1000,\n expectedReason: 'Done',\n },\n ].forEach(({description, closeOptions, expectedCode, expectedReason}) => {\n it(description, async () => {\n const s = new Socket();\n let socketInstance;\n\n // Save the current stub and replace it\n const previousStub = Socket.getWebSocketConstructor;\n Socket.getWebSocketConstructor = sinon.stub().callsFake(\n () =>\n function (...args) {\n socketInstance = new MockWebSocket(...args);\n\n return socketInstance;\n }\n );\n\n // open the socket\n s.open('ws://example.com', mockoptions);\n\n // Keep socket in CONNECTING state (readyState 0)\n socketInstance.readyState = 0;\n\n const closeSpy = sinon.spy();\n s.on('close', closeSpy);\n\n // Call close and await the result\n const result = await s.close(closeOptions);\n\n // Verify the promise resolved with the correct close event\n assert.equal(result.code, expectedCode);\n assert.equal(result.reason, expectedReason);\n\n // Verify close handler was called with expected code/reason\n assert.calledOnce(closeSpy);\n assert.calledWith(closeSpy, {\n code: expectedCode,\n reason: expectedReason,\n });\n\n // Verify the underlying socket.close was called with the correct params\n assert.calledOnce(socketInstance.close);\n assert.calledWith(socketInstance.close, expectedCode, expectedReason);\n\n // Restore the previous stub\n Socket.getWebSocketConstructor = previousStub;\n });\n });\n });\n\n describe('#send()', () => {\n describe('when the socket is not in the OPEN state', () => {\n it('fails', () => {\n mockWebSocket.readyState = 0;\n\n return assert\n .isRejected(socket.send('test0'), /INVALID_STATE_ERROR/)\n .then(() => {\n mockWebSocket.readyState = 2;\n\n return assert.isRejected(socket.send('test2'), /INVALID_STATE_ERROR/);\n })\n .then(() => {\n mockWebSocket.readyState = 3;\n\n return assert.isRejected(socket.send('test3'), /INVALID_STATE_ERROR/);\n })\n .then(() => {\n mockWebSocket.readyState = 1;\n\n return socket.send('test1');\n });\n });\n });\n\n it('sends strings', () => {\n socket.send('this is a string');\n assert.calledWith(mockWebSocket.send, 'this is a string');\n });\n\n it('sends JSON.stringifyable object', () => {\n socket.send({\n json: true,\n });\n assert.calledWith(mockWebSocket.send, '{\"json\":true}');\n });\n });\n\n describe('#onclose()', () => {\n describe('when it receives close code 1005', () => {\n forEach(\n {\n Replaced: 4000,\n 'Authentication Failed': 1008,\n 'Authentication did not happen within the timeout window of 30000 seconds.': 1008,\n },\n (code, reason) => {\n it(`emits code ${code} for reason ${reason}`, () => {\n const spy = sinon.spy();\n\n socket.on('close', spy);\n\n mockWebSocket.emit('close', {\n code: 1005,\n reason,\n });\n assert.called(spy);\n assert.calledWith(spy, {\n code,\n reason,\n });\n });\n }\n );\n });\n\n describe('when it receives close code 3050', () => {\n it('emits code 3050 for code 3050', () => {\n const code = 3050;\n const reason = 'done (permanent)';\n const spy = sinon.spy();\n\n socket.on('close', spy);\n\n mockWebSocket.emit('close', {\n code,\n reason,\n });\n assert.called(spy);\n assert.calledWith(spy, {\n code,\n reason,\n });\n });\n });\n });\n\n describe('#onmessage()', () => {\n let spy;\n\n beforeEach(() => {\n spy = sinon.spy();\n socket.on('message', spy);\n });\n\n it('emits messages from the underlying socket', () => {\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n id: 'mockid',\n }),\n });\n\n assert.called(spy);\n });\n\n it('parses received messages', () => {\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n id: 'mockid',\n type: 'test',\n }),\n });\n\n assert.calledWith(spy, {\n data: {\n id: 'mockid',\n type: 'test',\n },\n });\n });\n\n it('preserves top-level type and eventId for async_event envelopes', () => {\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'async_event',\n trackingId: 'SRV_bb000000-0000-0000-0000-000000000006',\n eventId: 'f6a7b8c9-d0e1-2345-fabc-456789012345',\n data: {\n eventType: 'mobius.callinfo',\n callId: 'fcf86aa5-5539-4c9f-8b72-667786ae9b6c',\n deviceId: '334f3d50-1d26-4712-93f1-4972390cc565',\n },\n }),\n });\n\n assert.calledWith(spy, {\n data: {\n type: 'async_event',\n trackingId: 'SRV_bb000000-0000-0000-0000-000000000006',\n eventId: 'f6a7b8c9-d0e1-2345-fabc-456789012345',\n data: {\n eventType: 'mobius.callinfo',\n callId: 'fcf86aa5-5539-4c9f-8b72-667786ae9b6c',\n deviceId: '334f3d50-1d26-4712-93f1-4972390cc565',\n },\n },\n });\n });\n\n it('acknowledges async_event messages only', () => {\n sinon.spy(socket, 'acknowledge');\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'async_event',\n eventId: 'event-123',\n trackingId: 'tracking-123',\n }),\n });\n assert.called(socket.acknowledge);\n });\n\n it('does not acknowledge non-async_event messages', () => {\n sinon.spy(socket, 'acknowledge');\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'regular',\n id: 'mockid',\n }),\n });\n assert.notCalled(socket.acknowledge);\n });\n });\n\n describe('#acknowledge', () => {\n it('requires an event', () => assert.isRejected(socket.acknowledge(), /`event` is required/));\n\n it('acknowledges async events using event_ack and eventId', () =>\n socket\n .acknowledge({\n data: {\n eventId: 'event-123',\n trackingId: 'tracking-123',\n },\n })\n .then(() => {\n assert.calledWith(\n mockWebSocket.send,\n JSON.stringify({\n type: MESSAGE_TYPES.EVENT_ACK,\n trackingId: 'tracking-123',\n eventId: 'event-123',\n })\n );\n }));\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.flaky = flaky;
|
|
8
|
+
exports.skipInBrowser = skipInBrowser;
|
|
9
|
+
/*!
|
|
10
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
function flaky(mochaMethod, envVar) {
|
|
14
|
+
if (!mochaMethod.skip) {
|
|
15
|
+
return mochaMethod;
|
|
16
|
+
}
|
|
17
|
+
var shouldSkip = envVar && envVar !== 'false' && !!envVar;
|
|
18
|
+
return shouldSkip ? mochaMethod.skip : mochaMethod;
|
|
19
|
+
}
|
|
20
|
+
function skipInBrowser(mochaMethod) {
|
|
21
|
+
return mochaMethod;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=mocha-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["flaky","mochaMethod","envVar","skip","shouldSkip","skipInBrowser"],"sources":["mocha-helpers.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\ntype MochaMethod = ((...args: any[]) => any) & {\n skip?: (...args: any[]) => any;\n};\n\nexport function flaky(mochaMethod: MochaMethod, envVar?: string) {\n if (!mochaMethod.skip) {\n return mochaMethod;\n }\n\n const shouldSkip = envVar && envVar !== 'false' && !!envVar;\n\n return shouldSkip ? mochaMethod.skip : mochaMethod;\n}\n\nexport function skipInBrowser(mochaMethod: MochaMethod) {\n return mochaMethod;\n}\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;;AAMO,SAASA,KAAKA,CAACC,WAAwB,EAAEC,MAAe,EAAE;EAC/D,IAAI,CAACD,WAAW,CAACE,IAAI,EAAE;IACrB,OAAOF,WAAW;EACpB;EAEA,IAAMG,UAAU,GAAGF,MAAM,IAAIA,MAAM,KAAK,OAAO,IAAI,CAAC,CAACA,MAAM;EAE3D,OAAOE,UAAU,GAAGH,WAAW,CAACE,IAAI,GAAGF,WAAW;AACpD;AAEO,SAASI,aAAaA,CAACJ,WAAwB,EAAE;EACtD,OAAOA,WAAW;AACpB","ignoreList":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = promiseTick;
|
|
9
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
10
|
+
/*!
|
|
11
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Uses Promise#then to run some number of ticks
|
|
16
|
+
* @param count
|
|
17
|
+
*/
|
|
18
|
+
function promiseTick(count) {
|
|
19
|
+
var promise = _promise.default.resolve(undefined);
|
|
20
|
+
while (count > 1) {
|
|
21
|
+
promise = promise.then(function () {
|
|
22
|
+
return promiseTick(1);
|
|
23
|
+
});
|
|
24
|
+
count -= 1;
|
|
25
|
+
}
|
|
26
|
+
return promise;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=promise-tick.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["promiseTick","count","promise","_promise","default","resolve","undefined","then"],"sources":["promise-tick.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * Uses Promise#then to run some number of ticks\n * @param count\n */\nexport default function promiseTick(count: number): Promise<void> {\n let promise = Promise.resolve<void>(undefined);\n\n while (count > 1) {\n promise = promise.then(() => promiseTick(1));\n count -= 1;\n }\n\n return promise;\n}\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACe,SAASA,WAAWA,CAACC,KAAa,EAAiB;EAChE,IAAIC,OAAO,GAAGC,QAAA,CAAAC,OAAA,CAAQC,OAAO,CAAOC,SAAS,CAAC;EAE9C,OAAOL,KAAK,GAAG,CAAC,EAAE;IAChBC,OAAO,GAAGA,OAAO,CAACK,IAAI,CAAC;MAAA,OAAMP,WAAW,CAAC,CAAC,CAAC;IAAA,EAAC;IAC5CC,KAAK,IAAI,CAAC;EACZ;EAEA,OAAOC,OAAO;AAChB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type {SocketCloseEvent, SocketResponse} from './socket/types';\n\n/**\n * Options for closing a Mobius socket connection.\n */\nexport type MobiusSocketCloseOptions = {\n /** WebSocket close code */\n code?: number;\n /** Human-readable close reason */\n reason?: string;\n};\n\n/**\n * Payload for a Mobius websocket request.\n */\nexport type MobiusSocketRequestPayload = SocketResponse & {\n /** Unique tracking ID for correlating request/response */\n trackingId: string;\n /** Request type identifier */\n type: string;\n};\n\n/**\n * Options for configuring a Mobius websocket request.\n */\nexport type MobiusSocketRequestOptions = {\n /** Request timeout in milliseconds */\n timeout?: number;\n};\n\n/**\n * Error type for Mobius websocket response failures.\n */\nexport type MobiusSocketResponseError = Error & {\n /** Error name identifier */\n name: 'MobiusSocketResponseError';\n /** Original socket response that triggered the error */\n response?: SocketResponse;\n /** HTTP-style status code */\n statusCode?: number;\n /** Human-readable status message */\n statusMessage?: string;\n /** Tracking ID of the failed request */\n trackingId?: string;\n};\n\n/**\n * Result type for Mobius socket disconnect operations.\n */\nexport type MobiusSocketDisconnectResult = Promise<void | SocketCloseEvent>;\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
import * as Media from '@webex/internal-media-core';
|
|
2
2
|
import { Mutex } from 'async-mutex';
|
|
3
3
|
import { METHOD_START_MESSAGE } from '../common/constants';
|
|
4
|
-
import { filterMobiusUris, handleCallingClientErrors, uploadLogs, validateServiceData, } from '../common/Utils';
|
|
4
|
+
import { filterMobiusUris, handleCallingClientErrors, normalizeMobiusUris, isValidServiceDomain, uploadLogs, validateServiceData, } from '../common/Utils';
|
|
5
5
|
import { LOGGER } from '../Logger/types';
|
|
6
6
|
import SDKConnector from '../SDKConnector';
|
|
7
7
|
import { Eventing } from '../Events/impl';
|
|
8
8
|
import { MOBIUS_EVENT_KEYS, SessionType, CALLING_CLIENT_EVENT_KEYS, } from '../Events/types';
|
|
9
9
|
import { ServiceIndicator, ALLOWED_SERVICES, HTTP_METHODS, RegistrationStatus, } from '../common/types';
|
|
10
|
+
import { MobiusEventType } from './calling/types';
|
|
10
11
|
import log from '../Logger';
|
|
11
12
|
import { getCallManager } from './calling/callManager';
|
|
12
|
-
import { CALLING_CLIENT_FILE, CALLS_CLEARED_HANDLER_UTIL, CALLING_USER_AGENT, CISCO_DEVICE_URL, DISCOVERY_URL, GET_MOBIUS_SERVERS_UTIL, SPARK_USER_AGENT, URL_ENDPOINT, API_V1, METHODS, NETWORK_FLAP_TIMEOUT, DEVICES_ENDPOINT_RESOURCE, } from './constants';
|
|
13
|
+
import { CALLING_CLIENT_FILE, CALLS_CLEARED_HANDLER_UTIL, CALLING_USER_AGENT, CISCO_DEVICE_URL, DISCOVERY_URL, GET_MOBIUS_SERVERS_UTIL, SPARK_USER_AGENT, URL_ENDPOINT, API_V1, METHODS, NETWORK_FLAP_TIMEOUT, DEVICES_ENDPOINT_RESOURCE, WCC_CALLING_RTMS_DOMAIN, } from './constants';
|
|
13
14
|
import Line from './line';
|
|
14
|
-
import { METRIC_EVENT, REG_ACTION, METRIC_TYPE, CONNECTION_ACTION, MOBIUS_SERVER_ACTION, } from '../Metrics/types';
|
|
15
|
+
import { METRIC_EVENT, REG_ACTION, METRIC_TYPE, CONNECTION_ACTION, MOBIUS_SERVER_ACTION, MOBIUS_SOCKET_ACTION, } from '../Metrics/types';
|
|
15
16
|
import { getMetricManager } from '../Metrics';
|
|
16
17
|
import windowsChromiumIceWarmup from './windowsChromiumIceWarmupUtils';
|
|
18
|
+
import { APIRequest } from './utils/request';
|
|
17
19
|
export class CallingClient extends Eventing {
|
|
18
20
|
sdkConnector;
|
|
19
21
|
webex;
|
|
@@ -21,12 +23,16 @@ export class CallingClient extends Eventing {
|
|
|
21
23
|
callManager;
|
|
22
24
|
metricManager;
|
|
23
25
|
sdkConfig;
|
|
26
|
+
serviceData;
|
|
24
27
|
primaryMobiusUris;
|
|
25
28
|
backupMobiusUris;
|
|
29
|
+
primaryWssMobiusUris;
|
|
30
|
+
backupWssMobiusUris;
|
|
26
31
|
mobiusClusters;
|
|
27
32
|
mobiusHost;
|
|
28
33
|
mediaEngine;
|
|
29
34
|
lineDict = {};
|
|
35
|
+
apiRequest;
|
|
30
36
|
isNetworkDown = false;
|
|
31
37
|
networkDownTimestamp = '';
|
|
32
38
|
networkUpTimestamp = '';
|
|
@@ -45,14 +51,14 @@ export class CallingClient extends Eventing {
|
|
|
45
51
|
this.mutex = new Mutex();
|
|
46
52
|
this.webex = this.sdkConnector.getWebex();
|
|
47
53
|
this.sdkConfig = config;
|
|
48
|
-
|
|
54
|
+
this.serviceData = this.sdkConfig?.serviceData?.indicator
|
|
49
55
|
? this.sdkConfig.serviceData
|
|
50
56
|
: { indicator: ServiceIndicator.CALLING, domain: '' };
|
|
51
57
|
const logLevel = this.sdkConfig?.logger?.level ? this.sdkConfig.logger.level : LOGGER.ERROR;
|
|
52
58
|
log.setLogger(logLevel, CALLING_CLIENT_FILE);
|
|
53
|
-
validateServiceData(serviceData);
|
|
54
|
-
this.callManager = getCallManager(this.webex, serviceData.indicator);
|
|
55
|
-
this.metricManager = getMetricManager(this.webex, serviceData.indicator);
|
|
59
|
+
validateServiceData(this.serviceData);
|
|
60
|
+
this.callManager = getCallManager(this.webex, this.serviceData.indicator);
|
|
61
|
+
this.metricManager = getMetricManager(this.webex, this.serviceData.indicator);
|
|
56
62
|
this.mediaEngine = Media;
|
|
57
63
|
const adaptedLogger = {
|
|
58
64
|
log: (...args) => webex.logger.log(args.join(' : ')),
|
|
@@ -65,12 +71,20 @@ export class CallingClient extends Eventing {
|
|
|
65
71
|
this.mediaEngine.setLogger(adaptedLogger);
|
|
66
72
|
this.primaryMobiusUris = [];
|
|
67
73
|
this.backupMobiusUris = [];
|
|
74
|
+
this.primaryWssMobiusUris = [];
|
|
75
|
+
this.backupWssMobiusUris = [];
|
|
68
76
|
this.mobiusClusters = this.webex.internal.services.getMobiusClusters();
|
|
69
77
|
this.mobiusHost = '';
|
|
78
|
+
this.apiRequest = APIRequest.getInstance({ webex: this.webex });
|
|
70
79
|
this.registerSessionsListener();
|
|
71
80
|
this.registerCallsClearedListener();
|
|
72
81
|
}
|
|
73
82
|
async init() {
|
|
83
|
+
const loggerContext = {
|
|
84
|
+
file: CALLING_CLIENT_FILE,
|
|
85
|
+
method: METHODS.INIT,
|
|
86
|
+
};
|
|
87
|
+
log.info(METHOD_START_MESSAGE, loggerContext);
|
|
74
88
|
if (typeof window !== 'undefined' && window?.navigator?.userAgent) {
|
|
75
89
|
const ua = window.navigator.userAgent;
|
|
76
90
|
if (ua.toLowerCase().includes('windows')) {
|
|
@@ -97,8 +111,46 @@ export class CallingClient extends Eventing {
|
|
|
97
111
|
}
|
|
98
112
|
}
|
|
99
113
|
await this.getMobiusServers();
|
|
114
|
+
if (this.apiRequest.isSocketEnabled()) {
|
|
115
|
+
await this.connectToMobiusSocket();
|
|
116
|
+
this.apiRequest.registerMobiusSocketListener(this.handleMobiusAsyncEvent);
|
|
117
|
+
}
|
|
118
|
+
if (this.serviceData.indicator === ServiceIndicator.CONTACT_CENTER &&
|
|
119
|
+
!this.serviceData.domain) {
|
|
120
|
+
const rtmsDomain = this.getRTMSDomain();
|
|
121
|
+
this.serviceData.domain = rtmsDomain;
|
|
122
|
+
if (this.sdkConfig?.serviceData) {
|
|
123
|
+
this.sdkConfig.serviceData.domain = this.serviceData.domain;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (!isValidServiceDomain(this.serviceData)) {
|
|
127
|
+
throw new Error('Invalid service domain.');
|
|
128
|
+
}
|
|
100
129
|
await this.createLine();
|
|
101
130
|
this.setupNetworkEventListeners();
|
|
131
|
+
log.log('CallingClient initialization complete', loggerContext);
|
|
132
|
+
}
|
|
133
|
+
getRTMSDomain() {
|
|
134
|
+
log.info('Fetching RTMS domain from service catalog', {
|
|
135
|
+
file: CALLING_CLIENT_FILE,
|
|
136
|
+
method: METHODS.GET_RTMS_DOMAIN,
|
|
137
|
+
});
|
|
138
|
+
try {
|
|
139
|
+
const rtmsURL = this.webex.internal.services.get(WCC_CALLING_RTMS_DOMAIN);
|
|
140
|
+
const url = new URL(rtmsURL);
|
|
141
|
+
log.info(`RTMS domain resolved from catalog: ${url.hostname}`, {
|
|
142
|
+
file: CALLING_CLIENT_FILE,
|
|
143
|
+
method: METHODS.GET_RTMS_DOMAIN,
|
|
144
|
+
});
|
|
145
|
+
return url.hostname;
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
log.warn(`Failed to fetch RTMS domain from service catalog: ${error}`, {
|
|
149
|
+
file: CALLING_CLIENT_FILE,
|
|
150
|
+
method: METHODS.GET_RTMS_DOMAIN,
|
|
151
|
+
});
|
|
152
|
+
return '';
|
|
153
|
+
}
|
|
102
154
|
}
|
|
103
155
|
async checkNetworkReachability() {
|
|
104
156
|
try {
|
|
@@ -311,6 +363,8 @@ export class CallingClient extends Eventing {
|
|
|
311
363
|
const mobiusUris = filterMobiusUris(mobiusServers, this.mobiusHost);
|
|
312
364
|
this.primaryMobiusUris = mobiusUris.primary;
|
|
313
365
|
this.backupMobiusUris = mobiusUris.backup;
|
|
366
|
+
this.primaryWssMobiusUris = mobiusUris.primaryWss;
|
|
367
|
+
this.backupWssMobiusUris = mobiusUris.backupWss;
|
|
314
368
|
log.log(`Final list of Mobius Servers, primary: ${mobiusUris.primary} and backup: ${mobiusUris.backup}`, {
|
|
315
369
|
file: CALLING_CLIENT_FILE,
|
|
316
370
|
method: GET_MOBIUS_SERVERS_UTIL,
|
|
@@ -346,6 +400,79 @@ export class CallingClient extends Eventing {
|
|
|
346
400
|
this.primaryMobiusUris = [`${this.mobiusHost}${URL_ENDPOINT}`];
|
|
347
401
|
}
|
|
348
402
|
}
|
|
403
|
+
async connectToMobiusSocket() {
|
|
404
|
+
const loggerContext = {
|
|
405
|
+
file: CALLING_CLIENT_FILE,
|
|
406
|
+
method: METHODS.CONNECT_TO_MOBIUS_SOCKET,
|
|
407
|
+
};
|
|
408
|
+
log.info(METHOD_START_MESSAGE, loggerContext);
|
|
409
|
+
if (!this.primaryWssMobiusUris.length && !this.backupWssMobiusUris.length) {
|
|
410
|
+
log.warn('No WSS URIs available from Mobius discovery, skipping socket connection', loggerContext);
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
if (this.primaryWssMobiusUris.length) {
|
|
414
|
+
log.log(`Attempting Mobius socket connection using primary WSS URIs (${this.primaryWssMobiusUris.length} available)`, loggerContext);
|
|
415
|
+
for (const wssUri of this.primaryWssMobiusUris) {
|
|
416
|
+
try {
|
|
417
|
+
log.log(`Trying primary WSS URI: ${wssUri}`, loggerContext);
|
|
418
|
+
await this.apiRequest.connectToMobiusSocket(wssUri);
|
|
419
|
+
log.log(`Successfully connected to Mobius socket on primary WSS URI: ${wssUri}`, loggerContext);
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
catch (err) {
|
|
423
|
+
log.warn(`Primary WSS URI connection failed for ${wssUri}: ${err}`, loggerContext);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
log.warn('All primary WSS URI connection attempts failed', loggerContext);
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
log.warn('No primary WSS URIs available, skipping to backup', loggerContext);
|
|
430
|
+
}
|
|
431
|
+
if (this.backupWssMobiusUris.length) {
|
|
432
|
+
log.log(`Attempting Mobius socket connection using backup WSS URIs (${this.backupWssMobiusUris.length} available)`, loggerContext);
|
|
433
|
+
for (const wssUri of this.backupWssMobiusUris) {
|
|
434
|
+
try {
|
|
435
|
+
log.log(`Trying backup WSS URI: ${wssUri}`, loggerContext);
|
|
436
|
+
await this.apiRequest.connectToMobiusSocket(wssUri);
|
|
437
|
+
log.log(`Successfully connected to Mobius socket on backup WSS URI: ${wssUri}`, loggerContext);
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
catch (err) {
|
|
441
|
+
log.warn(`Backup WSS URI connection failed for ${wssUri}: ${err}`, loggerContext);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
log.warn('All backup WSS URI connection attempts failed', loggerContext);
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
log.warn('No backup WSS URIs available', loggerContext);
|
|
448
|
+
}
|
|
449
|
+
log.warn('All Mobius socket connection attempts exhausted for both primary and backup, continuing without socket', loggerContext);
|
|
450
|
+
}
|
|
451
|
+
handleMobiusAsyncEvent = async (event) => {
|
|
452
|
+
const loggerContext = {
|
|
453
|
+
file: CALLING_CLIENT_FILE,
|
|
454
|
+
method: METHODS.HANDLE_MOBIUS_ASYNC_EVENT,
|
|
455
|
+
};
|
|
456
|
+
const eventType = event?.data.eventType;
|
|
457
|
+
log.trace(`Mobius async event received - eventType: ${eventType ?? 'undefined'}`, loggerContext);
|
|
458
|
+
if (!eventType) {
|
|
459
|
+
log.warn('Dropping unsupported mobius socket payload', loggerContext);
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
462
|
+
if (eventType === MobiusEventType.REGISTRATION_DOWN) {
|
|
463
|
+
log.warn(`Received ${eventType} event from Mobius.`, loggerContext);
|
|
464
|
+
const line = Object.values(this.lineDict)[0];
|
|
465
|
+
if (!line) {
|
|
466
|
+
log.warn('No line found, skipping registration down event', loggerContext);
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
await line.registration.handleRegistrationDownEvent(event);
|
|
470
|
+
this.metricManager.submitMobiusSocketMetric(METRIC_EVENT.MOBIUS_SOCKET_ERROR, MOBIUS_SOCKET_ACTION.REGISTRATION_DOWN, METRIC_TYPE.BEHAVIORAL, undefined, event?.trackingId, undefined, eventType);
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
this.callManager.dequeueWsEvents(event);
|
|
474
|
+
log.trace(`Mobius async event dispatched to CallManager - eventType: ${eventType}`, loggerContext);
|
|
475
|
+
};
|
|
349
476
|
registerCallsClearedListener() {
|
|
350
477
|
log.info(METHOD_START_MESSAGE, {
|
|
351
478
|
file: CALLING_CLIENT_FILE,
|
|
@@ -404,7 +531,11 @@ export class CallingClient extends Eventing {
|
|
|
404
531
|
file: CALLING_CLIENT_FILE,
|
|
405
532
|
method: METHODS.CREATE_LINE,
|
|
406
533
|
});
|
|
407
|
-
const line = new Line(this.webex.internal.device.userId, this.webex.internal.device.url, this.mutex, this.
|
|
534
|
+
const line = new Line(this.webex.internal.device.userId, this.webex.internal.device.url, this.mutex, this.apiRequest.isSocketEnabled()
|
|
535
|
+
? normalizeMobiusUris(this.primaryWssMobiusUris)
|
|
536
|
+
: this.primaryMobiusUris, this.apiRequest.isSocketEnabled()
|
|
537
|
+
? normalizeMobiusUris(this.backupWssMobiusUris)
|
|
538
|
+
: this.backupMobiusUris, this.getLoggingLevel(), this.serviceData, this.sdkConfig?.jwe);
|
|
408
539
|
this.lineDict[line.lineId] = line;
|
|
409
540
|
}
|
|
410
541
|
getLines() {
|
|
@@ -425,7 +556,7 @@ export class CallingClient extends Eventing {
|
|
|
425
556
|
const normalizedMobiusUrl = mobiusUrl.replace(/\/+$/, '/');
|
|
426
557
|
const uri = `${normalizedMobiusUrl}${DEVICES_ENDPOINT_RESOURCE}?userid=${encodeURIComponent(userid)}`;
|
|
427
558
|
try {
|
|
428
|
-
const response = await this.webex.request({
|
|
559
|
+
const response = (await this.webex.request({
|
|
429
560
|
uri,
|
|
430
561
|
method: HTTP_METHODS.GET,
|
|
431
562
|
service: ALLOWED_SERVICES.MOBIUS,
|
|
@@ -433,7 +564,7 @@ export class CallingClient extends Eventing {
|
|
|
433
564
|
[CISCO_DEVICE_URL]: this.webex.internal.device.url,
|
|
434
565
|
[SPARK_USER_AGENT]: CALLING_USER_AGENT,
|
|
435
566
|
},
|
|
436
|
-
});
|
|
567
|
+
}));
|
|
437
568
|
if (response.statusCode !== 200) {
|
|
438
569
|
throw new Error(`API call failed with ${response.statusCode}`);
|
|
439
570
|
}
|
|
@@ -17,6 +17,7 @@ import { createCallerId } from './CallerId';
|
|
|
17
17
|
import { METRIC_TYPE, METRIC_EVENT, TRANSFER_ACTION } from '../../Metrics/types';
|
|
18
18
|
import { getMetricManager } from '../../Metrics';
|
|
19
19
|
import { METHOD_START_MESSAGE, SERVICES_ENDPOINT } from '../../common/constants';
|
|
20
|
+
import { APIRequest } from '../utils/request';
|
|
20
21
|
export class Call extends Eventing {
|
|
21
22
|
sdkConnector;
|
|
22
23
|
webex;
|
|
@@ -48,10 +49,12 @@ export class Call extends Eventing {
|
|
|
48
49
|
broadworksCorrelationInfo;
|
|
49
50
|
serviceIndicator;
|
|
50
51
|
mediaNegotiationCompleted;
|
|
52
|
+
connectPending;
|
|
51
53
|
receivedRoapOKSeq;
|
|
52
54
|
localAudioStream;
|
|
53
55
|
rtcMetrics;
|
|
54
56
|
callKeepaliveRetryCount = 0;
|
|
57
|
+
apiRequest;
|
|
55
58
|
isMuted() {
|
|
56
59
|
return this.muted;
|
|
57
60
|
}
|
|
@@ -86,6 +89,7 @@ export class Call extends Eventing {
|
|
|
86
89
|
this.mobiusUrl = activeUrl;
|
|
87
90
|
this.receivedRoapOKSeq = 0;
|
|
88
91
|
this.mediaNegotiationCompleted = false;
|
|
92
|
+
this.connectPending = false;
|
|
89
93
|
log.info(`Webex Calling Url:- ${this.mobiusUrl}`, {
|
|
90
94
|
file: CALL_FILE,
|
|
91
95
|
method: METHODS.CONSTRUCTOR,
|
|
@@ -102,6 +106,7 @@ export class Call extends Eventing {
|
|
|
102
106
|
this.remoteRoapMessage = null;
|
|
103
107
|
this.disconnectReason = { code: DisconnectCode.NORMAL, cause: DisconnectCause.NORMAL };
|
|
104
108
|
this.rtcMetrics = new RtcMetrics(this.webex, { callId: this.callId }, this.correlationId);
|
|
109
|
+
this.apiRequest = APIRequest.getInstance({ webex: this.webex });
|
|
105
110
|
const callMachine = createMachine({
|
|
106
111
|
schema: {
|
|
107
112
|
context: {},
|
|
@@ -281,6 +286,11 @@ export class Call extends Eventing {
|
|
|
281
286
|
},
|
|
282
287
|
},
|
|
283
288
|
on: {
|
|
289
|
+
E_SEND_CALL_CONNECT: {
|
|
290
|
+
cond: () => this.connectPending,
|
|
291
|
+
target: 'S_SEND_CALL_CONNECT',
|
|
292
|
+
actions: ['outgoingCallConnect'],
|
|
293
|
+
},
|
|
284
294
|
E_CALL_ESTABLISHED: {
|
|
285
295
|
target: 'S_CALL_ESTABLISHED',
|
|
286
296
|
actions: ['callEstablished'],
|
|
@@ -842,6 +852,7 @@ export class Call extends Eventing {
|
|
|
842
852
|
}
|
|
843
853
|
}
|
|
844
854
|
async handleOutgoingCallConnect(event) {
|
|
855
|
+
this.connectPending = false;
|
|
845
856
|
log.info(`${METHOD_START_MESSAGE} with: ${this.getCorrelationId()}`, {
|
|
846
857
|
file: CALL_FILE,
|
|
847
858
|
method: METHODS.HANDLE_OUTGOING_CALL_CONNECT,
|
|
@@ -851,6 +862,7 @@ export class Call extends Eventing {
|
|
|
851
862
|
file: CALL_FILE,
|
|
852
863
|
method: METHODS.HANDLE_OUTGOING_CALL_CONNECT,
|
|
853
864
|
});
|
|
865
|
+
this.connectPending = true;
|
|
854
866
|
return;
|
|
855
867
|
}
|
|
856
868
|
try {
|
|
@@ -1485,7 +1497,7 @@ export class Call extends Eventing {
|
|
|
1485
1497
|
mediaId: uuid(),
|
|
1486
1498
|
},
|
|
1487
1499
|
};
|
|
1488
|
-
return this.
|
|
1500
|
+
return this.apiRequest.makeRequest({
|
|
1489
1501
|
uri: `${this.mobiusUrl}${DEVICES_ENDPOINT_RESOURCE}/${this.deviceId}/${CALL_ENDPOINT_RESOURCE}`,
|
|
1490
1502
|
method: HTTP_METHODS.POST,
|
|
1491
1503
|
service: ALLOWED_SERVICES.MOBIUS,
|
|
@@ -1509,7 +1521,7 @@ export class Call extends Eventing {
|
|
|
1509
1521
|
file: CALL_FILE,
|
|
1510
1522
|
method: 'patch',
|
|
1511
1523
|
});
|
|
1512
|
-
return this.
|
|
1524
|
+
return this.apiRequest.makeRequest({
|
|
1513
1525
|
uri: `${this.mobiusUrl}${DEVICES_ENDPOINT_RESOURCE}/${this.deviceId}/${CALLS_ENDPOINT_RESOURCE}/${this.callId}`,
|
|
1514
1526
|
method: HTTP_METHODS.PATCH,
|
|
1515
1527
|
service: ALLOWED_SERVICES.MOBIUS,
|
|
@@ -1574,10 +1586,10 @@ export class Call extends Eventing {
|
|
|
1574
1586
|
});
|
|
1575
1587
|
}
|
|
1576
1588
|
}
|
|
1577
|
-
return this.
|
|
1589
|
+
return this.apiRequest.makeRequest(request);
|
|
1578
1590
|
}
|
|
1579
1591
|
async postStatus() {
|
|
1580
|
-
return this.
|
|
1592
|
+
return this.apiRequest.makeRequest({
|
|
1581
1593
|
uri: `${this.mobiusUrl}${DEVICES_ENDPOINT_RESOURCE}/${this.deviceId}/${CALLS_ENDPOINT_RESOURCE}/${this.callId}/${CALL_STATUS_RESOURCE}`,
|
|
1582
1594
|
method: HTTP_METHODS.POST,
|
|
1583
1595
|
service: ALLOWED_SERVICES.MOBIUS,
|
|
@@ -1688,7 +1700,7 @@ export class Call extends Eventing {
|
|
|
1688
1700
|
file: CALL_FILE,
|
|
1689
1701
|
method: METHODS.POST_MEDIA,
|
|
1690
1702
|
});
|
|
1691
|
-
return this.
|
|
1703
|
+
return this.apiRequest.makeRequest({
|
|
1692
1704
|
uri: `${this.mobiusUrl}${DEVICES_ENDPOINT_RESOURCE}/${this.deviceId}/${CALLS_ENDPOINT_RESOURCE}/${this.callId}/${MEDIA_ENDPOINT_RESOURCE}`,
|
|
1693
1705
|
method: HTTP_METHODS.POST,
|
|
1694
1706
|
service: ALLOWED_SERVICES.MOBIUS,
|
|
@@ -1745,6 +1757,9 @@ export class Call extends Eventing {
|
|
|
1745
1757
|
case RoapScenario.ANSWER:
|
|
1746
1758
|
event.roapMessage.sdp = modifySdpForIPv4(event.roapMessage.sdp);
|
|
1747
1759
|
this.localRoapMessage = event.roapMessage;
|
|
1760
|
+
if (this.connectPending) {
|
|
1761
|
+
this.sendCallStateMachineEvt({ type: 'E_SEND_CALL_CONNECT' });
|
|
1762
|
+
}
|
|
1748
1763
|
this.sendMediaStateMachineEvt({ type: 'E_SEND_ROAP_ANSWER', data: event.roapMessage });
|
|
1749
1764
|
break;
|
|
1750
1765
|
case RoapScenario.ERROR:
|
|
@@ -1753,6 +1768,9 @@ export class Call extends Eventing {
|
|
|
1753
1768
|
case RoapScenario.OFFER_RESPONSE:
|
|
1754
1769
|
event.roapMessage.sdp = modifySdpForIPv4(event.roapMessage.sdp);
|
|
1755
1770
|
this.localRoapMessage = event.roapMessage;
|
|
1771
|
+
if (this.connectPending) {
|
|
1772
|
+
this.sendCallStateMachineEvt({ type: 'E_SEND_CALL_CONNECT' });
|
|
1773
|
+
}
|
|
1756
1774
|
this.sendMediaStateMachineEvt({ type: 'E_SEND_ROAP_OFFER', data: event.roapMessage });
|
|
1757
1775
|
break;
|
|
1758
1776
|
default:
|
|
@@ -1809,7 +1827,7 @@ export class Call extends Eventing {
|
|
|
1809
1827
|
}
|
|
1810
1828
|
async delete() {
|
|
1811
1829
|
const disconnectMetrics = await this.getCallStats();
|
|
1812
|
-
return this.
|
|
1830
|
+
return this.apiRequest.makeRequest({
|
|
1813
1831
|
uri: `${this.mobiusUrl}${DEVICES_ENDPOINT_RESOURCE}/${this.deviceId}/${CALLS_ENDPOINT_RESOURCE}/${this.callId}`,
|
|
1814
1832
|
method: HTTP_METHODS.DELETE,
|
|
1815
1833
|
service: ALLOWED_SERVICES.MOBIUS,
|