@webex/calling 3.12.0-next.4 → 3.12.0-next.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/dist/CallingClient/CallingClient.js +463 -205
  2. package/dist/CallingClient/CallingClient.js.map +1 -1
  3. package/dist/CallingClient/CallingClient.test.js +170 -77
  4. package/dist/CallingClient/CallingClient.test.js.map +1 -1
  5. package/dist/CallingClient/calling/call.js +589 -445
  6. package/dist/CallingClient/calling/call.js.map +1 -1
  7. package/dist/CallingClient/calling/call.test.js +695 -445
  8. package/dist/CallingClient/calling/call.test.js.map +1 -1
  9. package/dist/CallingClient/calling/callManager.js +53 -30
  10. package/dist/CallingClient/calling/callManager.js.map +1 -1
  11. package/dist/CallingClient/calling/callManager.test.js +35 -0
  12. package/dist/CallingClient/calling/callManager.test.js.map +1 -1
  13. package/dist/CallingClient/calling/types.js +2 -0
  14. package/dist/CallingClient/calling/types.js.map +1 -1
  15. package/dist/CallingClient/constants.js +25 -3
  16. package/dist/CallingClient/constants.js.map +1 -1
  17. package/dist/CallingClient/line/index.js +4 -1
  18. package/dist/CallingClient/line/index.js.map +1 -1
  19. package/dist/CallingClient/line/line.test.js +16 -1
  20. package/dist/CallingClient/line/line.test.js.map +1 -1
  21. package/dist/CallingClient/registration/register.js +712 -406
  22. package/dist/CallingClient/registration/register.js.map +1 -1
  23. package/dist/CallingClient/registration/register.test.js +202 -21
  24. package/dist/CallingClient/registration/register.test.js.map +1 -1
  25. package/dist/CallingClient/registration/types.js.map +1 -1
  26. package/dist/CallingClient/registration/webWorker.js +41 -104
  27. package/dist/CallingClient/registration/webWorker.js.map +1 -1
  28. package/dist/CallingClient/registration/webWorker.test.js +39 -153
  29. package/dist/CallingClient/registration/webWorker.test.js.map +1 -1
  30. package/dist/CallingClient/registration/webWorkerStr.js +1 -1
  31. package/dist/CallingClient/registration/webWorkerStr.js.map +1 -1
  32. package/dist/CallingClient/utils/constants.js +46 -0
  33. package/dist/CallingClient/utils/constants.js.map +1 -0
  34. package/dist/CallingClient/utils/index.js +63 -0
  35. package/dist/CallingClient/utils/index.js.map +1 -0
  36. package/dist/CallingClient/utils/mobiusSocketMapper.js +122 -0
  37. package/dist/CallingClient/utils/mobiusSocketMapper.js.map +1 -0
  38. package/dist/CallingClient/utils/mobiusSocketMapper.test.js +211 -0
  39. package/dist/CallingClient/utils/mobiusSocketMapper.test.js.map +1 -0
  40. package/dist/CallingClient/utils/request.js +354 -0
  41. package/dist/CallingClient/utils/request.js.map +1 -0
  42. package/dist/CallingClient/utils/request.test.js +881 -0
  43. package/dist/CallingClient/utils/request.test.js.map +1 -0
  44. package/dist/CallingClient/utils/types.js +7 -0
  45. package/dist/CallingClient/utils/types.js.map +1 -0
  46. package/dist/CallingClient/utils/wsFeatureFlag.js +70 -0
  47. package/dist/CallingClient/utils/wsFeatureFlag.js.map +1 -0
  48. package/dist/CallingClient/utils/wsFeatureFlag.test.js +139 -0
  49. package/dist/CallingClient/utils/wsFeatureFlag.test.js.map +1 -0
  50. package/dist/Contacts/ContactsClient.js +13 -11
  51. package/dist/Contacts/ContactsClient.js.map +1 -1
  52. package/dist/Contacts/ContactsClient.test.js +3 -8
  53. package/dist/Contacts/ContactsClient.test.js.map +1 -1
  54. package/dist/Events/types.js +1 -11
  55. package/dist/Events/types.js.map +1 -1
  56. package/dist/Metrics/index.js +63 -2
  57. package/dist/Metrics/index.js.map +1 -1
  58. package/dist/Metrics/index.test.js +357 -1
  59. package/dist/Metrics/index.test.js.map +1 -1
  60. package/dist/Metrics/types.js +19 -1
  61. package/dist/Metrics/types.js.map +1 -1
  62. package/dist/SDKConnector/types.js.map +1 -1
  63. package/dist/common/Utils.js +138 -44
  64. package/dist/common/Utils.js.map +1 -1
  65. package/dist/common/testUtil.js +8 -4
  66. package/dist/common/testUtil.js.map +1 -1
  67. package/dist/common/types.js +2 -0
  68. package/dist/common/types.js.map +1 -1
  69. package/dist/mobius-socket/config.js +24 -0
  70. package/dist/mobius-socket/config.js.map +1 -0
  71. package/dist/mobius-socket/errors.js +143 -0
  72. package/dist/mobius-socket/errors.js.map +1 -0
  73. package/dist/mobius-socket/errors.test.js +20 -0
  74. package/dist/mobius-socket/errors.test.js.map +1 -0
  75. package/dist/mobius-socket/index.js +57 -0
  76. package/dist/mobius-socket/index.js.map +1 -0
  77. package/dist/mobius-socket/mobius-socket-events.test.js +492 -0
  78. package/dist/mobius-socket/mobius-socket-events.test.js.map +1 -0
  79. package/dist/mobius-socket/mobius-socket.js +841 -0
  80. package/dist/mobius-socket/mobius-socket.js.map +1 -0
  81. package/dist/mobius-socket/mobius-socket.test.js +1845 -0
  82. package/dist/mobius-socket/mobius-socket.test.js.map +1 -0
  83. package/dist/mobius-socket/socket/constants.js +55 -0
  84. package/dist/mobius-socket/socket/constants.js.map +1 -0
  85. package/dist/mobius-socket/socket/index.js +15 -0
  86. package/dist/mobius-socket/socket/index.js.map +1 -0
  87. package/dist/mobius-socket/socket/socket-base.js +604 -0
  88. package/dist/mobius-socket/socket/socket-base.js.map +1 -0
  89. package/dist/mobius-socket/socket/socket.js +19 -0
  90. package/dist/mobius-socket/socket/socket.js.map +1 -0
  91. package/dist/mobius-socket/socket/socket.shim.js +26 -0
  92. package/dist/mobius-socket/socket/socket.shim.js.map +1 -0
  93. package/dist/mobius-socket/socket/types.js +7 -0
  94. package/dist/mobius-socket/socket/types.js.map +1 -0
  95. package/dist/mobius-socket/socket.test.js +727 -0
  96. package/dist/mobius-socket/socket.test.js.map +1 -0
  97. package/dist/mobius-socket/test/mocha-helpers.js +23 -0
  98. package/dist/mobius-socket/test/mocha-helpers.js.map +1 -0
  99. package/dist/mobius-socket/test/promise-tick.js +28 -0
  100. package/dist/mobius-socket/test/promise-tick.js.map +1 -0
  101. package/dist/mobius-socket/types.js +7 -0
  102. package/dist/mobius-socket/types.js.map +1 -0
  103. package/dist/module/CallingClient/CallingClient.js +141 -10
  104. package/dist/module/CallingClient/calling/call.js +177 -61
  105. package/dist/module/CallingClient/calling/callManager.js +27 -7
  106. package/dist/module/CallingClient/calling/types.js +2 -0
  107. package/dist/module/CallingClient/constants.js +21 -0
  108. package/dist/module/CallingClient/line/index.js +2 -2
  109. package/dist/module/CallingClient/registration/register.js +234 -62
  110. package/dist/module/CallingClient/registration/webWorker.js +42 -61
  111. package/dist/module/CallingClient/registration/webWorkerStr.js +47 -82
  112. package/dist/module/CallingClient/utils/constants.js +30 -0
  113. package/dist/module/CallingClient/utils/index.js +5 -0
  114. package/dist/module/CallingClient/utils/mobiusSocketMapper.js +72 -0
  115. package/dist/module/CallingClient/utils/request.js +165 -0
  116. package/dist/module/CallingClient/utils/types.js +1 -0
  117. package/dist/module/CallingClient/utils/wsFeatureFlag.js +41 -0
  118. package/dist/module/Contacts/ContactsClient.js +1 -1
  119. package/dist/module/Events/types.js +0 -10
  120. package/dist/module/Metrics/index.js +48 -1
  121. package/dist/module/Metrics/types.js +18 -0
  122. package/dist/module/common/Utils.js +52 -12
  123. package/dist/module/common/testUtil.js +5 -1
  124. package/dist/module/common/types.js +2 -0
  125. package/dist/module/mobius-socket/config.js +15 -0
  126. package/dist/module/mobius-socket/errors.js +58 -0
  127. package/dist/module/mobius-socket/index.js +24 -0
  128. package/dist/module/mobius-socket/mobius-socket.js +589 -0
  129. package/dist/module/mobius-socket/socket/constants.js +26 -0
  130. package/dist/module/mobius-socket/socket/index.js +4 -0
  131. package/dist/module/mobius-socket/socket/socket-base.js +368 -0
  132. package/dist/module/mobius-socket/socket/socket.js +9 -0
  133. package/dist/module/mobius-socket/socket/socket.shim.js +12 -0
  134. package/dist/module/mobius-socket/socket/types.js +1 -0
  135. package/dist/module/mobius-socket/types.js +1 -0
  136. package/dist/types/CallingClient/CallingClient.d.ts +7 -0
  137. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  138. package/dist/types/CallingClient/calling/call.d.ts +12 -0
  139. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  140. package/dist/types/CallingClient/calling/callManager.d.ts +3 -2
  141. package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
  142. package/dist/types/CallingClient/calling/types.d.ts +34 -9
  143. package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
  144. package/dist/types/CallingClient/constants.d.ts +21 -0
  145. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  146. package/dist/types/CallingClient/line/index.d.ts +1 -1
  147. package/dist/types/CallingClient/line/index.d.ts.map +1 -1
  148. package/dist/types/CallingClient/registration/register.d.ts +7 -1
  149. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  150. package/dist/types/CallingClient/registration/types.d.ts +4 -2
  151. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  152. package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -1
  153. package/dist/types/CallingClient/registration/webWorkerStr.d.ts +1 -1
  154. package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -1
  155. package/dist/types/CallingClient/utils/constants.d.ts +30 -0
  156. package/dist/types/CallingClient/utils/constants.d.ts.map +1 -0
  157. package/dist/types/CallingClient/utils/index.d.ts +6 -0
  158. package/dist/types/CallingClient/utils/index.d.ts.map +1 -0
  159. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts +5 -0
  160. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts.map +1 -0
  161. package/dist/types/CallingClient/utils/request.d.ts +24 -0
  162. package/dist/types/CallingClient/utils/request.d.ts.map +1 -0
  163. package/dist/types/CallingClient/utils/types.d.ts +29 -0
  164. package/dist/types/CallingClient/utils/types.d.ts.map +1 -0
  165. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts +4 -0
  166. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts.map +1 -0
  167. package/dist/types/Events/types.d.ts +4 -11
  168. package/dist/types/Events/types.d.ts.map +1 -1
  169. package/dist/types/Metrics/index.d.ts.map +1 -1
  170. package/dist/types/Metrics/types.d.ts +19 -2
  171. package/dist/types/Metrics/types.d.ts.map +1 -1
  172. package/dist/types/SDKConnector/types.d.ts +24 -0
  173. package/dist/types/SDKConnector/types.d.ts.map +1 -1
  174. package/dist/types/common/Utils.d.ts +9 -2
  175. package/dist/types/common/Utils.d.ts.map +1 -1
  176. package/dist/types/common/testUtil.d.ts +4 -1
  177. package/dist/types/common/testUtil.d.ts.map +1 -1
  178. package/dist/types/common/types.d.ts +3 -0
  179. package/dist/types/common/types.d.ts.map +1 -1
  180. package/dist/types/mobius-socket/config.d.ts +17 -0
  181. package/dist/types/mobius-socket/config.d.ts.map +1 -0
  182. package/dist/types/mobius-socket/errors.d.ts +32 -0
  183. package/dist/types/mobius-socket/errors.d.ts.map +1 -0
  184. package/dist/types/mobius-socket/index.d.ts +14 -0
  185. package/dist/types/mobius-socket/index.d.ts.map +1 -0
  186. package/dist/types/mobius-socket/mobius-socket.d.ts +48 -0
  187. package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -0
  188. package/dist/types/mobius-socket/socket/constants.d.ts +27 -0
  189. package/dist/types/mobius-socket/socket/constants.d.ts.map +1 -0
  190. package/dist/types/mobius-socket/socket/index.d.ts +5 -0
  191. package/dist/types/mobius-socket/socket/index.d.ts.map +1 -0
  192. package/dist/types/mobius-socket/socket/socket-base.d.ts +43 -0
  193. package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -0
  194. package/dist/types/mobius-socket/socket/socket.d.ts +6 -0
  195. package/dist/types/mobius-socket/socket/socket.d.ts.map +1 -0
  196. package/dist/types/mobius-socket/socket/socket.shim.d.ts +6 -0
  197. package/dist/types/mobius-socket/socket/socket.shim.d.ts.map +1 -0
  198. package/dist/types/mobius-socket/socket/types.d.ts +61 -0
  199. package/dist/types/mobius-socket/socket/types.d.ts.map +1 -0
  200. package/dist/types/mobius-socket/types.d.ts +21 -0
  201. package/dist/types/mobius-socket/types.d.ts.map +1 -0
  202. package/package.json +20 -5
  203. package/src/mobius-socket/socket/socket.shim.ts +22 -0
  204. package/src/mobius-socket/socket/socket.ts +14 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_uuid","require","_testUtil","_types","_Logger","_interopRequireDefault","_request","_mobiusSocket","_Metrics","_types2","_wsFeatureFlag","_constants","jest","mock","getMobiusSocketInstance","fn","getMetricManager","isMobiusWssEnabled","v4","describe","webex","mockMobiusSocket","mockMetricManager","infoSpy","logSpy","warnSpy","errorSpy","beforeEach","APIRequest","resetInstance","getTestUtilsWebex","clearAllMocks","connect","mockResolvedValue","undefined","disconnect","sendWssRequest","statusCode","trackingId","data","deviceId","isConnected","mockReturnValue","getConnectedWebSocketUrl","on","off","submitMobiusSocketMetric","uuid","spyOn","log","afterEach","it","apiRequest","getInstance","expect","toBeDefined","toHaveBeenCalledWith","file","method","toThrow","instance1","instance2","toBe","not","createAPIRequest","toBeInstanceOf","result","isSocketEnabled","_asyncToGenerator2","default","_regenerator","mark","_callee","wrap","_context","prev","next","connectToMobiusSocket","sent","toHaveBeenCalled","stop","_callee2","wssUrl","_context2","_callee3","_context3","METRIC_EVENT","MOBIUS_SOCKET","MOBIUS_SOCKET_ACTION","CONNECT","METRIC_TYPE","BEHAVIORAL","_callee4","connectionError","_context4","statusMessage","response","error","metadata","mockRejectedValue","rejects","toEqual","body","headers","trackingid","stringContaining","MOBIUS_SOCKET_ERROR","any","String","_callee5","minimalError","_context5","_callee6","_context6","disconnectFromMobiusSocket","_callee7","_context7","DISCONNECT","_callee8","options","_context8","code","reason","_callee9","_context9","Error","resolves","_callee0","_context0","_callee1","requestOptions","expectedResponse","_context1","uri","HTTP_METHODS","POST","userId","request","makeRequest","_callee10","_context10","GET","_callee11","_context11","_callee12","_context12","objectContaining","type","MOBIUS_SOCKET_MESSAGE_TYPE","REGISTER","_callee13","_context13","_callee14","_context14","_callee15","_context15","userAgent","authorization","_callee16","_context16","credentials","getUserToken","CALL_HOLD","_callee17","_context17","_callee18","wsResponse","_context18","correlationId","_callee19","wsError","_context19","callback","registerMobiusSocketListener","Function","mockEvent","eventId","eventType","attachedCallback","calls","LISTENER_REGISTERED","unregisterMobiusSocketListener","LISTENER_UNREGISTERED"],"sources":["request.test.ts"],"sourcesContent":["import {v4 as uuid} from 'uuid';\nimport {getTestUtilsWebex} from '../../common/testUtil';\nimport {HTTP_METHODS, WebexRequestPayload} from '../../common/types';\nimport log from '../../Logger';\nimport {APIRequest, createAPIRequest} from './request';\nimport {getMobiusSocketInstance} from '../../mobius-socket';\nimport {getMetricManager} from '../../Metrics';\nimport {METRIC_EVENT, METRIC_TYPE, MOBIUS_SOCKET_ACTION} from '../../Metrics/types';\nimport {isMobiusWssEnabled} from './wsFeatureFlag';\nimport {MOBIUS_SOCKET_MESSAGE_TYPE} from './constants';\nimport {MobiusSocketResponse, MobiusAsyncEvent} from './types';\n\n// Mock dependencies\njest.mock('../../mobius-socket', () => ({\n getMobiusSocketInstance: jest.fn(),\n}));\njest.mock('../../Metrics', () => ({\n getMetricManager: jest.fn(),\n}));\njest.mock('./wsFeatureFlag', () => ({\n isMobiusWssEnabled: jest.fn(),\n}));\njest.mock('uuid', () => ({\n v4: jest.fn(),\n}));\n\ndescribe('APIRequest', () => {\n let webex: ReturnType<typeof getTestUtilsWebex>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let mockMobiusSocket: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let mockMetricManager: any;\n let infoSpy: jest.SpyInstance;\n let logSpy: jest.SpyInstance;\n let warnSpy: jest.SpyInstance;\n let errorSpy: jest.SpyInstance;\n\n beforeEach(() => {\n APIRequest.resetInstance();\n webex = getTestUtilsWebex();\n jest.clearAllMocks();\n\n mockMobiusSocket = {\n connect: jest.fn().mockResolvedValue(undefined),\n disconnect: jest.fn().mockResolvedValue(undefined),\n sendWssRequest: jest.fn().mockResolvedValue({\n statusCode: 200,\n trackingId: 'test-tracking-id',\n data: {deviceId: 'test-device-id'},\n }),\n isConnected: jest.fn().mockReturnValue(false),\n getConnectedWebSocketUrl: jest.fn().mockReturnValue('wss://test.webex.com'),\n on: jest.fn(),\n off: jest.fn(),\n };\n\n mockMetricManager = {\n submitMobiusSocketMetric: jest.fn(),\n };\n\n (getMobiusSocketInstance as jest.Mock).mockReturnValue(mockMobiusSocket);\n (getMetricManager as jest.Mock).mockReturnValue(mockMetricManager);\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n (uuid as jest.Mock).mockReturnValue('mock-uuid-12345');\n\n infoSpy = jest.spyOn(log, 'info');\n logSpy = jest.spyOn(log, 'log');\n warnSpy = jest.spyOn(log, 'warn');\n errorSpy = jest.spyOn(log, 'error');\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n describe('Constructor and singleton pattern', () => {\n it('should create instance with webex config and HTTP transport', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n expect(apiRequest).toBeDefined();\n expect(getMobiusSocketInstance).toHaveBeenCalledWith(webex);\n expect(getMetricManager).toHaveBeenCalledWith(webex);\n expect(isMobiusWssEnabled).toHaveBeenCalledWith(webex);\n expect(infoSpy).toHaveBeenCalledWith('APIRequest initialized with transport: HTTP', {\n file: 'REQUEST',\n method: 'constructor',\n });\n });\n\n it('should create instance with webex config and WSS transport when feature flag enabled', () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(true);\n\n const apiRequest = APIRequest.getInstance({webex});\n\n expect(apiRequest).toBeDefined();\n expect(infoSpy).toHaveBeenCalledWith('APIRequest initialized with transport: WSS', {\n file: 'REQUEST',\n method: 'constructor',\n });\n });\n\n it('should throw error if webex is missing from config', () => {\n expect(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n APIRequest.getInstance({webex: undefined as any});\n }).toThrow('WebexSDK instance is required');\n\n expect(errorSpy).toHaveBeenCalledWith(\n 'APIRequest instantiation failed: WebexSDK instance is required',\n {\n file: 'REQUEST',\n method: 'constructor',\n }\n );\n });\n\n it('should return same instance on subsequent getInstance() calls', () => {\n const instance1 = APIRequest.getInstance({webex});\n const instance2 = APIRequest.getInstance({webex});\n\n expect(instance1).toBe(instance2);\n });\n\n it('should clear singleton when resetInstance() is called', () => {\n const instance1 = APIRequest.getInstance({webex});\n\n APIRequest.resetInstance();\n\n const instance2 = APIRequest.getInstance({webex});\n\n expect(instance1).not.toBe(instance2);\n });\n });\n\n describe('createAPIRequest factory', () => {\n it('should create APIRequest instance using factory function', () => {\n const apiRequest = createAPIRequest({webex});\n\n expect(apiRequest).toBeDefined();\n expect(apiRequest).toBeInstanceOf(APIRequest);\n });\n });\n\n describe('isSocketEnabled', () => {\n it('should return false when WSS is disabled', () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = apiRequest.isSocketEnabled();\n\n expect(result).toBe(false);\n });\n\n it('should return true when WSS is enabled', () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(true);\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = apiRequest.isSocketEnabled();\n\n expect(result).toBe(true);\n });\n });\n\n describe('connectToMobiusSocket', () => {\n it('should return immediately if socket is already connected', async () => {\n mockMobiusSocket.isConnected.mockReturnValue(true);\n mockMobiusSocket.getConnectedWebSocketUrl.mockReturnValue('wss://existing.webex.com');\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = await apiRequest.connectToMobiusSocket('wss://test.webex.com');\n\n expect(result).toBe('wss://existing.webex.com');\n expect(mockMobiusSocket.connect).not.toHaveBeenCalled();\n expect(infoSpy).toHaveBeenCalledWith('Mobius WebSocket already connected', {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n });\n expect(mockMetricManager.submitMobiusSocketMetric).not.toHaveBeenCalled();\n });\n\n it('should initiate new connection if not connected', async () => {\n mockMobiusSocket.isConnected.mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const wssUrl = 'wss://test.webex.com/api/v1';\n\n const result = await apiRequest.connectToMobiusSocket(wssUrl);\n\n expect(mockMobiusSocket.connect).toHaveBeenCalledWith(wssUrl);\n expect(result).toBe(wssUrl);\n expect(infoSpy).toHaveBeenCalledWith(\n 'Mobius WebSocket not connected, initiating connection',\n {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n }\n );\n });\n\n it('should submit success metric on successful connection', async () => {\n mockMobiusSocket.isConnected.mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const wssUrl = 'wss://mobius.webex.com/api/v1';\n\n await apiRequest.connectToMobiusSocket(wssUrl);\n\n expect(logSpy).toHaveBeenCalledWith('Mobius WebSocket connected successfully', {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n });\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.CONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl\n );\n });\n\n it('should throw normalized error on connection failure', async () => {\n const connectionError = {\n statusCode: 503,\n statusMessage: 'Service Unavailable',\n trackingId: 'error-tracking-id',\n response: {\n statusCode: 503,\n trackingId: 'error-tracking-id',\n data: {error: 'Connection failed'},\n metadata: {'x-error': 'true'},\n },\n };\n mockMobiusSocket.isConnected.mockReturnValue(false);\n mockMobiusSocket.connect.mockRejectedValue(connectionError);\n const apiRequest = APIRequest.getInstance({webex});\n const wssUrl = 'wss://mobius.webex.com/api/v1';\n\n await expect(apiRequest.connectToMobiusSocket(wssUrl)).rejects.toEqual({\n statusCode: 503,\n body: {error: 'Connection failed'},\n headers: {\n trackingid: 'error-tracking-id',\n 'x-error': 'true',\n },\n });\n\n expect(warnSpy).toHaveBeenCalledWith(\n expect.stringContaining('Mobius WebSocket connection failed'),\n {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n }\n );\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET_ERROR,\n MOBIUS_SOCKET_ACTION.CONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl,\n undefined,\n expect.any(String)\n );\n });\n\n it('should handle connection error with minimal error object', async () => {\n const minimalError = {statusCode: 500};\n mockMobiusSocket.isConnected.mockReturnValue(false);\n mockMobiusSocket.connect.mockRejectedValue(minimalError);\n const apiRequest = APIRequest.getInstance({webex});\n\n await expect(apiRequest.connectToMobiusSocket('wss://test.webex.com')).rejects.toEqual({\n statusCode: 500,\n body: undefined,\n headers: {\n trackingid: '',\n },\n });\n });\n });\n\n describe('disconnectFromMobiusSocket', () => {\n it('should disconnect successfully', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n await apiRequest.disconnectFromMobiusSocket();\n\n expect(mockMobiusSocket.disconnect).toHaveBeenCalledWith(undefined);\n expect(infoSpy).toHaveBeenCalledWith('Disconnecting from Mobius WebSocket', {\n file: 'REQUEST',\n method: 'disconnectFromMobiusSocket',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius WebSocket disconnected successfully', {\n file: 'REQUEST',\n method: 'disconnectFromMobiusSocket',\n });\n });\n\n it('should submit success metric after disconnect', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n await apiRequest.disconnectFromMobiusSocket();\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.DISCONNECT,\n METRIC_TYPE.BEHAVIORAL,\n 'wss://test.webex.com'\n );\n });\n\n it('should disconnect with custom options', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const options = {code: 1000, reason: 'Normal closure'};\n\n await apiRequest.disconnectFromMobiusSocket(options);\n\n expect(mockMobiusSocket.disconnect).toHaveBeenCalledWith(options);\n });\n\n it('should handle disconnect error silently and log warning', async () => {\n mockMobiusSocket.disconnect.mockRejectedValue(new Error('Disconnect failed'));\n const apiRequest = APIRequest.getInstance({webex});\n\n await expect(apiRequest.disconnectFromMobiusSocket()).resolves.not.toThrow();\n\n expect(warnSpy).toHaveBeenCalledWith(\n 'Mobius WebSocket disconnection failed: Error: Disconnect failed',\n {\n file: 'REQUEST',\n method: 'disconnectFromMobiusSocket',\n }\n );\n });\n\n it('should submit error metric on disconnect failure', async () => {\n mockMobiusSocket.disconnect.mockRejectedValue(new Error('Disconnect failed'));\n const apiRequest = APIRequest.getInstance({webex});\n\n await apiRequest.disconnectFromMobiusSocket();\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET_ERROR,\n MOBIUS_SOCKET_ACTION.DISCONNECT,\n METRIC_TYPE.BEHAVIORAL,\n 'wss://test.webex.com',\n undefined,\n 'Error: Disconnect failed'\n );\n });\n });\n\n describe('makeRequest - HTTP transport', () => {\n it('should route through webex.request when WSS is disabled', async () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n body: {userId: 'user-123'},\n };\n const expectedResponse: WebexRequestPayload = {\n statusCode: 200,\n body: {deviceId: 'device-456'},\n };\n webex.request.mockResolvedValue(expectedResponse);\n\n const result = await apiRequest.makeRequest(requestOptions);\n\n expect(webex.request).toHaveBeenCalledWith(requestOptions);\n expect(result).toEqual(expectedResponse);\n expect(infoSpy).toHaveBeenCalledWith('Dispatching request via HTTP ', {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n\n it('should pass request options unchanged to webex.request', async () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/devices/device-123',\n method: HTTP_METHODS.GET,\n headers: {'x-custom-header': 'value'},\n };\n webex.request.mockResolvedValue({statusCode: 200});\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(webex.request).toHaveBeenCalledWith(requestOptions);\n });\n\n it('should return webex.request result directly', async () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const expectedResponse = {\n statusCode: 404,\n body: {error: 'Not found'},\n headers: {'x-tracking-id': 'track-123'},\n };\n webex.request.mockResolvedValue(expectedResponse);\n\n const result = await apiRequest.makeRequest({\n uri: '/api/v1/test',\n method: HTTP_METHODS.GET,\n });\n\n expect(result).toEqual(expectedResponse);\n });\n });\n\n describe('makeRequest - WebSocket transport', () => {\n beforeEach(() => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(true);\n });\n\n it('should derive socket message type from URI and method', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n body: {userId: 'user-123'},\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n type: MOBIUS_SOCKET_MESSAGE_TYPE.REGISTER,\n })\n );\n expect(infoSpy).toHaveBeenCalledWith('Dispatching request via WSS ', {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n\n it('should throw error if message type is UNKNOWN', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/unrecognized/path',\n method: HTTP_METHODS.POST,\n };\n\n await expect(apiRequest.makeRequest(requestOptions)).rejects.toThrow(\n 'Unknown Mobius Socket message type: UNKNOWN'\n );\n\n expect(errorSpy).toHaveBeenCalledWith(\n expect.stringContaining('Unknown Mobius Socket message type'),\n {\n file: 'REQUEST',\n method: 'makeRequest',\n }\n );\n });\n\n it('should generate tracking ID with webex-js-sdk prefix', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(uuid).toHaveBeenCalled();\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n trackingId: 'webex-js-sdk_mock-uuid-12345',\n })\n );\n });\n\n it('should send WSS request with correct payload structure', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n body: {userId: 'user-123'},\n headers: {'x-custom': 'header-value'},\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith({\n type: MOBIUS_SOCKET_MESSAGE_TYPE.REGISTER,\n trackingId: 'webex-js-sdk_mock-uuid-12345',\n metadata: {\n 'x-custom': 'header-value',\n userAgent: 'webex-calling/beta',\n authorization: '',\n },\n data: {userId: 'user-123'},\n });\n });\n\n it('should get user token for supplementary services (CALL_HOLD)', async () => {\n webex.credentials.getUserToken.mockResolvedValue('Bearer token-abc-123');\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/devices/device-123/services/callhold/hold',\n method: HTTP_METHODS.POST,\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(webex.credentials.getUserToken).toHaveBeenCalled();\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n type: MOBIUS_SOCKET_MESSAGE_TYPE.CALL_HOLD,\n metadata: expect.objectContaining({\n authorization: 'Bearer token-abc-123',\n }),\n })\n );\n });\n\n it('should not get user token for non-supplementary services', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(webex.credentials.getUserToken).not.toHaveBeenCalled();\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n metadata: expect.objectContaining({\n authorization: '',\n }),\n })\n );\n });\n\n it('should normalize success response to WebexRequestPayload shape', async () => {\n const wsResponse: MobiusSocketResponse = {\n type: 'register.response',\n statusCode: 201,\n statusMessage: 'Created',\n trackingId: 'track-123',\n data: {deviceId: 'device-456', correlationId: 'corr-789'},\n metadata: {'x-response-header': 'value'},\n };\n mockMobiusSocket.sendWssRequest.mockResolvedValue(wsResponse);\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = await apiRequest.makeRequest({\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n });\n\n expect(result).toEqual({\n statusCode: 201,\n body: {deviceId: 'device-456', correlationId: 'corr-789'},\n headers: {\n trackingid: 'track-123',\n 'x-response-header': 'value',\n },\n });\n expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('WSS request succeeded'), {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n\n it('should normalize error to WebexRequestPayload shape', async () => {\n const wsError = {\n statusCode: 400,\n statusMessage: 'Bad Request',\n trackingId: 'error-track-456',\n response: {\n statusCode: 400,\n trackingId: 'error-track-456',\n data: {error: 'Invalid request'},\n metadata: {'x-error-code': 'ERR001'},\n },\n };\n mockMobiusSocket.sendWssRequest.mockRejectedValue(wsError);\n const apiRequest = APIRequest.getInstance({webex});\n\n await expect(\n apiRequest.makeRequest({\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n })\n ).rejects.toEqual({\n statusCode: 400,\n body: {error: 'Invalid request'},\n headers: {\n trackingid: 'error-track-456',\n 'x-error-code': 'ERR001',\n },\n });\n\n expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining('WSS request failed'), {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n });\n\n describe('registerMobiusSocketListener', () => {\n it('should attach listener to event:async_event', () => {\n const apiRequest = APIRequest.getInstance({webex});\n const callback = jest.fn();\n\n apiRequest.registerMobiusSocketListener(callback);\n\n expect(mockMobiusSocket.on).toHaveBeenCalledWith('event:async_event', expect.any(Function));\n expect(infoSpy).toHaveBeenCalledWith('Attaching Mobius async event listener', {\n file: 'REQUEST',\n method: 'registerMobiusSocketListener',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius async event listener attached', {\n file: 'REQUEST',\n method: 'registerMobiusSocketListener',\n });\n });\n\n it('should invoke callback with event data when async event received', () => {\n const apiRequest = APIRequest.getInstance({webex});\n const callback = jest.fn();\n const mockEvent: MobiusAsyncEvent = {\n type: 'event:async_event',\n eventId: 'evt-123',\n trackingId: 'track-456',\n data: {\n eventType: 'registration.down',\n } as any,\n };\n\n apiRequest.registerMobiusSocketListener(callback);\n\n const attachedCallback = mockMobiusSocket.on.mock.calls[0][1];\n attachedCallback(mockEvent);\n\n expect(callback).toHaveBeenCalledWith(mockEvent);\n });\n\n it('should submit LISTENER_REGISTERED metric', () => {\n const apiRequest = APIRequest.getInstance({webex});\n const callback = jest.fn();\n\n apiRequest.registerMobiusSocketListener(callback);\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.LISTENER_REGISTERED,\n METRIC_TYPE.BEHAVIORAL\n );\n });\n });\n\n describe('unregisterMobiusSocketListener', () => {\n it('should detach listener from event:async_event', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n apiRequest.unregisterMobiusSocketListener();\n\n expect(mockMobiusSocket.off).toHaveBeenCalledWith('event:async_event');\n expect(infoSpy).toHaveBeenCalledWith('Detaching Mobius async event listener', {\n file: 'REQUEST',\n method: 'unregisterMobiusSocketListener',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius async event listener detached', {\n file: 'REQUEST',\n method: 'unregisterMobiusSocketListener',\n });\n });\n\n it('should submit LISTENER_UNREGISTERED metric', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n apiRequest.unregisterMobiusSocketListener();\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.LISTENER_UNREGISTERED,\n METRIC_TYPE.BEHAVIORAL\n );\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,7 @@
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
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {MobiusCallData, MobiusRegistrationDownData} from '../calling/types';\nimport {WebexRequestPayload} from '../../common/types';\nimport {WebexSDK} from '../../SDKConnector/types';\n\n/**\n * Configuration for APIRequest class\n */\nexport interface APIRequestConfig {\n /** Webex SDK instance for making requests */\n webex: WebexSDK;\n}\n\n/**\n * Request options for makeRequest method (alias for compatibility)\n */\nexport type APIRequestOptions = WebexRequestPayload;\n\n/**\n * Request options for Mobius WebSocket requests\n */\nexport interface MobiusSocketRequestOptions {\n /** Request type (typically HTTP method like GET, POST, etc.) */\n type: string;\n /** Unique tracking ID for the request */\n trackingId: string;\n /** Optional metadata (uri, service, headers, etc.) */\n metadata?: Record<string, unknown>;\n /** Optional request data/body */\n data?: unknown;\n}\n\n/**\n * Response structure for Mobius WebSocket requests\n */\nexport type MobiusSocketResponse = {\n type: string;\n trackingId: string;\n statusCode: number;\n statusMessage: string;\n metadata?: Record<string, unknown>;\n data?: unknown;\n};\n\n/**\n * Function signature for MobiusSocket.sendWssRequest.\n * Sends a websocket request data and resolves when the matching response arrives.\n */\nexport type SendWssRequestFn = (\n data: MobiusSocketRequestOptions,\n options?: Record<string, unknown>\n) => Promise<MobiusSocketResponse>;\n\nexport type MobiusAsyncEvent = {\n type: string;\n eventId: string;\n trackingId: string;\n data: MobiusCallData | MobiusRegistrationDownData;\n};\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,70 @@
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.WEBRTC_CALLING_OVER_WS_FEATURE_KEY = void 0;
9
+ exports.isMobiusWssEnabled = isMobiusWssEnabled;
10
+ var _Logger = _interopRequireDefault(require("../../Logger"));
11
+ var _constants = require("../constants");
12
+ /** WDM device-settings key for routing Mobius traffic over WebSocket. */
13
+ var WEBRTC_CALLING_OVER_WS_FEATURE_KEY = exports.WEBRTC_CALLING_OVER_WS_FEATURE_KEY = 'webrtc-calling-over-ws-CALL-219562';
14
+
15
+ /** Allowed origins for samples page localStorage override */
16
+ var ALLOWED_ORIGINS = ['localhost', '127.0.0.1', 'web-sdk.webex.com'];
17
+
18
+ /**
19
+ * Returns tri-state localStorage override: true (force-enable), false (force-disable), or null (defer to backend).
20
+ */
21
+ function samplesPageToggleValue() {
22
+ if (typeof window === 'undefined' || !window.localStorage) {
23
+ return null;
24
+ }
25
+ var hostname = window.location.hostname;
26
+ var isAllowedOrigin = ALLOWED_ORIGINS.some(function (origin) {
27
+ return hostname === origin || hostname.endsWith(".".concat(origin));
28
+ });
29
+ if (!isAllowedOrigin) {
30
+ return null;
31
+ }
32
+ var localStorageValue = localStorage.getItem('mobius-wss-enabled');
33
+ if (localStorageValue === 'true') {
34
+ _Logger.default.trace("Mobius WSS force-enabled via samples page localStorage override on ".concat(hostname), {
35
+ file: _constants.WS_FEATURE_FLAG_FILE,
36
+ method: _constants.METHODS.IS_MOBIUS_WSS_ENABLED
37
+ });
38
+ return true;
39
+ }
40
+ if (localStorageValue === 'false') {
41
+ _Logger.default.trace("Mobius WSS force-disabled via samples page localStorage override on ".concat(hostname), {
42
+ file: _constants.WS_FEATURE_FLAG_FILE,
43
+ method: _constants.METHODS.IS_MOBIUS_WSS_ENABLED
44
+ });
45
+ return false;
46
+ }
47
+ return null;
48
+ }
49
+
50
+ /**
51
+ * Whether Webex Calling should use the Mobius WebSocket transport for API requests.
52
+ * Reads WDM `webex.internal.device.settings['webrtc-calling-over-ws'].value`; must be
53
+ * strictly `true` to enable WebSocket—otherwise use HTTP.
54
+ *
55
+ * Additionally checks browser localStorage for 'mobius-wss-enabled' flag on allowed origins
56
+ * (localhost, 127.0.0.1, web-sdk.webex.com) to enable testing via samples page.
57
+ * localStorage can force-enable ('true'), force-disable ('false'), or defer to backend (null/unset).
58
+ */
59
+ function isMobiusWssEnabled(webex) {
60
+ var _webex$internal, _webex$internal$devic, _webex$internal$devic2, _webex$internal$devic3, _webex$internal$devic4;
61
+ var enabled = ((_webex$internal = webex.internal) === null || _webex$internal === void 0 ? void 0 : (_webex$internal$devic = _webex$internal.device) === null || _webex$internal$devic === void 0 ? void 0 : (_webex$internal$devic2 = _webex$internal$devic.features) === null || _webex$internal$devic2 === void 0 ? void 0 : (_webex$internal$devic3 = _webex$internal$devic2.developer) === null || _webex$internal$devic3 === void 0 ? void 0 : (_webex$internal$devic4 = _webex$internal$devic3.get(WEBRTC_CALLING_OVER_WS_FEATURE_KEY)) === null || _webex$internal$devic4 === void 0 ? void 0 : _webex$internal$devic4.value) === true;
62
+ var localStorageOverride = samplesPageToggleValue();
63
+ var finalValue = localStorageOverride !== null ? localStorageOverride : enabled;
64
+ _Logger.default.trace("Mobius WSS feature flag '".concat(WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: ").concat(finalValue, " (backend: ").concat(enabled, ", localStorage: ").concat(localStorageOverride, ")"), {
65
+ file: _constants.WS_FEATURE_FLAG_FILE,
66
+ method: _constants.METHODS.IS_MOBIUS_WSS_ENABLED
67
+ });
68
+ return finalValue;
69
+ }
70
+ //# sourceMappingURL=wsFeatureFlag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_Logger","_interopRequireDefault","require","_constants","WEBRTC_CALLING_OVER_WS_FEATURE_KEY","exports","ALLOWED_ORIGINS","samplesPageToggleValue","window","localStorage","hostname","location","isAllowedOrigin","some","origin","endsWith","concat","localStorageValue","getItem","log","trace","file","WS_FEATURE_FLAG_FILE","method","METHODS","IS_MOBIUS_WSS_ENABLED","isMobiusWssEnabled","webex","_webex$internal","_webex$internal$devic","_webex$internal$devic2","_webex$internal$devic3","_webex$internal$devic4","enabled","internal","device","features","developer","get","value","localStorageOverride","finalValue"],"sources":["wsFeatureFlag.ts"],"sourcesContent":["import {WebexSDK} from '../../SDKConnector/types';\nimport log from '../../Logger';\nimport {METHODS, WS_FEATURE_FLAG_FILE} from '../constants';\n\n/** WDM device-settings key for routing Mobius traffic over WebSocket. */\nexport const WEBRTC_CALLING_OVER_WS_FEATURE_KEY = 'webrtc-calling-over-ws-CALL-219562';\n\n/** Allowed origins for samples page localStorage override */\nconst ALLOWED_ORIGINS = ['localhost', '127.0.0.1', 'web-sdk.webex.com'];\n\n/**\n * Returns tri-state localStorage override: true (force-enable), false (force-disable), or null (defer to backend).\n */\nfunction samplesPageToggleValue(): boolean | null {\n if (typeof window === 'undefined' || !window.localStorage) {\n return null;\n }\n\n const hostname = window.location.hostname;\n const isAllowedOrigin = ALLOWED_ORIGINS.some(\n (origin) => hostname === origin || hostname.endsWith(`.${origin}`)\n );\n\n if (!isAllowedOrigin) {\n return null;\n }\n\n const localStorageValue = localStorage.getItem('mobius-wss-enabled');\n\n if (localStorageValue === 'true') {\n log.trace(`Mobius WSS force-enabled via samples page localStorage override on ${hostname}`, {\n file: WS_FEATURE_FLAG_FILE,\n method: METHODS.IS_MOBIUS_WSS_ENABLED,\n });\n\n return true;\n }\n\n if (localStorageValue === 'false') {\n log.trace(`Mobius WSS force-disabled via samples page localStorage override on ${hostname}`, {\n file: WS_FEATURE_FLAG_FILE,\n method: METHODS.IS_MOBIUS_WSS_ENABLED,\n });\n\n return false;\n }\n\n return null;\n}\n\n/**\n * Whether Webex Calling should use the Mobius WebSocket transport for API requests.\n * Reads WDM `webex.internal.device.settings['webrtc-calling-over-ws'].value`; must be\n * strictly `true` to enable WebSocket—otherwise use HTTP.\n *\n * Additionally checks browser localStorage for 'mobius-wss-enabled' flag on allowed origins\n * (localhost, 127.0.0.1, web-sdk.webex.com) to enable testing via samples page.\n * localStorage can force-enable ('true'), force-disable ('false'), or defer to backend (null/unset).\n */\nexport function isMobiusWssEnabled(webex: WebexSDK): boolean {\n const enabled =\n webex.internal?.device?.features?.developer?.get(WEBRTC_CALLING_OVER_WS_FEATURE_KEY)?.value ===\n true;\n\n const localStorageOverride = samplesPageToggleValue();\n const finalValue = localStorageOverride !== null ? localStorageOverride : enabled;\n\n log.trace(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: ${finalValue} (backend: ${enabled}, localStorage: ${localStorageOverride})`,\n {\n file: WS_FEATURE_FLAG_FILE,\n method: METHODS.IS_MOBIUS_WSS_ENABLED,\n }\n );\n\n return finalValue;\n}\n"],"mappings":";;;;;;;;;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA;AACO,IAAME,kCAAkC,GAAAC,OAAA,CAAAD,kCAAA,GAAG,oCAAoC;;AAEtF;AACA,IAAME,eAAe,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,mBAAmB,CAAC;;AAEvE;AACA;AACA;AACA,SAASC,sBAAsBA,CAAA,EAAmB;EAChD,IAAI,OAAOC,MAAM,KAAK,WAAW,IAAI,CAACA,MAAM,CAACC,YAAY,EAAE;IACzD,OAAO,IAAI;EACb;EAEA,IAAMC,QAAQ,GAAGF,MAAM,CAACG,QAAQ,CAACD,QAAQ;EACzC,IAAME,eAAe,GAAGN,eAAe,CAACO,IAAI,CAC1C,UAACC,MAAM;IAAA,OAAKJ,QAAQ,KAAKI,MAAM,IAAIJ,QAAQ,CAACK,QAAQ,KAAAC,MAAA,CAAKF,MAAM,CAAE,CAAC;EAAA,CACpE,CAAC;EAED,IAAI,CAACF,eAAe,EAAE;IACpB,OAAO,IAAI;EACb;EAEA,IAAMK,iBAAiB,GAAGR,YAAY,CAACS,OAAO,CAAC,oBAAoB,CAAC;EAEpE,IAAID,iBAAiB,KAAK,MAAM,EAAE;IAChCE,eAAG,CAACC,KAAK,uEAAAJ,MAAA,CAAuEN,QAAQ,GAAI;MAC1FW,IAAI,EAAEC,+BAAoB;MAC1BC,MAAM,EAAEC,kBAAO,CAACC;IAClB,CAAC,CAAC;IAEF,OAAO,IAAI;EACb;EAEA,IAAIR,iBAAiB,KAAK,OAAO,EAAE;IACjCE,eAAG,CAACC,KAAK,wEAAAJ,MAAA,CAAwEN,QAAQ,GAAI;MAC3FW,IAAI,EAAEC,+BAAoB;MAC1BC,MAAM,EAAEC,kBAAO,CAACC;IAClB,CAAC,CAAC;IAEF,OAAO,KAAK;EACd;EAEA,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAACC,KAAe,EAAW;EAAA,IAAAC,eAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;EAC3D,IAAMC,OAAO,GACX,EAAAL,eAAA,GAAAD,KAAK,CAACO,QAAQ,cAAAN,eAAA,wBAAAC,qBAAA,GAAdD,eAAA,CAAgBO,MAAM,cAAAN,qBAAA,wBAAAC,sBAAA,GAAtBD,qBAAA,CAAwBO,QAAQ,cAAAN,sBAAA,wBAAAC,sBAAA,GAAhCD,sBAAA,CAAkCO,SAAS,cAAAN,sBAAA,wBAAAC,sBAAA,GAA3CD,sBAAA,CAA6CO,GAAG,CAAClC,kCAAkC,CAAC,cAAA4B,sBAAA,uBAApFA,sBAAA,CAAsFO,KAAK,MAC3F,IAAI;EAEN,IAAMC,oBAAoB,GAAGjC,sBAAsB,CAAC,CAAC;EACrD,IAAMkC,UAAU,GAAGD,oBAAoB,KAAK,IAAI,GAAGA,oBAAoB,GAAGP,OAAO;EAEjFd,eAAG,CAACC,KAAK,6BAAAJ,MAAA,CACqBZ,kCAAkC,qBAAAY,MAAA,CAAkByB,UAAU,iBAAAzB,MAAA,CAAciB,OAAO,sBAAAjB,MAAA,CAAmBwB,oBAAoB,QACtJ;IACEnB,IAAI,EAAEC,+BAAoB;IAC1BC,MAAM,EAAEC,kBAAO,CAACC;EAClB,CACF,CAAC;EAED,OAAOgB,UAAU;AACnB","ignoreList":[]}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+
3
+ var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
4
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
5
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
6
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
7
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
8
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
9
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
11
+ var _testUtil = require("../../common/testUtil");
12
+ var _Logger = _interopRequireDefault(require("../../Logger"));
13
+ var _wsFeatureFlag = require("./wsFeatureFlag");
14
+ function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
16
+ describe('wsFeatureFlag', function () {
17
+ var webex;
18
+ beforeEach(function () {
19
+ webex = (0, _testUtil.getTestUtilsWebex)();
20
+ jest.clearAllMocks();
21
+ });
22
+ describe('WEBRTC_CALLING_OVER_WS_FEATURE_KEY', function () {
23
+ it('should export the correct feature key constant', function () {
24
+ expect(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY).toBe('webrtc-calling-over-ws-CALL-219562');
25
+ });
26
+ });
27
+ describe('isMobiusWssEnabled', function () {
28
+ var traceSpy;
29
+ beforeEach(function () {
30
+ traceSpy = jest.spyOn(_Logger.default, 'trace');
31
+ });
32
+ it('should return true when feature flag is enabled with boolean true', function () {
33
+ webex.internal.device.features.developer.get = jest.fn().mockReturnValue({
34
+ value: true
35
+ });
36
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
37
+ expect(result).toBe(true);
38
+ expect(webex.internal.device.features.developer.get).toHaveBeenCalledWith(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY);
39
+ expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: true (backend: true, localStorage: null)"), {
40
+ file: 'wsFeatureFlag',
41
+ method: 'isMobiusWssEnabled'
42
+ });
43
+ });
44
+ it('should return false when feature flag is disabled with boolean false', function () {
45
+ webex.internal.device.features.developer.get = jest.fn().mockReturnValue({
46
+ value: false
47
+ });
48
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
49
+ expect(result).toBe(false);
50
+ expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: false (backend: false, localStorage: null)"), {
51
+ file: 'wsFeatureFlag',
52
+ method: 'isMobiusWssEnabled'
53
+ });
54
+ });
55
+ it('should return false when feature flag value is undefined', function () {
56
+ webex.internal.device.features.developer.get = jest.fn().mockReturnValue({
57
+ value: undefined
58
+ });
59
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
60
+ expect(result).toBe(false);
61
+ expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: false (backend: false, localStorage: null)"), {
62
+ file: 'wsFeatureFlag',
63
+ method: 'isMobiusWssEnabled'
64
+ });
65
+ });
66
+ it('should return false when feature flag returns null', function () {
67
+ webex.internal.device.features.developer.get = jest.fn().mockReturnValue(null);
68
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
69
+ expect(result).toBe(false);
70
+ });
71
+ it('should return false when feature flag value is truthy but not boolean true (number)', function () {
72
+ webex.internal.device.features.developer.get = jest.fn().mockReturnValue({
73
+ value: 1
74
+ });
75
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
76
+ expect(result).toBe(false);
77
+ expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: false (backend: false, localStorage: null)"), {
78
+ file: 'wsFeatureFlag',
79
+ method: 'isMobiusWssEnabled'
80
+ });
81
+ });
82
+ it('should return false when feature flag value is truthy but not boolean true (string)', function () {
83
+ webex.internal.device.features.developer.get = jest.fn().mockReturnValue({
84
+ value: 'true'
85
+ });
86
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
87
+ expect(result).toBe(false);
88
+ });
89
+ it('should return false when feature flag value is truthy but not boolean true (object)', function () {
90
+ webex.internal.device.features.developer.get = jest.fn().mockReturnValue({
91
+ value: {}
92
+ });
93
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
94
+ expect(result).toBe(false);
95
+ });
96
+ it('should return false when webex.internal.device.features is missing', function () {
97
+ var webexWithoutFeatures = _objectSpread(_objectSpread({}, webex), {}, {
98
+ internal: _objectSpread(_objectSpread({}, webex.internal), {}, {
99
+ device: _objectSpread(_objectSpread({}, webex.internal.device), {}, {
100
+ features: undefined
101
+ })
102
+ })
103
+ });
104
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webexWithoutFeatures);
105
+ expect(result).toBe(false);
106
+ });
107
+ it('should return false when webex.internal.device.features.developer is missing', function () {
108
+ var webexWithoutDeveloper = _objectSpread(_objectSpread({}, webex), {}, {
109
+ internal: _objectSpread(_objectSpread({}, webex.internal), {}, {
110
+ device: _objectSpread(_objectSpread({}, webex.internal.device), {}, {
111
+ features: {
112
+ entitlement: webex.internal.device.features.entitlement,
113
+ developer: undefined
114
+ }
115
+ })
116
+ })
117
+ });
118
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webexWithoutDeveloper);
119
+ expect(result).toBe(false);
120
+ });
121
+ it('should return false when webex.internal.device is missing', function () {
122
+ var webexWithoutDevice = _objectSpread(_objectSpread({}, webex), {}, {
123
+ internal: _objectSpread(_objectSpread({}, webex.internal), {}, {
124
+ device: undefined
125
+ })
126
+ });
127
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webexWithoutDevice);
128
+ expect(result).toBe(false);
129
+ });
130
+ it('should return false when webex.internal is missing', function () {
131
+ var webexWithoutInternal = _objectSpread(_objectSpread({}, webex), {}, {
132
+ internal: undefined
133
+ });
134
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webexWithoutInternal);
135
+ expect(result).toBe(false);
136
+ });
137
+ });
138
+ });
139
+ //# sourceMappingURL=wsFeatureFlag.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_testUtil","require","_Logger","_interopRequireDefault","_wsFeatureFlag","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","describe","webex","beforeEach","getTestUtilsWebex","jest","clearAllMocks","it","expect","WEBRTC_CALLING_OVER_WS_FEATURE_KEY","toBe","traceSpy","spyOn","log","internal","device","features","developer","get","fn","mockReturnValue","value","result","isMobiusWssEnabled","toHaveBeenCalledWith","concat","file","method","undefined","webexWithoutFeatures","webexWithoutDeveloper","entitlement","webexWithoutDevice","webexWithoutInternal"],"sources":["wsFeatureFlag.test.ts"],"sourcesContent":["import {getTestUtilsWebex} from '../../common/testUtil';\nimport log from '../../Logger';\nimport {isMobiusWssEnabled, WEBRTC_CALLING_OVER_WS_FEATURE_KEY} from './wsFeatureFlag';\n\ndescribe('wsFeatureFlag', () => {\n let webex: ReturnType<typeof getTestUtilsWebex>;\n\n beforeEach(() => {\n webex = getTestUtilsWebex();\n jest.clearAllMocks();\n });\n\n describe('WEBRTC_CALLING_OVER_WS_FEATURE_KEY', () => {\n it('should export the correct feature key constant', () => {\n expect(WEBRTC_CALLING_OVER_WS_FEATURE_KEY).toBe('webrtc-calling-over-ws-CALL-219562');\n });\n });\n\n describe('isMobiusWssEnabled', () => {\n let traceSpy: jest.SpyInstance;\n\n beforeEach(() => {\n traceSpy = jest.spyOn(log, 'trace');\n });\n\n it('should return true when feature flag is enabled with boolean true', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: true});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(true);\n expect(webex.internal.device.features.developer.get).toHaveBeenCalledWith(\n WEBRTC_CALLING_OVER_WS_FEATURE_KEY\n );\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: true (backend: true, localStorage: null)`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag is disabled with boolean false', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: false});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: false (backend: false, localStorage: null)`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag value is undefined', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: undefined});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: false (backend: false, localStorage: null)`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag returns null', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue(null);\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n });\n\n it('should return false when feature flag value is truthy but not boolean true (number)', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: 1});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: false (backend: false, localStorage: null)`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag value is truthy but not boolean true (string)', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: 'true'});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n });\n\n it('should return false when feature flag value is truthy but not boolean true (object)', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: {}});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal.device.features is missing', () => {\n const webexWithoutFeatures = {\n ...webex,\n internal: {\n ...webex.internal,\n device: {\n ...webex.internal.device,\n features: undefined,\n },\n },\n };\n\n const result = isMobiusWssEnabled(webexWithoutFeatures as any);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal.device.features.developer is missing', () => {\n const webexWithoutDeveloper = {\n ...webex,\n internal: {\n ...webex.internal,\n device: {\n ...webex.internal.device,\n features: {\n entitlement: webex.internal.device.features.entitlement,\n developer: undefined,\n },\n },\n },\n };\n\n const result = isMobiusWssEnabled(webexWithoutDeveloper as any);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal.device is missing', () => {\n const webexWithoutDevice = {\n ...webex,\n internal: {\n ...webex.internal,\n device: undefined,\n },\n };\n\n const result = isMobiusWssEnabled(webexWithoutDevice as any);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal is missing', () => {\n const webexWithoutInternal = {\n ...webex,\n internal: undefined,\n };\n\n const result = isMobiusWssEnabled(webexWithoutInternal as any);\n\n expect(result).toBe(false);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -677,28 +677,30 @@ var ContactsClient = exports.ContactsClient = /*#__PURE__*/function () {
677
677
  }
678
678
  return _context11.abrupt("return", this.encryptionKeyUrl);
679
679
  case 1:
680
- // istanbul ignore else
681
- if (this.groups === undefined) {
682
- this.getContacts();
680
+ if (!(this.groups === undefined)) {
681
+ _context11.next = 2;
682
+ break;
683
683
  }
684
- // istanbul ignore else
684
+ _context11.next = 2;
685
+ return this.getContacts();
686
+ case 2:
685
687
  if (!(this.groups && this.groups.length)) {
686
- _context11.next = 2;
688
+ _context11.next = 3;
687
689
  break;
688
690
  }
689
691
  return _context11.abrupt("return", this.groups[0].encryptionKeyUrl);
690
- case 2:
691
- _context11.next = 3;
692
- return this.createNewEncryptionKeyUrl();
693
692
  case 3:
693
+ _context11.next = 4;
694
+ return this.createNewEncryptionKeyUrl();
695
+ case 4:
694
696
  this.encryptionKeyUrl = _context11.sent;
695
697
  _Logger.default.log("Creating a default group: ".concat(_constants2.DEFAULT_GROUP_NAME), {
696
698
  file: _constants2.CONTACTS_CLIENT,
697
699
  method: this.fetchEncryptionKeyUrl.name
698
700
  });
699
- _context11.next = 4;
701
+ _context11.next = 5;
700
702
  return this.createContactGroup(_constants2.DEFAULT_GROUP_NAME, this.encryptionKeyUrl);
701
- case 4:
703
+ case 5:
702
704
  response = _context11.sent;
703
705
  if ((_response$data$group = response.data.group) !== null && _response$data$group !== void 0 && _response$data$group.groupId) {
704
706
  this.defaultGroupId = (_response$data$group2 = response.data.group) === null || _response$data$group2 === void 0 ? void 0 : _response$data$group2.groupId;
@@ -708,7 +710,7 @@ var ContactsClient = exports.ContactsClient = /*#__PURE__*/function () {
708
710
  });
709
711
  }
710
712
  return _context11.abrupt("return", this.encryptionKeyUrl);
711
- case 5:
713
+ case 6:
712
714
  case "end":
713
715
  return _context11.stop();
714
716
  }