@wxcc-desktop/sdk 1.2.6 → 1.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -391
- package/dist/index.js +1 -0
- package/dist/types/index.d.ts +21 -0
- package/dist/types/jsapi/actions-jsapi.d.ts +33 -0
- package/dist/types/jsapi/agent-contact-jsapi.d.ts +430 -0
- package/dist/types/jsapi/agent-state-info-jsapi.d.ts +88 -0
- package/dist/types/jsapi/common/_logger.d.ts +4 -0
- package/dist/types/jsapi/common/_service-checker.d.ts +12 -0
- package/dist/types/jsapi/common/_service-events.d.ts +31 -0
- package/dist/types/jsapi/config-jsapi.d.ts +26 -0
- package/dist/types/jsapi/dialer-jsapi.d.ts +73 -0
- package/dist/types/jsapi/i18n-jsapi.d.ts +23 -0
- package/dist/types/jsapi/logger-jsapi.d.ts +19 -0
- package/dist/types/jsapi/screenpop-jsapi.d.ts +29 -0
- package/dist/types/jsapi/shortcut-key-jsapi.d.ts +67 -0
- package/dist/types/sdk.d.ts +1 -0
- package/package.json +5 -60
- package/.eslintignore +0 -5
- package/.eslintrc.js +0 -22
- package/.prettierignore +0 -5
- package/.prettierrc +0 -5
- package/README_PUBLISH.md +0 -36
- package/jenkins-automation/MergePipeline.groovy +0 -143
- package/jest.config.js +0 -15
- package/sonar-project.properties +0 -17
- package/src/[sandbox]/README.md +0 -55
- package/src/[sandbox]/assets/i18n/de/app.json +0 -6
- package/src/[sandbox]/assets/i18n/en/app.json +0 -6
- package/src/[sandbox]/assets/i18n/widget-using-js-api/de/widget-using-js-api.json +0 -5
- package/src/[sandbox]/assets/i18n/widget-using-js-api/en/widget-using-js-api.json +0 -5
- package/src/[sandbox]/favicon.ico +0 -0
- package/src/[sandbox]/index.html +0 -9
- package/src/[sandbox]/sandbox-config.ts +0 -23
- package/src/[sandbox]/sandbox-mock.ts +0 -218
- package/src/[sandbox]/sandbox.ts +0 -164
- package/src/[sandbox]/widget-using-js-api.ts +0 -658
- package/src/global.d.ts +0 -5
- package/src/index.ts +0 -101
- package/src/jsapi/actions-jsapi.test.ts +0 -155
- package/src/jsapi/actions-jsapi.ts +0 -410
- package/src/jsapi/agent-contact-jsapi.test.ts +0 -217
- package/src/jsapi/agent-contact-jsapi.ts +0 -275
- package/src/jsapi/agent-state-info-jsapi.test.ts +0 -176
- package/src/jsapi/agent-state-info-jsapi.ts +0 -288
- package/src/jsapi/common/_logger.test.ts +0 -16
- package/src/jsapi/common/_logger.ts +0 -9
- package/src/jsapi/common/_service-checker.test.ts +0 -44
- package/src/jsapi/common/_service-checker.ts +0 -28
- package/src/jsapi/common/_service-events.test.ts +0 -122
- package/src/jsapi/common/_service-events.ts +0 -156
- package/src/jsapi/config-jsapi.test.ts +0 -78
- package/src/jsapi/config-jsapi.ts +0 -106
- package/src/jsapi/dialer-jsapi.test.ts +0 -101
- package/src/jsapi/dialer-jsapi.ts +0 -116
- package/src/jsapi/i18n-jsapi.test.ts +0 -62
- package/src/jsapi/i18n-jsapi.ts +0 -77
- package/src/jsapi/logger-jsapi.test.ts +0 -45
- package/src/jsapi/logger-jsapi.ts +0 -62
- package/src/jsapi/screenpop-jsapi.test.ts +0 -80
- package/src/jsapi/screenpop-jsapi.ts +0 -100
- package/src/jsapi/shortcut-key-jsapi.test.ts +0 -88
- package/src/jsapi/shortcut-key-jsapi.ts +0 -112
- package/src/sdk.ts +0 -3
- package/src/tsconfig.json +0 -18
- package/tsconfig.json +0 -13
- package/webpack.config.dev.server.ts +0 -12
- package/webpack.config.ts +0 -134
@@ -1,217 +0,0 @@
|
|
1
|
-
import { AgentxServices, SERVICE } from "@wxcc-desktop/sdk-types";
|
2
|
-
import { createAgentContactJsApi } from "./agent-contact-jsapi";
|
3
|
-
|
4
|
-
jest.mock("@wxcc-desktop/sdk-types", () => {
|
5
|
-
const agentx_services_mock = {
|
6
|
-
SERVICE: {
|
7
|
-
isInited: false,
|
8
|
-
init: async (accessToken: string) => {
|
9
|
-
agentx_services_mock.SERVICE.isInited = true;
|
10
|
-
},
|
11
|
-
aqm: ({
|
12
|
-
contact: {
|
13
|
-
accept: jest.fn().mockImplementation(async p => p),
|
14
|
-
consultAccept: jest.fn().mockImplementation(async p => p),
|
15
|
-
buddyAgents: jest.fn().mockImplementation(async p => p),
|
16
|
-
end: jest.fn().mockImplementation(async p => p),
|
17
|
-
consultEnd: jest.fn().mockImplementation(async p => p),
|
18
|
-
cancelCtq: jest.fn().mockImplementation(async p => p),
|
19
|
-
wrapup: jest.fn().mockImplementation(async p => p),
|
20
|
-
vteamTransfer: jest.fn().mockImplementation(async p => p),
|
21
|
-
blindTransfer: jest.fn().mockImplementation(async p => p),
|
22
|
-
hold: jest.fn().mockImplementation(async p => p),
|
23
|
-
unHold: jest.fn().mockImplementation(async p => p),
|
24
|
-
consult: jest.fn().mockImplementation(async p => p),
|
25
|
-
consultConference: jest.fn().mockImplementation(async p => p),
|
26
|
-
decline: jest.fn().mockImplementation(async p => p),
|
27
|
-
consultTransfer: jest.fn().mockImplementation(async p => p),
|
28
|
-
vteamList: jest.fn().mockImplementation(async p => p),
|
29
|
-
pauseRecording: jest.fn().mockImplementation(async p => p),
|
30
|
-
resumeRecording: jest.fn().mockImplementation(async p => p),
|
31
|
-
//
|
32
|
-
eAgentContact: { listen: jest.fn(), listenOnce: jest.fn() }
|
33
|
-
}
|
34
|
-
} as unknown) as AgentxServices["aqm"]
|
35
|
-
} as AgentxServices
|
36
|
-
};
|
37
|
-
return agentx_services_mock;
|
38
|
-
});
|
39
|
-
|
40
|
-
describe("Contact JSAPI", () => {
|
41
|
-
let contact: ReturnType<typeof createAgentContactJsApi>;
|
42
|
-
|
43
|
-
beforeEach(async () => {
|
44
|
-
await (SERVICE as AgentxServices).init("fake-token");
|
45
|
-
|
46
|
-
contact = createAgentContactJsApi();
|
47
|
-
|
48
|
-
contact.init(SERVICE);
|
49
|
-
});
|
50
|
-
|
51
|
-
it("creates", () => {
|
52
|
-
expect(contact).toBeDefined();
|
53
|
-
expect(contact["logger"]).toBeDefined();
|
54
|
-
expect(contact["serviceChecker"]).toBeDefined();
|
55
|
-
expect(contact["aqmEvents"]).toBeDefined();
|
56
|
-
});
|
57
|
-
|
58
|
-
it("inits", () => {
|
59
|
-
expect(contact["checkService"]()).toBeTruthy();
|
60
|
-
expect(contact["aqmEvents"].isInited).toBeTruthy();
|
61
|
-
});
|
62
|
-
|
63
|
-
it("cleanups", () => {
|
64
|
-
contact.cleanup();
|
65
|
-
|
66
|
-
expect(contact["SERVICE"]).toBeUndefined();
|
67
|
-
});
|
68
|
-
|
69
|
-
it("checks service", () => {
|
70
|
-
contact["serviceChecker"].check = jest.fn();
|
71
|
-
contact["checkService"]();
|
72
|
-
|
73
|
-
expect(contact["serviceChecker"].check).toHaveBeenCalled();
|
74
|
-
});
|
75
|
-
|
76
|
-
it("calls data", async () => {
|
77
|
-
const r: any = { test: "TEST" };
|
78
|
-
|
79
|
-
{
|
80
|
-
const p = await contact.accept(r);
|
81
|
-
expect(SERVICE.aqm.contact.accept).toHaveBeenCalledWith(r);
|
82
|
-
expect(p).toEqual(r);
|
83
|
-
}
|
84
|
-
|
85
|
-
{
|
86
|
-
const p = await contact.consultAccept(r);
|
87
|
-
expect(SERVICE.aqm.contact.consultAccept).toHaveBeenCalledWith(r);
|
88
|
-
expect(p).toEqual(r);
|
89
|
-
}
|
90
|
-
|
91
|
-
{
|
92
|
-
const p = await contact.buddyAgents(r);
|
93
|
-
expect(SERVICE.aqm.contact.buddyAgents).toHaveBeenCalledWith(r);
|
94
|
-
expect(p).toEqual(r);
|
95
|
-
}
|
96
|
-
|
97
|
-
{
|
98
|
-
const p = await contact.end(r);
|
99
|
-
expect(SERVICE.aqm.contact.end).toHaveBeenCalledWith(r);
|
100
|
-
expect(p).toEqual(r);
|
101
|
-
}
|
102
|
-
|
103
|
-
{
|
104
|
-
const p = await contact.consultEnd(r);
|
105
|
-
expect(SERVICE.aqm.contact.consultEnd).toHaveBeenCalledWith(r);
|
106
|
-
expect(p).toEqual(r);
|
107
|
-
}
|
108
|
-
|
109
|
-
{
|
110
|
-
const p = await contact.cancelCtq(r);
|
111
|
-
expect(SERVICE.aqm.contact.cancelCtq).toHaveBeenCalledWith(r);
|
112
|
-
expect(p).toEqual(r);
|
113
|
-
}
|
114
|
-
|
115
|
-
{
|
116
|
-
const p = await contact.wrapup(r);
|
117
|
-
expect(SERVICE.aqm.contact.wrapup).toHaveBeenCalledWith(r);
|
118
|
-
expect(p).toEqual(r);
|
119
|
-
}
|
120
|
-
|
121
|
-
{
|
122
|
-
const p = await contact.vteamTransfer(r);
|
123
|
-
expect(SERVICE.aqm.contact.vteamTransfer).toHaveBeenCalledWith(r);
|
124
|
-
expect(p).toEqual(r);
|
125
|
-
}
|
126
|
-
|
127
|
-
{
|
128
|
-
const p = await contact.blindTransfer(r);
|
129
|
-
expect(SERVICE.aqm.contact.blindTransfer).toHaveBeenCalledWith(r);
|
130
|
-
expect(p).toEqual(r);
|
131
|
-
}
|
132
|
-
|
133
|
-
{
|
134
|
-
const p = await contact.hold(r);
|
135
|
-
expect(SERVICE.aqm.contact.hold).toHaveBeenCalledWith(r);
|
136
|
-
expect(p).toEqual(r);
|
137
|
-
}
|
138
|
-
|
139
|
-
{
|
140
|
-
const p = await contact.unHold(r);
|
141
|
-
expect(SERVICE.aqm.contact.unHold).toHaveBeenCalledWith(r);
|
142
|
-
expect(p).toEqual(r);
|
143
|
-
}
|
144
|
-
|
145
|
-
{
|
146
|
-
const p = await contact.consult(r);
|
147
|
-
expect(SERVICE.aqm.contact.consult).toHaveBeenCalledWith(r);
|
148
|
-
expect(p).toEqual(r);
|
149
|
-
}
|
150
|
-
|
151
|
-
{
|
152
|
-
const p = await contact.consultConference(r);
|
153
|
-
expect(SERVICE.aqm.contact.consultConference).toHaveBeenCalledWith(r);
|
154
|
-
expect(p).toEqual(r);
|
155
|
-
}
|
156
|
-
|
157
|
-
{
|
158
|
-
const p = await contact.decline(r);
|
159
|
-
expect(SERVICE.aqm.contact.decline).toHaveBeenCalledWith(r);
|
160
|
-
expect(p).toEqual(r);
|
161
|
-
}
|
162
|
-
|
163
|
-
{
|
164
|
-
const p = await contact.consultTransfer(r);
|
165
|
-
expect(SERVICE.aqm.contact.consultTransfer).toHaveBeenCalledWith(r);
|
166
|
-
expect(p).toEqual(r);
|
167
|
-
}
|
168
|
-
|
169
|
-
{
|
170
|
-
const p = await contact.vteamList(r);
|
171
|
-
expect(SERVICE.aqm.contact.vteamList).toHaveBeenCalledWith(r);
|
172
|
-
expect(p).toEqual(r);
|
173
|
-
}
|
174
|
-
|
175
|
-
{
|
176
|
-
const p = await contact.pauseRecording(r);
|
177
|
-
expect(SERVICE.aqm.contact.pauseRecording).toHaveBeenCalledWith(r);
|
178
|
-
expect(p).toEqual(r);
|
179
|
-
}
|
180
|
-
|
181
|
-
{
|
182
|
-
const p = await contact.resumeRecording(r);
|
183
|
-
expect(SERVICE.aqm.contact.resumeRecording).toHaveBeenCalledWith(r);
|
184
|
-
expect(p).toEqual(r);
|
185
|
-
}
|
186
|
-
});
|
187
|
-
|
188
|
-
it("listens", () => {
|
189
|
-
const listener = () => {};
|
190
|
-
contact.addEventListener("eAgentContact", listener);
|
191
|
-
expect(contact["aqmEvents"]["listeners"].size).toBe(1);
|
192
|
-
expect(SERVICE.aqm.contact.eAgentContact.listen).toHaveBeenCalledWith(listener);
|
193
|
-
contact.removeEventListener("eAgentContact", listener);
|
194
|
-
expect(contact["aqmEvents"]["listeners"].size).toBe(0);
|
195
|
-
});
|
196
|
-
|
197
|
-
it("listensOnce", () => {
|
198
|
-
const listener = () => {};
|
199
|
-
contact.addOnceEventListener("eAgentContact", listener);
|
200
|
-
expect(contact["aqmEvents"]["listenersOnce"].size).toBe(1);
|
201
|
-
expect(SERVICE.aqm.contact.eAgentContact.listenOnce).toHaveBeenCalledWith(listener);
|
202
|
-
contact.removeOnceEventListener("eAgentContact", listener);
|
203
|
-
expect(contact["aqmEvents"]["listenersOnce"].size).toBe(0);
|
204
|
-
});
|
205
|
-
|
206
|
-
it("removesAllListeners", () => {
|
207
|
-
const listener1 = () => {};
|
208
|
-
const listener2 = () => {};
|
209
|
-
contact.addEventListener("eAgentContact", listener1);
|
210
|
-
contact.addOnceEventListener("eAgentContact", listener2);
|
211
|
-
expect(contact["aqmEvents"]["listeners"].size).toBe(1);
|
212
|
-
expect(contact["aqmEvents"]["listenersOnce"].size).toBe(1);
|
213
|
-
contact.removeAllEventListeners();
|
214
|
-
expect(contact["aqmEvents"]["listeners"].size).toBe(0);
|
215
|
-
expect(contact["aqmEvents"]["listenersOnce"].size).toBe(0);
|
216
|
-
});
|
217
|
-
});
|
@@ -1,275 +0,0 @@
|
|
1
|
-
import { AgentxService, Service } from "@wxcc-desktop/sdk-types";
|
2
|
-
import { logger } from "../sdk";
|
3
|
-
import { createJsApiLogger } from "./common/_logger";
|
4
|
-
import { createServiceChecker } from "./common/_service-checker";
|
5
|
-
import { AqmServiceEntityEvents, createServiceEvents } from "./common/_service-events";
|
6
|
-
|
7
|
-
type Listeners = {
|
8
|
-
eAgentContact: Parameters<AgentxService["aqm"]["contact"]["eAgentContact"]["listen"]>[0];
|
9
|
-
eAgentContactAssigned: Parameters<AgentxService["aqm"]["contact"]["eAgentContactAssigned"]["listen"]>[0];
|
10
|
-
eAgentContactEnded: Parameters<AgentxService["aqm"]["contact"]["eAgentContactEnded"]["listen"]>[0];
|
11
|
-
eAgentContactWrappedUp: Parameters<AgentxService["aqm"]["contact"]["eAgentContactWrappedUp"]["listen"]>[0];
|
12
|
-
eAgentOfferContact: Parameters<AgentxService["aqm"]["contact"]["eAgentOfferContact"]["listen"]>[0];
|
13
|
-
eAgentOfferContactRona: Parameters<AgentxService["aqm"]["contact"]["eAgentOfferContactRona"]["listen"]>[0];
|
14
|
-
eAgentOfferConsult: Parameters<AgentxService["aqm"]["contact"]["eAgentOfferConsult"]["listen"]>[0];
|
15
|
-
eAgentWrapup: Parameters<AgentxService["aqm"]["contact"]["eAgentWrapup"]["listen"]>[0];
|
16
|
-
eAgentContactHeld: Parameters<AgentxService["aqm"]["contact"]["eAgentContactHeld"]["listen"]>[0];
|
17
|
-
eAgentContactUnHeld: Parameters<AgentxService["aqm"]["contact"]["eAgentContactUnHeld"]["listen"]>[0];
|
18
|
-
eCallRecordingStarted: Parameters<AgentxService["aqm"]["contact"]["eCallRecordingStarted"]["listen"]>[0];
|
19
|
-
eAgentConsultCreated: Parameters<AgentxService["aqm"]["contact"]["eAgentConsultCreated"]["listen"]>[0];
|
20
|
-
eAgentConsultConferenced: Parameters<AgentxService["aqm"]["contact"]["eAgentConsultConferenced"]["listen"]>[0];
|
21
|
-
eAgentConsultEnded: Parameters<AgentxService["aqm"]["contact"]["eAgentConsultEnded"]["listen"]>[0];
|
22
|
-
eAgentCtqCancelled: Parameters<AgentxService["aqm"]["contact"]["eAgentCtqCancelled"]["listen"]>[0];
|
23
|
-
eAgentConsulting: Parameters<AgentxService["aqm"]["contact"]["eAgentConsulting"]["listen"]>[0];
|
24
|
-
eAgentConsultFailed: Parameters<AgentxService["aqm"]["contact"]["eAgentConsultFailed"]["listen"]>[0];
|
25
|
-
eAgentConsultEndFailed: Parameters<AgentxService["aqm"]["contact"]["eAgentConsultEndFailed"]["listen"]>[0];
|
26
|
-
eAgentCtqFailed: Parameters<AgentxService["aqm"]["contact"]["eAgentCtqFailed"]["listen"]>[0];
|
27
|
-
eAgentCtqCancelFailed: Parameters<AgentxService["aqm"]["contact"]["eAgentCtqCancelFailed"]["listen"]>[0];
|
28
|
-
eAgentConsultConferenceEndFailed: Parameters<
|
29
|
-
AgentxService["aqm"]["contact"]["eAgentConsultConferenceEndFailed"]["listen"]
|
30
|
-
>[0];
|
31
|
-
};
|
32
|
-
|
33
|
-
type AqmContactEvents = AqmServiceEntityEvents<Listeners>;
|
34
|
-
|
35
|
-
type Config = {
|
36
|
-
logger: ReturnType<typeof createJsApiLogger>;
|
37
|
-
serviceChecker: ReturnType<typeof createServiceChecker>;
|
38
|
-
aqmEvents: AqmContactEvents;
|
39
|
-
};
|
40
|
-
|
41
|
-
export class AgentContactJsApi {
|
42
|
-
private readonly logger: Config["logger"];
|
43
|
-
private readonly serviceChecker: Config["serviceChecker"];
|
44
|
-
private readonly aqmEvents: Config["aqmEvents"];
|
45
|
-
|
46
|
-
private SERVICE?: AgentxService;
|
47
|
-
|
48
|
-
private checkService() {
|
49
|
-
return this.serviceChecker.check(this.SERVICE);
|
50
|
-
}
|
51
|
-
|
52
|
-
constructor(config: Config) {
|
53
|
-
this.logger = config.logger;
|
54
|
-
this.aqmEvents = config.aqmEvents;
|
55
|
-
this.serviceChecker = config.serviceChecker;
|
56
|
-
}
|
57
|
-
|
58
|
-
//
|
59
|
-
init(SERVICE?: AgentxService) {
|
60
|
-
if (SERVICE) {
|
61
|
-
this.SERVICE = SERVICE;
|
62
|
-
}
|
63
|
-
|
64
|
-
if (!this.checkService()) {
|
65
|
-
return;
|
66
|
-
}
|
67
|
-
|
68
|
-
this.aqmEvents.init({
|
69
|
-
aqmServiceEntity: this.SERVICE!.aqm.contact,
|
70
|
-
aqmServiceEntityString: "SERVICE.aqm.contact"
|
71
|
-
});
|
72
|
-
|
73
|
-
this.logger.info("Inited");
|
74
|
-
}
|
75
|
-
|
76
|
-
cleanup() {
|
77
|
-
this.aqmEvents.cleanup();
|
78
|
-
|
79
|
-
this.SERVICE = undefined;
|
80
|
-
|
81
|
-
this.logger.info("Cleaned");
|
82
|
-
}
|
83
|
-
|
84
|
-
// data calls
|
85
|
-
async accept(p: { interactionId: string }) {
|
86
|
-
if (!this.checkService()) {
|
87
|
-
return;
|
88
|
-
}
|
89
|
-
return this.SERVICE?.aqm.contact.accept(p);
|
90
|
-
}
|
91
|
-
|
92
|
-
async consultAccept(p: { interactionId: string }) {
|
93
|
-
if (!this.checkService()) {
|
94
|
-
return;
|
95
|
-
}
|
96
|
-
return this.SERVICE?.aqm.contact.consultAccept(p);
|
97
|
-
}
|
98
|
-
|
99
|
-
async buddyAgents(p: { data: Service.Aqm.Contact.BuddyAgents }) {
|
100
|
-
if (!this.checkService()) {
|
101
|
-
return;
|
102
|
-
}
|
103
|
-
return this.SERVICE?.aqm.contact.buddyAgents(p);
|
104
|
-
}
|
105
|
-
|
106
|
-
async end(p: { interactionId: string }) {
|
107
|
-
if (!this.checkService()) {
|
108
|
-
return;
|
109
|
-
}
|
110
|
-
return this.SERVICE?.aqm.contact.end(p);
|
111
|
-
}
|
112
|
-
|
113
|
-
async consultEnd(p: { interactionId: string; isConsult: boolean }) {
|
114
|
-
if (!this.checkService()) {
|
115
|
-
return;
|
116
|
-
}
|
117
|
-
return this.SERVICE?.aqm.contact.consultEnd(p);
|
118
|
-
}
|
119
|
-
|
120
|
-
async cancelCtq(p: { interactionId: string; data: Service.Aqm.Contact.cancelCtq }) {
|
121
|
-
if (!this.checkService()) {
|
122
|
-
return;
|
123
|
-
}
|
124
|
-
return this.SERVICE?.aqm.contact.cancelCtq(p);
|
125
|
-
}
|
126
|
-
|
127
|
-
async wrapup(p: { interactionId: string; data: Service.Aqm.Contact.WrapupPayLoad }) {
|
128
|
-
if (!this.checkService()) {
|
129
|
-
return;
|
130
|
-
}
|
131
|
-
return this.SERVICE?.aqm.contact.wrapup(p);
|
132
|
-
}
|
133
|
-
|
134
|
-
async vteamTransfer(p: { interactionId: string; data: Service.Aqm.Contact.vteamTransferPayLoad }) {
|
135
|
-
if (!this.checkService()) {
|
136
|
-
return;
|
137
|
-
}
|
138
|
-
return this.SERVICE?.aqm.contact.vteamTransfer(p);
|
139
|
-
}
|
140
|
-
|
141
|
-
async blindTransfer(p: { interactionId: string; data: Service.Aqm.Contact.blindTransferPayLoad }) {
|
142
|
-
if (!this.checkService()) {
|
143
|
-
return;
|
144
|
-
}
|
145
|
-
return this.SERVICE?.aqm.contact.blindTransfer(p);
|
146
|
-
}
|
147
|
-
|
148
|
-
async hold(p: {
|
149
|
-
interactionId: string;
|
150
|
-
data: {
|
151
|
-
mediaResourceId: string;
|
152
|
-
};
|
153
|
-
}) {
|
154
|
-
if (!this.checkService()) {
|
155
|
-
return;
|
156
|
-
}
|
157
|
-
return this.SERVICE?.aqm.contact.hold(p);
|
158
|
-
}
|
159
|
-
|
160
|
-
async unHold(p: {
|
161
|
-
interactionId: string;
|
162
|
-
data: {
|
163
|
-
mediaResourceId: string;
|
164
|
-
};
|
165
|
-
}) {
|
166
|
-
if (!this.checkService()) {
|
167
|
-
return;
|
168
|
-
}
|
169
|
-
return this.SERVICE?.aqm.contact.unHold(p);
|
170
|
-
}
|
171
|
-
|
172
|
-
async consult(p: {
|
173
|
-
interactionId: string;
|
174
|
-
data:
|
175
|
-
| Service.Aqm.Contact.ConsultPayload
|
176
|
-
| Service.Aqm.Contact.ConsultDN
|
177
|
-
| Service.Aqm.Contact.ConsultAgent
|
178
|
-
| Service.Aqm.Contact.ConsultQueue;
|
179
|
-
url: string;
|
180
|
-
}) {
|
181
|
-
if (!this.checkService()) {
|
182
|
-
return;
|
183
|
-
}
|
184
|
-
return this.SERVICE?.aqm.contact.consult(p);
|
185
|
-
}
|
186
|
-
|
187
|
-
async consultConference(p: { interactionId: string; data: Service.Aqm.Contact.ConsultPayload }) {
|
188
|
-
if (!this.checkService()) {
|
189
|
-
return;
|
190
|
-
}
|
191
|
-
return this.SERVICE?.aqm.contact.consultConference(p);
|
192
|
-
}
|
193
|
-
|
194
|
-
async decline(p: {
|
195
|
-
interactionId: string;
|
196
|
-
data: {
|
197
|
-
mediaResourceId: string;
|
198
|
-
};
|
199
|
-
isConsult: boolean;
|
200
|
-
}) {
|
201
|
-
if (!this.checkService()) {
|
202
|
-
return;
|
203
|
-
}
|
204
|
-
return this.SERVICE?.aqm.contact.decline(p);
|
205
|
-
}
|
206
|
-
|
207
|
-
async consultTransfer(p: { interactionId: string; data: Service.Aqm.Contact.consultTransferPayLoad }) {
|
208
|
-
if (!this.checkService()) {
|
209
|
-
return;
|
210
|
-
}
|
211
|
-
return this.SERVICE?.aqm.contact.consultTransfer(p);
|
212
|
-
}
|
213
|
-
|
214
|
-
async vteamList(p: { data: Service.Aqm.Contact.VTeam }) {
|
215
|
-
if (!this.checkService()) {
|
216
|
-
return;
|
217
|
-
}
|
218
|
-
return this.SERVICE?.aqm.contact.vteamList(p);
|
219
|
-
}
|
220
|
-
|
221
|
-
async pauseRecording(p: { interactionId: string }) {
|
222
|
-
if (!this.checkService()) {
|
223
|
-
return;
|
224
|
-
}
|
225
|
-
return this.SERVICE?.aqm.contact.pauseRecording(p);
|
226
|
-
}
|
227
|
-
|
228
|
-
async resumeRecording(p: { interactionId: string; data: { autoResumed: boolean } }) {
|
229
|
-
if (!this.checkService()) {
|
230
|
-
return;
|
231
|
-
}
|
232
|
-
return this.SERVICE?.aqm.contact.resumeRecording(p);
|
233
|
-
}
|
234
|
-
|
235
|
-
// data events
|
236
|
-
addEventListener<T extends keyof Listeners>(eventName: T, listener: Listeners[T]) {
|
237
|
-
if (!this.checkService()) {
|
238
|
-
return;
|
239
|
-
}
|
240
|
-
this.aqmEvents.addEventListener(eventName, listener);
|
241
|
-
}
|
242
|
-
|
243
|
-
addOnceEventListener<T extends keyof Listeners>(eventName: T, listener: Listeners[T]) {
|
244
|
-
if (!this.checkService()) {
|
245
|
-
return;
|
246
|
-
}
|
247
|
-
this.aqmEvents.addOnceEventListener(eventName, listener);
|
248
|
-
}
|
249
|
-
|
250
|
-
removeEventListener<T extends keyof Listeners>(eventName: T, listener: Listeners[T]) {
|
251
|
-
this.aqmEvents.removeEventListener(eventName, listener);
|
252
|
-
}
|
253
|
-
|
254
|
-
removeOnceEventListener<T extends keyof Listeners>(eventName: T, listener: Listeners[T]) {
|
255
|
-
this.aqmEvents.removeOnceEventListener(eventName, listener);
|
256
|
-
}
|
257
|
-
|
258
|
-
removeAllEventListeners() {
|
259
|
-
this.aqmEvents.removeAllEventListeners();
|
260
|
-
}
|
261
|
-
}
|
262
|
-
|
263
|
-
const agentContactJsApiLogger = createJsApiLogger(logger, "[AgentContact JSAPI] =>");
|
264
|
-
const aqmServiceAgentContactJsApiLogger = createJsApiLogger(agentContactJsApiLogger, "[AqmServiceEvents: Contact] => ");
|
265
|
-
|
266
|
-
// Standalone init
|
267
|
-
export const createAgentContactJsApi = () =>
|
268
|
-
new AgentContactJsApi({
|
269
|
-
// LOGGER
|
270
|
-
logger: agentContactJsApiLogger,
|
271
|
-
// CHECK
|
272
|
-
serviceChecker: createServiceChecker({ logger: agentContactJsApiLogger }),
|
273
|
-
// EVENTS
|
274
|
-
aqmEvents: createServiceEvents<Listeners>({ logger: aqmServiceAgentContactJsApiLogger })
|
275
|
-
});
|
@@ -1,176 +0,0 @@
|
|
1
|
-
import { AgentxServices, SERVICE } from "@wxcc-desktop/sdk-types";
|
2
|
-
import { AgentStateInfoJsapi, createAgentStateInfoJsApi } from "./agent-state-info-jsapi";
|
3
|
-
|
4
|
-
jest.mock("@wxcc-desktop/sdk-types", () => {
|
5
|
-
const agentx_services_mock = {
|
6
|
-
SERVICE: {
|
7
|
-
isInited: false,
|
8
|
-
init: async (accessToken: string) => {
|
9
|
-
agentx_services_mock.SERVICE.isInited = true;
|
10
|
-
},
|
11
|
-
conf: ({
|
12
|
-
fetchProfile: jest.fn()
|
13
|
-
} as unknown) as AgentxServices["conf"],
|
14
|
-
aqm: ({
|
15
|
-
agent: {
|
16
|
-
updated: jest.fn(),
|
17
|
-
stateChange: jest.fn(),
|
18
|
-
mockOutdialAniList: jest.fn(),
|
19
|
-
fetchAddressBooks: jest.fn(),
|
20
|
-
//
|
21
|
-
eAgentReloginSuccess: {
|
22
|
-
listen: jest.fn(),
|
23
|
-
listenOnce: jest.fn()
|
24
|
-
},
|
25
|
-
eAgentStationLoginSuccess: {
|
26
|
-
listen: jest.fn(),
|
27
|
-
listenOnce: jest.fn()
|
28
|
-
},
|
29
|
-
eAgentStateChangeSuccess: {
|
30
|
-
listen: jest.fn(),
|
31
|
-
listenOnce: jest.fn()
|
32
|
-
},
|
33
|
-
eAgentDNRegistered: {
|
34
|
-
listen: jest.fn(),
|
35
|
-
listenOnce: jest.fn()
|
36
|
-
}
|
37
|
-
}
|
38
|
-
} as unknown) as AgentxServices["aqm"]
|
39
|
-
} as AgentxServices
|
40
|
-
};
|
41
|
-
return agentx_services_mock;
|
42
|
-
});
|
43
|
-
|
44
|
-
describe("StateInfo JSAPI", () => {
|
45
|
-
let stateInfo: ReturnType<typeof createAgentStateInfoJsApi>;
|
46
|
-
|
47
|
-
beforeEach(async () => {
|
48
|
-
await (SERVICE as AgentxServices).init("fake-token");
|
49
|
-
|
50
|
-
stateInfo = createAgentStateInfoJsApi();
|
51
|
-
|
52
|
-
await stateInfo.init(SERVICE);
|
53
|
-
});
|
54
|
-
|
55
|
-
it("creates", () => {
|
56
|
-
expect(stateInfo).toBeDefined();
|
57
|
-
expect(stateInfo["logger"]).toBeDefined();
|
58
|
-
expect(stateInfo["serviceChecker"]).toBeDefined();
|
59
|
-
});
|
60
|
-
|
61
|
-
it("inits", () => {
|
62
|
-
expect(stateInfo["checkService"]()).toBeTruthy();
|
63
|
-
expect(stateInfo["listeners"].size).toBe(4);
|
64
|
-
expect(SERVICE.aqm.agent.eAgentReloginSuccess.listen).toHaveBeenCalled();
|
65
|
-
expect(SERVICE.aqm.agent.eAgentStationLoginSuccess.listen).toHaveBeenCalled();
|
66
|
-
expect(SERVICE.aqm.agent.eAgentStateChangeSuccess.listen).toHaveBeenCalled();
|
67
|
-
expect(SERVICE.aqm.agent.eAgentDNRegistered.listen).toHaveBeenCalled();
|
68
|
-
expect(SERVICE.conf.fetchProfile).toHaveBeenCalled();
|
69
|
-
});
|
70
|
-
|
71
|
-
it("cleanups", () => {
|
72
|
-
stateInfo["update"] = jest.fn();
|
73
|
-
stateInfo["unsubscribeSelfDataEvents"] = jest.fn();
|
74
|
-
stateInfo["removeAllEventListeners"] = jest.fn();
|
75
|
-
|
76
|
-
stateInfo.cleanup();
|
77
|
-
|
78
|
-
expect(stateInfo["SERVICE"]).toBeUndefined();
|
79
|
-
|
80
|
-
expect(stateInfo["update"]).toHaveBeenCalled();
|
81
|
-
expect(stateInfo["unsubscribeSelfDataEvents"]).toHaveBeenCalled();
|
82
|
-
expect(stateInfo["removeAllEventListeners"]).toHaveBeenCalled();
|
83
|
-
});
|
84
|
-
|
85
|
-
it("checks service", () => {
|
86
|
-
stateInfo["serviceChecker"].check = jest.fn();
|
87
|
-
stateInfo["checkService"]();
|
88
|
-
|
89
|
-
expect(stateInfo["serviceChecker"].check).toHaveBeenCalled();
|
90
|
-
});
|
91
|
-
|
92
|
-
it("calls data", () => {
|
93
|
-
stateInfo.stateChange({ test: "A" } as any);
|
94
|
-
expect(SERVICE.aqm.agent.stateChange).toHaveBeenCalledWith({ data: { test: "A" } });
|
95
|
-
|
96
|
-
stateInfo.mockOutdialAniList();
|
97
|
-
expect(SERVICE.aqm.agent.mockOutdialAniList).toHaveBeenCalled();
|
98
|
-
|
99
|
-
stateInfo.fetchAddressBooks();
|
100
|
-
expect(SERVICE.aqm.agent.fetchAddressBooks).toHaveBeenCalled();
|
101
|
-
});
|
102
|
-
|
103
|
-
it("listens", () => {
|
104
|
-
stateInfo["emitter"].on = jest.fn();
|
105
|
-
stateInfo["emitter"].off = jest.fn();
|
106
|
-
|
107
|
-
const listener = () => {};
|
108
|
-
|
109
|
-
stateInfo.addEventListener("updated", listener);
|
110
|
-
expect(stateInfo["emitter"].on).toHaveBeenCalledWith("updated", listener);
|
111
|
-
|
112
|
-
stateInfo.removeEventListener("updated", listener);
|
113
|
-
expect(stateInfo["emitter"].off).toHaveBeenCalledWith("updated", listener);
|
114
|
-
});
|
115
|
-
|
116
|
-
it("updates", () => {
|
117
|
-
stateInfo["emit"] = jest.fn();
|
118
|
-
|
119
|
-
stateInfo["update"]({ status: "test" });
|
120
|
-
|
121
|
-
expect(stateInfo["emit"]).toHaveBeenCalledWith("updated", [
|
122
|
-
{
|
123
|
-
name: "status",
|
124
|
-
oldValue: undefined,
|
125
|
-
value: "test"
|
126
|
-
}
|
127
|
-
]);
|
128
|
-
});
|
129
|
-
|
130
|
-
it("emits", () => {
|
131
|
-
stateInfo["emitter"].emit = jest.fn();
|
132
|
-
|
133
|
-
stateInfo["emit"]("updated", { test: "A" } as any);
|
134
|
-
|
135
|
-
expect(stateInfo["emitter"].emit).toHaveBeenCalledWith("updated", { test: "A" });
|
136
|
-
});
|
137
|
-
|
138
|
-
it("finds outdial regexp", () => {
|
139
|
-
expect(
|
140
|
-
AgentStateInfoJsapi["getOutdialRegex"]({
|
141
|
-
type: "adhocDial",
|
142
|
-
dialPlanEntity: [{ regex: "test", prefix: "pfx", strippedChars: "st", name: "Any Format" }]
|
143
|
-
})
|
144
|
-
).toBe("test");
|
145
|
-
|
146
|
-
expect(
|
147
|
-
AgentStateInfoJsapi["getOutdialRegex"]({
|
148
|
-
type: "adhocDial",
|
149
|
-
dialPlanEntity: [{ regex: "test", prefix: "pfx", strippedChars: "st", name: "" }]
|
150
|
-
})
|
151
|
-
).toBe("");
|
152
|
-
});
|
153
|
-
|
154
|
-
it("fetches latest data", () => {
|
155
|
-
stateInfo["fetchLatestData"]();
|
156
|
-
expect(SERVICE.conf.fetchProfile).toHaveBeenCalled();
|
157
|
-
});
|
158
|
-
|
159
|
-
it("subscribes", () => {
|
160
|
-
//stateInfo["checkService"] = jest.fn().mockImplementation(() => true);
|
161
|
-
|
162
|
-
expect(stateInfo["listeners"].size).toBe(4);
|
163
|
-
|
164
|
-
stateInfo["subscribeSelfDataEvents"]();
|
165
|
-
|
166
|
-
expect(stateInfo["listeners"].size).toBe(8);
|
167
|
-
});
|
168
|
-
|
169
|
-
it("unsubscribes", () => {
|
170
|
-
expect(stateInfo["listeners"].size).toBe(4);
|
171
|
-
|
172
|
-
stateInfo["unsubscribeSelfDataEvents"]();
|
173
|
-
|
174
|
-
expect(stateInfo["listeners"].size).toBe(0);
|
175
|
-
});
|
176
|
-
});
|