@webex/contact-center 3.11.0 → 3.12.0-mobius-socket.1

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 (126) hide show
  1. package/dist/cc.js +121 -28
  2. package/dist/cc.js.map +1 -1
  3. package/dist/constants.js +5 -1
  4. package/dist/constants.js.map +1 -1
  5. package/dist/index.js +7 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/metrics/behavioral-events.js +13 -0
  8. package/dist/metrics/behavioral-events.js.map +1 -1
  9. package/dist/metrics/constants.js +9 -1
  10. package/dist/metrics/constants.js.map +1 -1
  11. package/dist/services/ApiAiAssistant.js +173 -0
  12. package/dist/services/ApiAiAssistant.js.map +1 -0
  13. package/dist/services/agent/types.js.map +1 -1
  14. package/dist/services/config/Util.js +6 -2
  15. package/dist/services/config/Util.js.map +1 -1
  16. package/dist/services/config/constants.js +12 -0
  17. package/dist/services/config/constants.js.map +1 -1
  18. package/dist/services/config/index.js +41 -2
  19. package/dist/services/config/index.js.map +1 -1
  20. package/dist/services/config/types.js +19 -1
  21. package/dist/services/config/types.js.map +1 -1
  22. package/dist/services/constants.js +27 -1
  23. package/dist/services/constants.js.map +1 -1
  24. package/dist/services/core/Err.js.map +1 -1
  25. package/dist/services/core/Utils.js +28 -6
  26. package/dist/services/core/Utils.js.map +1 -1
  27. package/dist/services/core/aqm-reqs.js +92 -17
  28. package/dist/services/core/aqm-reqs.js.map +1 -1
  29. package/dist/services/core/websocket/WebSocketManager.js +20 -5
  30. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  31. package/dist/services/core/websocket/connection-service.js +3 -1
  32. package/dist/services/core/websocket/connection-service.js.map +1 -1
  33. package/dist/services/index.js +6 -0
  34. package/dist/services/index.js.map +1 -1
  35. package/dist/services/task/TaskManager.js +117 -24
  36. package/dist/services/task/TaskManager.js.map +1 -1
  37. package/dist/services/task/TaskUtils.js +16 -3
  38. package/dist/services/task/TaskUtils.js.map +1 -1
  39. package/dist/services/task/constants.js +15 -1
  40. package/dist/services/task/constants.js.map +1 -1
  41. package/dist/services/task/dialer.js +51 -0
  42. package/dist/services/task/dialer.js.map +1 -1
  43. package/dist/services/task/types.js +15 -0
  44. package/dist/services/task/types.js.map +1 -1
  45. package/dist/types/cc.d.ts +801 -0
  46. package/dist/types/config.d.ts +66 -0
  47. package/dist/types/constants.d.ts +50 -0
  48. package/dist/types/index.d.ts +184 -0
  49. package/dist/types/logger-proxy.d.ts +71 -0
  50. package/dist/types/metrics/MetricsManager.d.ts +223 -0
  51. package/dist/types/metrics/behavioral-events.d.ts +29 -0
  52. package/dist/types/metrics/constants.d.ts +161 -0
  53. package/dist/types/services/AddressBook.d.ts +74 -0
  54. package/dist/types/services/ApiAiAssistant.d.ts +31 -0
  55. package/dist/types/services/EntryPoint.d.ts +67 -0
  56. package/dist/types/services/Queue.d.ts +76 -0
  57. package/dist/types/services/WebCallingService.d.ts +1 -0
  58. package/dist/types/services/agent/index.d.ts +46 -0
  59. package/dist/types/services/agent/types.d.ts +413 -0
  60. package/dist/types/services/config/Util.d.ts +20 -0
  61. package/dist/types/services/config/constants.d.ts +249 -0
  62. package/dist/types/services/config/index.d.ts +177 -0
  63. package/dist/types/services/config/types.d.ts +1207 -0
  64. package/dist/types/services/constants.d.ts +110 -0
  65. package/dist/types/services/core/Err.d.ts +121 -0
  66. package/dist/types/services/core/GlobalTypes.d.ts +58 -0
  67. package/dist/types/services/core/Utils.d.ts +101 -0
  68. package/dist/types/services/core/WebexRequest.d.ts +22 -0
  69. package/dist/types/services/core/aqm-reqs.d.ts +65 -0
  70. package/dist/types/services/core/constants.d.ts +99 -0
  71. package/dist/types/services/core/types.d.ts +47 -0
  72. package/dist/types/services/core/websocket/WebSocketManager.d.ts +35 -0
  73. package/dist/types/services/core/websocket/connection-service.d.ts +27 -0
  74. package/dist/types/services/core/websocket/keepalive.worker.d.ts +2 -0
  75. package/dist/types/services/core/websocket/types.d.ts +37 -0
  76. package/dist/types/services/index.d.ts +54 -0
  77. package/dist/types/services/task/AutoWrapup.d.ts +40 -0
  78. package/dist/types/services/task/TaskManager.d.ts +1 -0
  79. package/dist/types/services/task/TaskUtils.d.ts +92 -0
  80. package/dist/types/services/task/constants.d.ts +84 -0
  81. package/dist/types/services/task/contact.d.ts +69 -0
  82. package/dist/types/services/task/dialer.d.ts +43 -0
  83. package/dist/types/services/task/index.d.ts +650 -0
  84. package/dist/types/services/task/types.d.ts +1319 -0
  85. package/dist/types/types.d.ts +643 -0
  86. package/dist/types/utils/PageCache.d.ts +173 -0
  87. package/dist/types/webex-config.d.ts +53 -0
  88. package/dist/types/webex.d.ts +7 -0
  89. package/dist/types.js +14 -1
  90. package/dist/types.js.map +1 -1
  91. package/dist/webex.js +1 -1
  92. package/package.json +9 -9
  93. package/src/cc.ts +157 -30
  94. package/src/constants.ts +4 -0
  95. package/src/index.ts +1 -0
  96. package/src/metrics/behavioral-events.ts +14 -0
  97. package/src/metrics/constants.ts +11 -0
  98. package/src/services/ApiAiAssistant.ts +217 -0
  99. package/src/services/agent/types.ts +1 -1
  100. package/src/services/config/Util.ts +8 -0
  101. package/src/services/config/constants.ts +12 -0
  102. package/src/services/config/index.ts +45 -1
  103. package/src/services/config/types.ts +67 -0
  104. package/src/services/constants.ts +29 -0
  105. package/src/services/core/Err.ts +1 -0
  106. package/src/services/core/Utils.ts +32 -5
  107. package/src/services/core/aqm-reqs.ts +100 -22
  108. package/src/services/core/websocket/WebSocketManager.ts +21 -6
  109. package/src/services/core/websocket/connection-service.ts +5 -1
  110. package/src/services/index.ts +4 -0
  111. package/src/services/task/TaskManager.ts +174 -27
  112. package/src/services/task/TaskUtils.ts +12 -0
  113. package/src/services/task/constants.ts +16 -0
  114. package/src/services/task/dialer.ts +56 -1
  115. package/src/services/task/types.ts +24 -0
  116. package/src/types.ts +40 -1
  117. package/test/unit/spec/cc.ts +163 -23
  118. package/test/unit/spec/services/ApiAiAssistant.ts +115 -0
  119. package/test/unit/spec/services/config/index.ts +56 -0
  120. package/test/unit/spec/services/core/Utils.ts +63 -1
  121. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +82 -12
  122. package/test/unit/spec/services/core/websocket/connection-service.ts +3 -1
  123. package/test/unit/spec/services/task/TaskManager.ts +1119 -251
  124. package/test/unit/spec/services/task/dialer.ts +198 -112
  125. package/umd/contact-center.min.js +2 -2
  126. package/umd/contact-center.min.js.map +1 -1
@@ -74,6 +74,14 @@ describe('WebSocketManager', () => {
74
74
 
75
75
  mockWebex = {
76
76
  request: jest.fn(),
77
+ credentials: {
78
+ getOrgId: jest.fn().mockReturnValue('test-org-id'),
79
+ },
80
+ internal: {
81
+ services: {
82
+ isIntegrationEnvironment: jest.fn().mockReturnValue(true), // INT environment by default
83
+ },
84
+ },
77
85
  } as unknown as WebexSDK;
78
86
 
79
87
  mockWorker = {
@@ -107,22 +115,84 @@ describe('WebSocketManager', () => {
107
115
  expect(webSocketManager).toBeDefined();
108
116
  });
109
117
 
110
- it('should register and connect to WebSocket', async () => {
118
+ it('should register and connect to WebSocket with X-ORGANIZATION-ID header for INT environment', async () => {
119
+ const subscribeResponse = {
120
+ body: {
121
+ webSocketUrl: 'wss://fake-url',
122
+ },
123
+ };
124
+
125
+ // Mock INT environment (services.isIntegrationEnvironment returns true)
126
+ (mockWebex.internal.services.isIntegrationEnvironment as jest.Mock).mockReturnValue(true);
127
+ (mockWebex.request as jest.Mock).mockResolvedValueOnce(subscribeResponse);
128
+
129
+ await webSocketManager.initWebSocket({ body: fakeSubscribeRequest, resource: SUBSCRIBE_API });
130
+
131
+ expect(mockWebex.request).toHaveBeenCalledWith({
132
+ service: WCC_API_GATEWAY,
133
+ resource: SUBSCRIBE_API,
134
+ method: 'POST',
135
+ body: fakeSubscribeRequest,
136
+ headers: {'X-ORGANIZATION-ID': 'test-org-id'},
137
+ });
138
+ });
139
+
140
+ it('should register and connect to WebSocket without X-ORGANIZATION-ID header for production environment', async () => {
141
+ const subscribeResponse = {
142
+ body: {
143
+ webSocketUrl: 'wss://fake-url',
144
+ },
145
+ };
146
+
147
+ // Mock production environment (services.isIntegrationEnvironment returns false)
148
+ (mockWebex.internal.services.isIntegrationEnvironment as jest.Mock).mockReturnValue(false);
149
+ (mockWebex.request as jest.Mock).mockResolvedValueOnce(subscribeResponse);
150
+
151
+ // Create new WebSocketManager instance with production mock
152
+ webSocketManager = new WebSocketManager({ webex: mockWebex });
153
+
154
+ setTimeout(() => {
155
+ MockWebSocket.inst.onopen();
156
+ MockWebSocket.inst.onmessage({ data: JSON.stringify({ type: "Welcome" }) });
157
+ }, 1);
158
+
159
+ await webSocketManager.initWebSocket({ body: fakeSubscribeRequest, resource: SUBSCRIBE_API });
160
+
161
+ expect(mockWebex.request).toHaveBeenCalledWith({
162
+ service: WCC_API_GATEWAY,
163
+ resource: SUBSCRIBE_API,
164
+ method: 'POST',
165
+ body: fakeSubscribeRequest,
166
+ headers: undefined,
167
+ });
168
+ });
169
+
170
+ it('should not send X-ORGANIZATION-ID header when services.isIntegrationEnvironment is not available', async () => {
111
171
  const subscribeResponse = {
112
172
  body: {
113
173
  webSocketUrl: 'wss://fake-url',
114
174
  },
115
175
  };
116
176
 
177
+ // Mock services not available (defaults to production behavior)
178
+ (mockWebex as any).internal = undefined;
117
179
  (mockWebex.request as jest.Mock).mockResolvedValueOnce(subscribeResponse);
118
180
 
119
- await webSocketManager.initWebSocket({ body: fakeSubscribeRequest });
181
+ webSocketManager = new WebSocketManager({ webex: mockWebex });
182
+
183
+ setTimeout(() => {
184
+ MockWebSocket.inst.onopen();
185
+ MockWebSocket.inst.onmessage({ data: JSON.stringify({ type: "Welcome" }) });
186
+ }, 1);
187
+
188
+ await webSocketManager.initWebSocket({ body: fakeSubscribeRequest, resource: SUBSCRIBE_API });
120
189
 
121
190
  expect(mockWebex.request).toHaveBeenCalledWith({
122
191
  service: WCC_API_GATEWAY,
123
192
  resource: SUBSCRIBE_API,
124
193
  method: 'POST',
125
194
  body: fakeSubscribeRequest,
195
+ headers: undefined,
126
196
  });
127
197
  });
128
198
 
@@ -132,7 +202,7 @@ describe('WebSocketManager', () => {
132
202
  (mockWebex.request as jest.Mock).mockRejectedValueOnce(error);
133
203
 
134
204
  await expect(
135
- webSocketManager.initWebSocket({ body: fakeSubscribeRequest })
205
+ webSocketManager.initWebSocket({ body: fakeSubscribeRequest, resource: SUBSCRIBE_API })
136
206
  ).rejects.toThrow(error);
137
207
 
138
208
  expect(LoggerProxy.error).toHaveBeenCalledWith(
@@ -155,7 +225,7 @@ describe('WebSocketManager', () => {
155
225
 
156
226
  (mockWebex.request as jest.Mock).mockResolvedValueOnce(subscribeResponse);
157
227
 
158
- await webSocketManager.initWebSocket({ body: fakeSubscribeRequest });
228
+ await webSocketManager.initWebSocket({ body: fakeSubscribeRequest, resource: SUBSCRIBE_API });
159
229
 
160
230
  webSocketManager.close(true, 'Test reason');
161
231
 
@@ -172,7 +242,7 @@ describe('WebSocketManager', () => {
172
242
 
173
243
  (mockWebex.request as jest.Mock).mockResolvedValueOnce(subscribeResponse);
174
244
 
175
- await webSocketManager.initWebSocket({ body: fakeSubscribeRequest });
245
+ await webSocketManager.initWebSocket({ body: fakeSubscribeRequest, resource: SUBSCRIBE_API });
176
246
 
177
247
  setTimeout(() => {
178
248
  MockWebSocket.inst.onopen();
@@ -196,7 +266,7 @@ describe('WebSocketManager', () => {
196
266
 
197
267
  (mockWebex.request as jest.Mock).mockResolvedValueOnce(subscribeResponse);
198
268
 
199
- await webSocketManager.initWebSocket({ body: fakeSubscribeRequest });
269
+ await webSocketManager.initWebSocket({ body: fakeSubscribeRequest, resource: SUBSCRIBE_API });
200
270
 
201
271
  // Mock navigator.onLine to simulate network issue
202
272
  Object.defineProperty(global, 'navigator', {
@@ -243,7 +313,7 @@ describe('WebSocketManager', () => {
243
313
 
244
314
  (mockWebex.request as jest.Mock).mockResolvedValueOnce(subscribeResponse);
245
315
 
246
- await webSocketManager.initWebSocket({ body: fakeSubscribeRequest });
316
+ await webSocketManager.initWebSocket({ body: fakeSubscribeRequest, resource: SUBSCRIBE_API });
247
317
 
248
318
  const errorEvent = new Event('error');
249
319
  MockWebSocket.inst.onerror(errorEvent);
@@ -263,7 +333,7 @@ describe('WebSocketManager', () => {
263
333
 
264
334
  (mockWebex.request as jest.Mock).mockResolvedValueOnce(subscribeResponse);
265
335
 
266
- await webSocketManager.initWebSocket({ body: fakeSubscribeRequest });
336
+ await webSocketManager.initWebSocket({ body: fakeSubscribeRequest, resource: SUBSCRIBE_API });
267
337
 
268
338
  const messageEvent = new MessageEvent('message', {
269
339
  data: JSON.stringify({ type: 'AGENT_MULTI_LOGIN' }),
@@ -286,7 +356,7 @@ describe('WebSocketManager', () => {
286
356
 
287
357
  (mockWebex.request as jest.Mock).mockResolvedValueOnce(subscribeResponse);
288
358
 
289
- await webSocketManager.initWebSocket({ body: fakeSubscribeRequest });
359
+ await webSocketManager.initWebSocket({ body: fakeSubscribeRequest, resource: SUBSCRIBE_API });
290
360
 
291
361
  const messageEvent = new MessageEvent('message', {
292
362
  data: JSON.stringify({ type: 'Welcome', data: { someData: 'data' } }),
@@ -305,7 +375,7 @@ describe('WebSocketManager', () => {
305
375
 
306
376
  (mockWebex.request as jest.Mock).mockResolvedValueOnce(subscribeResponse);
307
377
 
308
- await webSocketManager.initWebSocket({ body: fakeSubscribeRequest });
378
+ await webSocketManager.initWebSocket({ body: fakeSubscribeRequest, resource: SUBSCRIBE_API });
309
379
 
310
380
  webSocketManager['forceCloseWebSocketOnTimeout'] = true;
311
381
 
@@ -340,7 +410,7 @@ describe('WebSocketManager', () => {
340
410
 
341
411
  (mockWebex.request as jest.Mock).mockResolvedValueOnce(subscribeResponse);
342
412
 
343
- await webSocketManager.initWebSocket({ body: fakeSubscribeRequest });
413
+ await webSocketManager.initWebSocket({ body: fakeSubscribeRequest, resource: SUBSCRIBE_API });
344
414
  webSocketManager.shouldReconnect = false;
345
415
  // Simulate the WebSocket close event
346
416
  setTimeout(() => {
@@ -370,7 +440,7 @@ describe('WebSocketManager', () => {
370
440
 
371
441
  (mockWebex.request as jest.Mock).mockResolvedValueOnce(subscribeResponse);
372
442
 
373
- await webSocketManager.initWebSocket({ body: fakeSubscribeRequest });
443
+ await webSocketManager.initWebSocket({ body: fakeSubscribeRequest, resource: SUBSCRIBE_API });
374
444
 
375
445
  // Simulate the WebSocket close event
376
446
  setTimeout(() => {
@@ -4,6 +4,8 @@ import {SubscribeRequest} from '../../../../../../src/types';
4
4
  import LoggerProxy from '../../../../../../src/logger-proxy';
5
5
  import {CONNECTIVITY_CHECK_INTERVAL} from '../../../../../../src/services/core/constants';
6
6
  import { CONNECTION_SERVICE_FILE } from '../../../../../../src/constants';
7
+ import {SUBSCRIBE_API} from '../../../../../../src/services/constants';
8
+
7
9
 
8
10
  jest.mock('../../../../../../src/services/core/websocket/WebSocketManager');
9
11
  jest.mock('../../../../../../src/logger-proxy', () => ({
@@ -109,7 +111,7 @@ describe('ConnectionService', () => {
109
111
  'event=socketConnectionRetry | Trying to reconnect to websocket',
110
112
  {module: CONNECTION_SERVICE_FILE, method: 'handleSocketClose'}
111
113
  );
112
- expect(mockWebSocketManager.initWebSocket).toHaveBeenCalledWith({body: mockSubscribeRequest});
114
+ expect(mockWebSocketManager.initWebSocket).toHaveBeenCalledWith({body: mockSubscribeRequest, resource: SUBSCRIBE_API});
113
115
  });
114
116
 
115
117
  describe('ConnectionService onPing', () => {