@webex/contact-center 0.0.0-next.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 (177) hide show
  1. package/README.md +81 -0
  2. package/__mocks__/workerMock.js +15 -0
  3. package/babel.config.js +15 -0
  4. package/dist/cc.js +1416 -0
  5. package/dist/cc.js.map +1 -0
  6. package/dist/config.js +72 -0
  7. package/dist/config.js.map +1 -0
  8. package/dist/constants.js +58 -0
  9. package/dist/constants.js.map +1 -0
  10. package/dist/index.js +142 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/logger-proxy.js +115 -0
  13. package/dist/logger-proxy.js.map +1 -0
  14. package/dist/metrics/MetricsManager.js +474 -0
  15. package/dist/metrics/MetricsManager.js.map +1 -0
  16. package/dist/metrics/behavioral-events.js +322 -0
  17. package/dist/metrics/behavioral-events.js.map +1 -0
  18. package/dist/metrics/constants.js +134 -0
  19. package/dist/metrics/constants.js.map +1 -0
  20. package/dist/services/WebCallingService.js +323 -0
  21. package/dist/services/WebCallingService.js.map +1 -0
  22. package/dist/services/agent/index.js +177 -0
  23. package/dist/services/agent/index.js.map +1 -0
  24. package/dist/services/agent/types.js +137 -0
  25. package/dist/services/agent/types.js.map +1 -0
  26. package/dist/services/config/Util.js +203 -0
  27. package/dist/services/config/Util.js.map +1 -0
  28. package/dist/services/config/constants.js +221 -0
  29. package/dist/services/config/constants.js.map +1 -0
  30. package/dist/services/config/index.js +607 -0
  31. package/dist/services/config/index.js.map +1 -0
  32. package/dist/services/config/types.js +334 -0
  33. package/dist/services/config/types.js.map +1 -0
  34. package/dist/services/constants.js +117 -0
  35. package/dist/services/constants.js.map +1 -0
  36. package/dist/services/core/Err.js +43 -0
  37. package/dist/services/core/Err.js.map +1 -0
  38. package/dist/services/core/GlobalTypes.js +6 -0
  39. package/dist/services/core/GlobalTypes.js.map +1 -0
  40. package/dist/services/core/Utils.js +126 -0
  41. package/dist/services/core/Utils.js.map +1 -0
  42. package/dist/services/core/WebexRequest.js +96 -0
  43. package/dist/services/core/WebexRequest.js.map +1 -0
  44. package/dist/services/core/aqm-reqs.js +246 -0
  45. package/dist/services/core/aqm-reqs.js.map +1 -0
  46. package/dist/services/core/constants.js +109 -0
  47. package/dist/services/core/constants.js.map +1 -0
  48. package/dist/services/core/types.js +6 -0
  49. package/dist/services/core/types.js.map +1 -0
  50. package/dist/services/core/websocket/WebSocketManager.js +187 -0
  51. package/dist/services/core/websocket/WebSocketManager.js.map +1 -0
  52. package/dist/services/core/websocket/connection-service.js +111 -0
  53. package/dist/services/core/websocket/connection-service.js.map +1 -0
  54. package/dist/services/core/websocket/keepalive.worker.js +94 -0
  55. package/dist/services/core/websocket/keepalive.worker.js.map +1 -0
  56. package/dist/services/core/websocket/types.js +6 -0
  57. package/dist/services/core/websocket/types.js.map +1 -0
  58. package/dist/services/index.js +78 -0
  59. package/dist/services/index.js.map +1 -0
  60. package/dist/services/task/AutoWrapup.js +88 -0
  61. package/dist/services/task/AutoWrapup.js.map +1 -0
  62. package/dist/services/task/TaskManager.js +369 -0
  63. package/dist/services/task/TaskManager.js.map +1 -0
  64. package/dist/services/task/constants.js +58 -0
  65. package/dist/services/task/constants.js.map +1 -0
  66. package/dist/services/task/contact.js +464 -0
  67. package/dist/services/task/contact.js.map +1 -0
  68. package/dist/services/task/dialer.js +60 -0
  69. package/dist/services/task/dialer.js.map +1 -0
  70. package/dist/services/task/index.js +1188 -0
  71. package/dist/services/task/index.js.map +1 -0
  72. package/dist/services/task/types.js +214 -0
  73. package/dist/services/task/types.js.map +1 -0
  74. package/dist/types/cc.d.ts +676 -0
  75. package/dist/types/config.d.ts +66 -0
  76. package/dist/types/constants.d.ts +45 -0
  77. package/dist/types/index.d.ts +178 -0
  78. package/dist/types/logger-proxy.d.ts +71 -0
  79. package/dist/types/metrics/MetricsManager.d.ts +223 -0
  80. package/dist/types/metrics/behavioral-events.d.ts +29 -0
  81. package/dist/types/metrics/constants.d.ts +127 -0
  82. package/dist/types/services/WebCallingService.d.ts +1 -0
  83. package/dist/types/services/agent/index.d.ts +46 -0
  84. package/dist/types/services/agent/types.d.ts +413 -0
  85. package/dist/types/services/config/Util.d.ts +19 -0
  86. package/dist/types/services/config/constants.d.ts +203 -0
  87. package/dist/types/services/config/index.d.ts +171 -0
  88. package/dist/types/services/config/types.d.ts +1113 -0
  89. package/dist/types/services/constants.d.ts +97 -0
  90. package/dist/types/services/core/Err.d.ts +119 -0
  91. package/dist/types/services/core/GlobalTypes.d.ts +33 -0
  92. package/dist/types/services/core/Utils.d.ts +36 -0
  93. package/dist/types/services/core/WebexRequest.d.ts +22 -0
  94. package/dist/types/services/core/aqm-reqs.d.ts +16 -0
  95. package/dist/types/services/core/constants.d.ts +85 -0
  96. package/dist/types/services/core/types.d.ts +47 -0
  97. package/dist/types/services/core/websocket/WebSocketManager.d.ts +34 -0
  98. package/dist/types/services/core/websocket/connection-service.d.ts +27 -0
  99. package/dist/types/services/core/websocket/keepalive.worker.d.ts +2 -0
  100. package/dist/types/services/core/websocket/types.d.ts +37 -0
  101. package/dist/types/services/index.d.ts +52 -0
  102. package/dist/types/services/task/AutoWrapup.d.ts +40 -0
  103. package/dist/types/services/task/TaskManager.d.ts +1 -0
  104. package/dist/types/services/task/constants.d.ts +46 -0
  105. package/dist/types/services/task/contact.d.ts +59 -0
  106. package/dist/types/services/task/dialer.d.ts +28 -0
  107. package/dist/types/services/task/index.d.ts +569 -0
  108. package/dist/types/services/task/types.d.ts +1041 -0
  109. package/dist/types/types.d.ts +452 -0
  110. package/dist/types/webex-config.d.ts +53 -0
  111. package/dist/types/webex.d.ts +7 -0
  112. package/dist/types.js +292 -0
  113. package/dist/types.js.map +1 -0
  114. package/dist/webex-config.js +60 -0
  115. package/dist/webex-config.js.map +1 -0
  116. package/dist/webex.js +99 -0
  117. package/dist/webex.js.map +1 -0
  118. package/jest.config.js +45 -0
  119. package/package.json +83 -0
  120. package/src/cc.ts +1618 -0
  121. package/src/config.ts +65 -0
  122. package/src/constants.ts +51 -0
  123. package/src/index.ts +220 -0
  124. package/src/logger-proxy.ts +110 -0
  125. package/src/metrics/MetricsManager.ts +512 -0
  126. package/src/metrics/behavioral-events.ts +332 -0
  127. package/src/metrics/constants.ts +135 -0
  128. package/src/services/WebCallingService.ts +351 -0
  129. package/src/services/agent/index.ts +149 -0
  130. package/src/services/agent/types.ts +440 -0
  131. package/src/services/config/Util.ts +261 -0
  132. package/src/services/config/constants.ts +249 -0
  133. package/src/services/config/index.ts +743 -0
  134. package/src/services/config/types.ts +1117 -0
  135. package/src/services/constants.ts +111 -0
  136. package/src/services/core/Err.ts +126 -0
  137. package/src/services/core/GlobalTypes.ts +34 -0
  138. package/src/services/core/Utils.ts +132 -0
  139. package/src/services/core/WebexRequest.ts +103 -0
  140. package/src/services/core/aqm-reqs.ts +272 -0
  141. package/src/services/core/constants.ts +106 -0
  142. package/src/services/core/types.ts +48 -0
  143. package/src/services/core/websocket/WebSocketManager.ts +196 -0
  144. package/src/services/core/websocket/connection-service.ts +142 -0
  145. package/src/services/core/websocket/keepalive.worker.js +88 -0
  146. package/src/services/core/websocket/types.ts +40 -0
  147. package/src/services/index.ts +71 -0
  148. package/src/services/task/AutoWrapup.ts +86 -0
  149. package/src/services/task/TaskManager.ts +420 -0
  150. package/src/services/task/constants.ts +52 -0
  151. package/src/services/task/contact.ts +429 -0
  152. package/src/services/task/dialer.ts +52 -0
  153. package/src/services/task/index.ts +1375 -0
  154. package/src/services/task/types.ts +1113 -0
  155. package/src/types.ts +639 -0
  156. package/src/webex-config.ts +54 -0
  157. package/src/webex.js +96 -0
  158. package/test/unit/spec/cc.ts +1985 -0
  159. package/test/unit/spec/metrics/MetricsManager.ts +491 -0
  160. package/test/unit/spec/metrics/behavioral-events.ts +102 -0
  161. package/test/unit/spec/services/WebCallingService.ts +416 -0
  162. package/test/unit/spec/services/agent/index.ts +65 -0
  163. package/test/unit/spec/services/config/index.ts +1035 -0
  164. package/test/unit/spec/services/core/Utils.ts +279 -0
  165. package/test/unit/spec/services/core/WebexRequest.ts +144 -0
  166. package/test/unit/spec/services/core/aqm-reqs.ts +570 -0
  167. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +378 -0
  168. package/test/unit/spec/services/core/websocket/connection-service.ts +178 -0
  169. package/test/unit/spec/services/task/TaskManager.ts +1351 -0
  170. package/test/unit/spec/services/task/contact.ts +204 -0
  171. package/test/unit/spec/services/task/dialer.ts +157 -0
  172. package/test/unit/spec/services/task/index.ts +1474 -0
  173. package/tsconfig.json +6 -0
  174. package/typedoc.json +37 -0
  175. package/typedoc.md +240 -0
  176. package/umd/contact-center.min.js +3 -0
  177. package/umd/contact-center.min.js.map +1 -0
@@ -0,0 +1,204 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import {DESTINATION_TYPE} from "../../../../../src/services/task/types";
3
+ import AqmReqs from "../../../../../src/services/core/aqm-reqs";
4
+ import routingContact from "../../../../../src/services/task/contact";
5
+
6
+ jest.mock('../../../../../src/services/core/Utils', () => ({
7
+ createErrDetailsObject: jest.fn(),
8
+ getRoutingHost: jest.fn(),
9
+ }));
10
+
11
+ jest.mock('../../../../../src/services/core/aqm-reqs');
12
+
13
+ describe('AQM routing contact', () => {
14
+ let fakeAqm: jest.Mocked<AqmReqs>;
15
+ let contact: ReturnType<typeof routingContact>;
16
+
17
+ beforeEach(() => {
18
+ jest.clearAllMocks();
19
+
20
+ fakeAqm = new AqmReqs() as jest.Mocked<AqmReqs>;
21
+ fakeAqm.reqEmpty = jest.fn().mockImplementation((fn) => fn);
22
+ fakeAqm.req = jest.fn().mockImplementation((fn) => fn);
23
+
24
+ contact = routingContact(fakeAqm);
25
+ });
26
+
27
+
28
+ describe("Routing contacts", () => {
29
+ it("accept", () => {
30
+ fakeAqm.pendingRequests = {};
31
+ const req = contact.accept({
32
+ interactionId: "interactionId"
33
+ });
34
+ expect(req).toBeDefined();
35
+ });
36
+
37
+ it("hold", () => {
38
+ fakeAqm.pendingRequests = {};
39
+ const req = contact.hold({
40
+ interactionId: "interactionId",
41
+ data: {mediaResourceId: ""}
42
+ });
43
+ expect(req).toBeDefined();
44
+ });
45
+
46
+ it("unHold", () => {
47
+ fakeAqm.pendingRequests = {};
48
+ const req = contact.unHold({ interactionId: "interactionId", data: {mediaResourceId: ""}});
49
+ expect(req).toBeDefined();
50
+ });
51
+
52
+ it("pauseRecording", () => {
53
+ fakeAqm.pendingRequests = {};
54
+ const req = contact.pauseRecording({
55
+ interactionId: "interactionId"
56
+ });
57
+ expect(req).toBeDefined();
58
+ });
59
+
60
+ it("resumeRecording", () => {
61
+ fakeAqm.pendingRequests = {};
62
+ const req = contact.resumeRecording({ interactionId: "interactionId", data: { autoResumed: "true" } } as any);
63
+ expect(req).toBeDefined();
64
+ });
65
+
66
+ it("consult queue", () => {
67
+ fakeAqm.pendingRequests = {};
68
+ const req = contact.consult({
69
+ interactionId: "interactionId",
70
+ data: {
71
+ to: "queueId",
72
+ destinationType: "queue",
73
+ mediaType: "telephony"
74
+ },
75
+ url: ""
76
+ } as any);
77
+ expect(req).toBeDefined();
78
+ });
79
+
80
+ it("consult dn", () => {
81
+ fakeAqm.pendingRequests = {};
82
+ const req = contact.consult({
83
+ interactionId: "interactionId",
84
+ data: {
85
+ to: "9372724724",
86
+ destinationType: "dialNumber",
87
+ mediaType: "telephony"
88
+ },
89
+ url: ""
90
+ } as any);
91
+ expect(req).toBeDefined();
92
+ });
93
+
94
+ it("consultAccept", () => {
95
+ const req = contact.consultAccept({} as any);
96
+ expect(req).toBeDefined();
97
+ });
98
+
99
+ it("consultEnd", () => {
100
+ fakeAqm.pendingRequests = {};
101
+ const req = contact.consultEnd({
102
+ interactionId: "interactionId",
103
+ data: {
104
+ isConsult: true,
105
+ queueId: "queueId",
106
+ taskId: "taskId"
107
+ }
108
+ });
109
+ expect(req).toBeDefined();
110
+ });
111
+
112
+ it("consultEnd without QueueId", () => {
113
+ fakeAqm.pendingRequests = {};
114
+ const req = contact.consultEnd({
115
+ interactionId: "interactionId",
116
+ data: {
117
+ isConsult: true,
118
+ taskId: "taskId"
119
+ }
120
+ });
121
+ expect(req).toBeDefined();
122
+ });
123
+
124
+ it("consultEnd without QueueId and isConsult false", () => {
125
+ fakeAqm.pendingRequests = {};
126
+ const req = contact.consultEnd({
127
+ interactionId: "interactionId",
128
+ data: {
129
+ isConsult: false,
130
+ taskId: "taskId"
131
+ }
132
+ });
133
+ expect(req).toBeDefined();
134
+ });
135
+
136
+ it("cancelCtq", () => {
137
+ const req = contact.cancelCtq({} as any);
138
+ expect(req).toBeDefined();
139
+ });
140
+
141
+ it("blindTransfer", () => {
142
+ fakeAqm.pendingRequests = {};
143
+ const req = contact.blindTransfer({
144
+ interactionId: "interactionId",
145
+ data: {
146
+ to: "agentId",
147
+ destinationType: DESTINATION_TYPE.AGENT
148
+ }
149
+ });
150
+ expect(req).toBeDefined();
151
+ });
152
+
153
+ it("vteamTransfer", () => {
154
+ fakeAqm.pendingRequests = {};
155
+ const req = contact.vteamTransfer({
156
+ interactionId: "interactionId",
157
+ data: {
158
+ to: "queueId",
159
+ destinationType: DESTINATION_TYPE.QUEUE
160
+ }
161
+ });
162
+ expect(req).toBeDefined();
163
+ });
164
+
165
+ it("consultTransfer", () => {
166
+ fakeAqm.pendingRequests = {};
167
+ const req = contact.consultTransfer({
168
+ interactionId: "interactionId",
169
+ data: {
170
+ to: 'dn',
171
+ destinationType: DESTINATION_TYPE.DIALNUMBER
172
+ }
173
+ });
174
+ expect(req).toBeDefined();
175
+ });
176
+
177
+ it("contact End", () => {
178
+ fakeAqm.pendingRequests = {};
179
+ const req = contact.end({
180
+ interactionId: "interactionId",
181
+ data: {}
182
+ } as any);
183
+ expect(req).toBeDefined();
184
+ });
185
+
186
+ it("cancel Contact", () => {
187
+ fakeAqm.pendingRequests = {};
188
+ const req = contact.cancelTask({
189
+ interactionId: "interactionId",
190
+ data: {}
191
+ } as any);
192
+ expect(req).toBeDefined();
193
+ });
194
+
195
+ it("wrapup contact", () => {
196
+ fakeAqm.pendingRequests = {};
197
+ const req = contact.wrapup({
198
+ interactionId: "interactionId",
199
+ data: { wrapUpReason: "testWrapUpReason", auxCodeId: "auxCodeID1234", isAutoWrapup: "on" }
200
+ } as any);
201
+ expect(req).toBeDefined();
202
+ });
203
+ });
204
+ })
@@ -0,0 +1,157 @@
1
+ import AqmReqs from "../../../../../src/services/core/aqm-reqs";
2
+ import aqmDialer from "../../../../../src/services/task/dialer";
3
+
4
+ jest.mock('../../../../../src/services/core/Utils', () => ({
5
+
6
+ createErrDetailsObject: jest.fn(),
7
+ getRoutingHost: jest.fn(),
8
+
9
+ }));
10
+
11
+ jest.mock('../../../../../src/services/core/aqm-reqs');
12
+
13
+ describe('AQM routing dialer', () => {
14
+
15
+ let fakeAqm: jest.Mocked<AqmReqs>;
16
+
17
+ beforeEach(() => {
18
+
19
+ jest.clearAllMocks();
20
+
21
+ fakeAqm = new AqmReqs() as jest.Mocked<AqmReqs>;
22
+ fakeAqm.reqEmpty = jest.fn().mockImplementation((fn) => fn);
23
+ fakeAqm.req = jest.fn().mockImplementation((fn) => fn);
24
+
25
+ });
26
+
27
+ describe("Routing outbound dial", () => {
28
+
29
+ it("should call the startdial api", () => {
30
+
31
+ const fakeAqm = {
32
+ req: () =>
33
+ jest.fn().mockResolvedValue(() => {
34
+ Promise.resolve({ data: "outdial success" });
35
+ }),
36
+ evt: jest.fn()
37
+ };
38
+
39
+ const dialer = aqmDialer(fakeAqm as any);
40
+
41
+ dialer
42
+ .startOutdial({
43
+ data: {
44
+ entryPointId: "1212312",
45
+ destination: "+142356",
46
+ direction: "OUTBOUND",
47
+ attributes: {},
48
+ mediaType: "telephony",
49
+ outboundType: "OUTDIAL"
50
+ }
51
+ })
52
+ .then(response => {
53
+ expect(response.data).toBe("outdial success");
54
+ })
55
+ .catch(() => {
56
+ expect(true).toBe(true);
57
+ });
58
+
59
+ expect(dialer.startOutdial).toHaveBeenCalled();
60
+
61
+ });
62
+
63
+ it("should handle network errors", () => {
64
+
65
+ const fakeAqm = {
66
+ req: () => jest.fn().mockRejectedValue(new Error("Network Error")),
67
+ evt: jest.fn()
68
+ };
69
+
70
+ const dialer = aqmDialer(fakeAqm as any);
71
+
72
+ return expect(dialer.startOutdial({
73
+
74
+ data: {
75
+ entryPointId: "1212312",
76
+ destination: "+142356",
77
+ direction: "OUTBOUND",
78
+ attributes: {},
79
+ mediaType: "telephony",
80
+ outboundType: "OUTDIAL"
81
+ }
82
+
83
+ })).rejects.toThrow("Network Error");
84
+ });
85
+
86
+ it("should handle invalid payload", () => {
87
+
88
+ const fakeAqm = {
89
+
90
+ req: () => jest.fn().mockRejectedValue(new Error("Invalid Payload in request")),
91
+ evt: jest.fn()
92
+
93
+ };
94
+
95
+ const dialer = aqmDialer(fakeAqm as any);
96
+
97
+ return expect(dialer.startOutdial({
98
+
99
+ data: {
100
+ entryPointId: "",
101
+ destination: "",
102
+ direction: "OUTBOUND",
103
+ attributes: {},
104
+ mediaType: "telephony",
105
+ outboundType: "OUTDIAL"
106
+ }
107
+
108
+ })).rejects.toThrow("Invalid Payload in request");
109
+ });
110
+
111
+
112
+ it("should handle servers errors", () => {
113
+
114
+ const fakeAqm = {
115
+ req: () => jest.fn().mockRejectedValue(new Error("Server Error")),
116
+ evt: jest.fn()
117
+ };
118
+
119
+ const dialer = aqmDialer(fakeAqm as any);
120
+ return expect(dialer.startOutdial({
121
+
122
+ data: {
123
+ entryPointId: "123456",
124
+ destination: "+142356",
125
+ direction: "OUTBOUND",
126
+ attributes: {},
127
+ mediaType: "telephony",
128
+ outboundType: "OUTDIAL"
129
+ }
130
+
131
+ })).rejects.toThrow("Server Error");
132
+
133
+ });
134
+
135
+ it("should handle Timeout scenarios", () => {
136
+
137
+ const fakeAqm = {
138
+ req: () => jest.fn().mockRejectedValue(new Error("Request Timeout")),
139
+ evt: jest.fn()
140
+ };
141
+
142
+ const dialer = aqmDialer(fakeAqm as any);
143
+ return expect(dialer.startOutdial({
144
+
145
+ data: {
146
+ entryPointId: "12345",
147
+ destination: "+123456",
148
+ direction: "OUTBOUND",
149
+ attributes: {},
150
+ mediaType: "telephony",
151
+ outboundType: "OUTDIAL"
152
+ }
153
+
154
+ })).rejects.toThrow("Request Timeout");
155
+ });
156
+ });
157
+ });