@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,78 +0,0 @@
|
|
1
|
-
import { AgentxServices, SERVICE } from "@wxcc-desktop/sdk-types";
|
2
|
-
import { ConfigJsApi, createConfigJsApi } from "./config-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
|
-
} as AgentxServices
|
12
|
-
};
|
13
|
-
return agentx_services_mock;
|
14
|
-
});
|
15
|
-
|
16
|
-
describe("Config JSAPI", () => {
|
17
|
-
let config: ConfigJsApi;
|
18
|
-
|
19
|
-
beforeEach(() => {
|
20
|
-
config = createConfigJsApi(SERVICE);
|
21
|
-
|
22
|
-
// deferred service mock init
|
23
|
-
setTimeout(() => (SERVICE as AgentxServices).init("fake-token"));
|
24
|
-
});
|
25
|
-
|
26
|
-
it("creates", () => {
|
27
|
-
expect(config).toBeDefined();
|
28
|
-
expect(config["logger"]).toBeDefined();
|
29
|
-
});
|
30
|
-
|
31
|
-
it("inits", async () => {
|
32
|
-
let isInited = false;
|
33
|
-
const listener = () => {
|
34
|
-
isInited = true;
|
35
|
-
config.removeEventListener("inited", listener);
|
36
|
-
};
|
37
|
-
config.addEventListener("inited", listener);
|
38
|
-
|
39
|
-
await config.init();
|
40
|
-
|
41
|
-
expect(isInited).toBeTruthy();
|
42
|
-
});
|
43
|
-
|
44
|
-
it("cleanups", async () => {
|
45
|
-
await config.init();
|
46
|
-
|
47
|
-
let isCleaned = false;
|
48
|
-
const listener = () => {
|
49
|
-
isCleaned = true;
|
50
|
-
config.removeEventListener("cleaned", listener);
|
51
|
-
};
|
52
|
-
config.addEventListener("cleaned", listener);
|
53
|
-
|
54
|
-
config.cleanup();
|
55
|
-
|
56
|
-
expect(isCleaned).toBeTruthy();
|
57
|
-
});
|
58
|
-
|
59
|
-
it("gets client locale", async () => {
|
60
|
-
const windowNavigatorLanguagesMock = jest.spyOn(window.navigator, "language", "get");
|
61
|
-
windowNavigatorLanguagesMock.mockReturnValue("en-US");
|
62
|
-
|
63
|
-
expect(config.clientLocale).toBe("en-US");
|
64
|
-
});
|
65
|
-
|
66
|
-
it("waits", async () => {
|
67
|
-
let waiter = false;
|
68
|
-
const waitCb = () => {
|
69
|
-
return waiter;
|
70
|
-
};
|
71
|
-
|
72
|
-
setTimeout(() => (waiter = true));
|
73
|
-
|
74
|
-
await config["waitUntil"](() => waitCb());
|
75
|
-
|
76
|
-
expect(waiter).toBeTruthy();
|
77
|
-
});
|
78
|
-
});
|
@@ -1,106 +0,0 @@
|
|
1
|
-
import { AgentxService } from "@wxcc-desktop/sdk-types";
|
2
|
-
import EventEmitter from "event-emitter";
|
3
|
-
import { logger } from "../sdk";
|
4
|
-
import { createJsApiLogger } from "./common/_logger";
|
5
|
-
|
6
|
-
const SERVICE_INITED_CHECK_TIMEOUT = 1000 / 30;
|
7
|
-
|
8
|
-
type Listeners = {
|
9
|
-
//
|
10
|
-
inited: () => void; // Fires after Desktop.config.init(...)
|
11
|
-
cleaned: () => void; // Fires after Desktop.config.cleanup(...)
|
12
|
-
};
|
13
|
-
type Events = keyof Listeners;
|
14
|
-
|
15
|
-
export class ConfigJsApi {
|
16
|
-
private readonly emitter = EventEmitter();
|
17
|
-
|
18
|
-
private readonly logger: ReturnType<typeof createJsApiLogger>;
|
19
|
-
|
20
|
-
private agentxSERVICE?: AgentxService;
|
21
|
-
|
22
|
-
private async waitUntil(cb: () => boolean) {
|
23
|
-
if (typeof cb === "function") {
|
24
|
-
/// Delay
|
25
|
-
await new Promise(resolve => setTimeout(resolve, SERVICE_INITED_CHECK_TIMEOUT));
|
26
|
-
|
27
|
-
// Check
|
28
|
-
const res = cb();
|
29
|
-
// Iterate
|
30
|
-
!res && (await this.waitUntil(cb));
|
31
|
-
}
|
32
|
-
}
|
33
|
-
|
34
|
-
constructor(config: { logger: ReturnType<typeof createJsApiLogger>; SERVICE: AgentxService }) {
|
35
|
-
this.logger = config.logger;
|
36
|
-
this.agentxSERVICE = config.SERVICE;
|
37
|
-
}
|
38
|
-
|
39
|
-
private async checkService(SERVICE: AgentxService) {
|
40
|
-
if (SERVICE) {
|
41
|
-
if (!SERVICE.isInited) {
|
42
|
-
this.logger.warn("SERVICE is not inited. Awaiting it's initAgentxServices(...)...");
|
43
|
-
|
44
|
-
// Awaiting service becomes inited
|
45
|
-
await this.waitUntil(() => SERVICE!.isInited);
|
46
|
-
}
|
47
|
-
|
48
|
-
this.logger.info("SERVICE is inited. Continuing...");
|
49
|
-
|
50
|
-
// Notify all => config ready
|
51
|
-
this.emit("inited");
|
52
|
-
//
|
53
|
-
} else {
|
54
|
-
this.logger.error("SERVICE is not defiend...");
|
55
|
-
}
|
56
|
-
}
|
57
|
-
|
58
|
-
private emit<T extends Events>(eventName: T, ...args: Parameters<Listeners[T]>) {
|
59
|
-
this.emitter.emit(eventName, ...args);
|
60
|
-
}
|
61
|
-
|
62
|
-
async init() {
|
63
|
-
/**
|
64
|
-
* WARNING! Temporary injecting SERVICE into constructor via global object
|
65
|
-
*/
|
66
|
-
if (this.agentxSERVICE) {
|
67
|
-
await this.checkService(this.agentxSERVICE);
|
68
|
-
} else {
|
69
|
-
this.logger.error("SERVICE is not defined...");
|
70
|
-
}
|
71
|
-
}
|
72
|
-
|
73
|
-
cleanup() {
|
74
|
-
this.agentxSERVICE = undefined;
|
75
|
-
|
76
|
-
// Notify all => config cleaned
|
77
|
-
this.emit("cleaned");
|
78
|
-
|
79
|
-
this.logger.info(`Cleaned`);
|
80
|
-
}
|
81
|
-
|
82
|
-
get clientLocale() {
|
83
|
-
if (window.navigator.languages != undefined) {
|
84
|
-
return window.navigator.languages[0];
|
85
|
-
}
|
86
|
-
return window.navigator.language;
|
87
|
-
}
|
88
|
-
|
89
|
-
// Events
|
90
|
-
addEventListener<T extends Events>(eventName: T, listener: Listeners[T]) {
|
91
|
-
this.emitter.on(eventName, listener);
|
92
|
-
}
|
93
|
-
|
94
|
-
removeEventListener<T extends Events>(eventName: T, listener: Listeners[T]) {
|
95
|
-
this.emitter.off(eventName, listener);
|
96
|
-
}
|
97
|
-
}
|
98
|
-
|
99
|
-
const configJsApiLogger = createJsApiLogger(logger, "[Config JSAPI] =>");
|
100
|
-
|
101
|
-
// Standalone init
|
102
|
-
export const createConfigJsApi = (SERVICE: AgentxService) =>
|
103
|
-
new ConfigJsApi({
|
104
|
-
logger: configJsApiLogger,
|
105
|
-
SERVICE
|
106
|
-
});
|
@@ -1,101 +0,0 @@
|
|
1
|
-
import { AgentxServices, SERVICE } from "@wxcc-desktop/sdk-types";
|
2
|
-
import { createDialerJsApi } from "./dialer-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
|
-
dialer: {
|
13
|
-
startOutdial: jest.fn().mockImplementation(async p => p),
|
14
|
-
updateCadVariables: jest.fn().mockImplementation(async p => p),
|
15
|
-
eOutdialFailed: {
|
16
|
-
listen: jest.fn(),
|
17
|
-
listenOnce: jest.fn()
|
18
|
-
}
|
19
|
-
}
|
20
|
-
} as unknown) as AgentxServices["aqm"]
|
21
|
-
} as AgentxServices
|
22
|
-
};
|
23
|
-
return agentx_services_mock;
|
24
|
-
});
|
25
|
-
|
26
|
-
describe("Dialer JSAPI", () => {
|
27
|
-
let dialer: ReturnType<typeof createDialerJsApi>;
|
28
|
-
|
29
|
-
beforeEach(() => {
|
30
|
-
(SERVICE as AgentxServices).init("fake-token");
|
31
|
-
|
32
|
-
dialer = createDialerJsApi();
|
33
|
-
|
34
|
-
dialer.init(SERVICE);
|
35
|
-
});
|
36
|
-
|
37
|
-
it("creates", () => {
|
38
|
-
expect(dialer).toBeDefined();
|
39
|
-
expect(dialer["logger"]).toBeDefined();
|
40
|
-
expect(dialer["serviceChecker"]).toBeDefined();
|
41
|
-
expect(dialer["aqmEvents"]).toBeDefined();
|
42
|
-
});
|
43
|
-
|
44
|
-
it("inits", () => {
|
45
|
-
expect(dialer["checkService"]()).toBeTruthy();
|
46
|
-
expect(dialer["aqmEvents"].isInited).toBeTruthy();
|
47
|
-
});
|
48
|
-
|
49
|
-
it("checks service", () => {
|
50
|
-
dialer["serviceChecker"].check = jest.fn();
|
51
|
-
dialer["checkService"]();
|
52
|
-
|
53
|
-
expect(dialer["serviceChecker"].check).toHaveBeenCalled();
|
54
|
-
});
|
55
|
-
|
56
|
-
it("calls", async () => {
|
57
|
-
const r = { test: "TEST" } as any;
|
58
|
-
|
59
|
-
{
|
60
|
-
const p = await dialer.startOutdial(r);
|
61
|
-
expect(SERVICE.aqm.dialer.startOutdial).toHaveBeenCalledWith(r);
|
62
|
-
expect(p).toEqual(r);
|
63
|
-
}
|
64
|
-
|
65
|
-
{
|
66
|
-
const p = await dialer.updateCadVariables(r);
|
67
|
-
expect(SERVICE.aqm.dialer.updateCadVariables).toHaveBeenCalledWith(r);
|
68
|
-
expect(p).toEqual(r);
|
69
|
-
}
|
70
|
-
});
|
71
|
-
|
72
|
-
it("listens", () => {
|
73
|
-
const listener = () => {};
|
74
|
-
dialer.addEventListener("eOutdialFailed", listener);
|
75
|
-
expect(dialer["aqmEvents"]["listeners"].size).toBe(1);
|
76
|
-
expect(SERVICE.aqm.dialer.eOutdialFailed.listen).toHaveBeenCalledWith(listener);
|
77
|
-
dialer.removeEventListener("eOutdialFailed", listener);
|
78
|
-
expect(dialer["aqmEvents"]["listeners"].size).toBe(0);
|
79
|
-
});
|
80
|
-
|
81
|
-
it("listensOnce", () => {
|
82
|
-
const listener = () => {};
|
83
|
-
dialer.addOnceEventListener("eOutdialFailed", listener);
|
84
|
-
expect(dialer["aqmEvents"]["listenersOnce"].size).toBe(1);
|
85
|
-
expect(SERVICE.aqm.dialer.eOutdialFailed.listenOnce).toHaveBeenCalledWith(listener);
|
86
|
-
dialer.removeOnceEventListener("eOutdialFailed", listener);
|
87
|
-
expect(dialer["aqmEvents"]["listenersOnce"].size).toBe(0);
|
88
|
-
});
|
89
|
-
|
90
|
-
it("removesAllListeners", () => {
|
91
|
-
const listener1 = () => {};
|
92
|
-
const listener2 = () => {};
|
93
|
-
dialer.addEventListener("eOutdialFailed", listener1);
|
94
|
-
dialer.addOnceEventListener("eOutdialFailed", listener2);
|
95
|
-
expect(dialer["aqmEvents"]["listeners"].size).toBe(1);
|
96
|
-
expect(dialer["aqmEvents"]["listenersOnce"].size).toBe(1);
|
97
|
-
dialer.removeAllEventListeners();
|
98
|
-
expect(dialer["aqmEvents"]["listeners"].size).toBe(0);
|
99
|
-
expect(dialer["aqmEvents"]["listenersOnce"].size).toBe(0);
|
100
|
-
});
|
101
|
-
});
|
@@ -1,116 +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
|
-
eOutdialFailed: Parameters<AgentxService["aqm"]["dialer"]["eOutdialFailed"]["listen"]>[0];
|
9
|
-
};
|
10
|
-
|
11
|
-
type AqmDialerEvents = AqmServiceEntityEvents<Listeners>;
|
12
|
-
|
13
|
-
type Config = {
|
14
|
-
logger: ReturnType<typeof createJsApiLogger>;
|
15
|
-
serviceChecker: ReturnType<typeof createServiceChecker>;
|
16
|
-
aqmEvents: AqmDialerEvents;
|
17
|
-
};
|
18
|
-
|
19
|
-
export class DialerJsApi {
|
20
|
-
private readonly logger: Config["logger"];
|
21
|
-
private readonly serviceChecker: Config["serviceChecker"];
|
22
|
-
private readonly aqmEvents: Config["aqmEvents"];
|
23
|
-
|
24
|
-
private SERVICE?: AgentxService;
|
25
|
-
|
26
|
-
private checkService() {
|
27
|
-
return this.serviceChecker.check(this.SERVICE);
|
28
|
-
}
|
29
|
-
|
30
|
-
constructor(config: Config) {
|
31
|
-
this.logger = config.logger;
|
32
|
-
this.aqmEvents = config.aqmEvents;
|
33
|
-
this.serviceChecker = config.serviceChecker;
|
34
|
-
}
|
35
|
-
|
36
|
-
//
|
37
|
-
init(SERVICE?: AgentxService) {
|
38
|
-
if (SERVICE) {
|
39
|
-
this.SERVICE = SERVICE;
|
40
|
-
}
|
41
|
-
|
42
|
-
if (!this.checkService()) {
|
43
|
-
return;
|
44
|
-
}
|
45
|
-
|
46
|
-
this.aqmEvents.init({
|
47
|
-
aqmServiceEntity: this.SERVICE!.aqm.dialer,
|
48
|
-
aqmServiceEntityString: "SERVICE.aqm.dialer"
|
49
|
-
});
|
50
|
-
|
51
|
-
this.logger.info("Inited");
|
52
|
-
}
|
53
|
-
|
54
|
-
cleanup() {
|
55
|
-
this.aqmEvents.cleanup();
|
56
|
-
|
57
|
-
this.SERVICE = undefined;
|
58
|
-
|
59
|
-
this.logger.info("Cleaned");
|
60
|
-
}
|
61
|
-
|
62
|
-
// data calls
|
63
|
-
async startOutdial(p: { data: Service.Aqm.Dialer.tasks }) {
|
64
|
-
if (!this.checkService()) {
|
65
|
-
return;
|
66
|
-
}
|
67
|
-
return this.SERVICE?.aqm.dialer.startOutdial(p);
|
68
|
-
}
|
69
|
-
|
70
|
-
async updateCadVariables(p: { interactionId: string; data: Service.Aqm.Dialer.updateCadPayLoad }) {
|
71
|
-
if (!this.checkService()) {
|
72
|
-
return;
|
73
|
-
}
|
74
|
-
return this.SERVICE?.aqm.dialer.updateCadVariables(p);
|
75
|
-
}
|
76
|
-
|
77
|
-
// data events
|
78
|
-
addEventListener<T extends keyof Listeners>(eventName: T, listener: Listeners[T]) {
|
79
|
-
if (!this.checkService()) {
|
80
|
-
return;
|
81
|
-
}
|
82
|
-
this.aqmEvents.addEventListener(eventName, listener);
|
83
|
-
}
|
84
|
-
|
85
|
-
addOnceEventListener<T extends keyof Listeners>(eventName: T, listener: Listeners[T]) {
|
86
|
-
if (!this.checkService()) {
|
87
|
-
return;
|
88
|
-
}
|
89
|
-
this.aqmEvents.addOnceEventListener(eventName, listener);
|
90
|
-
}
|
91
|
-
|
92
|
-
removeEventListener<T extends keyof Listeners>(eventName: T, listener: Listeners[T]) {
|
93
|
-
this.aqmEvents.removeEventListener(eventName, listener);
|
94
|
-
}
|
95
|
-
|
96
|
-
removeOnceEventListener<T extends keyof Listeners>(eventName: T, listener: Listeners[T]) {
|
97
|
-
this.aqmEvents.removeOnceEventListener(eventName, listener);
|
98
|
-
}
|
99
|
-
|
100
|
-
removeAllEventListeners() {
|
101
|
-
this.aqmEvents.removeAllEventListeners();
|
102
|
-
}
|
103
|
-
}
|
104
|
-
|
105
|
-
const dialerJsApiLogger = createJsApiLogger(logger, "[Dialer JSAPI] =>");
|
106
|
-
const aqmServiceDialerJsApiLogger = createJsApiLogger(dialerJsApiLogger, "[AqmServiceEvents: Dialer] =>");
|
107
|
-
|
108
|
-
// Standalone init
|
109
|
-
export const createDialerJsApi = () =>
|
110
|
-
new DialerJsApi({
|
111
|
-
logger: dialerJsApiLogger,
|
112
|
-
aqmEvents: createServiceEvents<Listeners>({
|
113
|
-
logger: aqmServiceDialerJsApiLogger
|
114
|
-
}),
|
115
|
-
serviceChecker: createServiceChecker({ logger: dialerJsApiLogger })
|
116
|
-
});
|
@@ -1,62 +0,0 @@
|
|
1
|
-
import { AgentxServices, SERVICE } from "@wxcc-desktop/sdk-types";
|
2
|
-
import { createI18NJsApi } from "./i18n-jsapi";
|
3
|
-
|
4
|
-
jest.mock("@wxcc-desktop/sdk-types", () => {
|
5
|
-
const agentx_services_mock = {
|
6
|
-
SERVICE: {
|
7
|
-
isInited: true,
|
8
|
-
i18n: ({
|
9
|
-
DEFAULT_INIT_OPTIONS: {
|
10
|
-
TEST: true
|
11
|
-
}
|
12
|
-
} as unknown) as AgentxServices["i18n"]
|
13
|
-
} as AgentxServices
|
14
|
-
};
|
15
|
-
return agentx_services_mock;
|
16
|
-
});
|
17
|
-
|
18
|
-
describe("I18n", () => {
|
19
|
-
let i18n: ReturnType<typeof createI18NJsApi>;
|
20
|
-
beforeEach(() => {
|
21
|
-
i18n = createI18NJsApi();
|
22
|
-
i18n.init(SERVICE);
|
23
|
-
});
|
24
|
-
|
25
|
-
it("creates", () => {
|
26
|
-
expect(i18n).toBeDefined();
|
27
|
-
expect(i18n["logger"]).toBeDefined();
|
28
|
-
expect(i18n["serviceChecker"]).toBeDefined();
|
29
|
-
});
|
30
|
-
|
31
|
-
it("inits", () => {
|
32
|
-
expect(i18n["checkService"]()).toBeTruthy();
|
33
|
-
});
|
34
|
-
|
35
|
-
it("checks service", () => {
|
36
|
-
i18n["serviceChecker"].check = jest.fn();
|
37
|
-
i18n["checkService"]();
|
38
|
-
|
39
|
-
expect(i18n["serviceChecker"].check).toHaveBeenCalled();
|
40
|
-
});
|
41
|
-
|
42
|
-
it("creates i18next instance", () => {
|
43
|
-
const i18next = i18n.createInstance();
|
44
|
-
|
45
|
-
expect(i18next).toBeDefined();
|
46
|
-
});
|
47
|
-
|
48
|
-
it("creates mixin instance", () => {
|
49
|
-
const i18next = i18n.createInstance();
|
50
|
-
const i18nMixin = i18n.createMixin({ i18n: i18next });
|
51
|
-
|
52
|
-
expect(i18nMixin).toBeDefined();
|
53
|
-
});
|
54
|
-
|
55
|
-
it("gets default options", () => {
|
56
|
-
expect(i18n.DEFAULT_INIT_OPTIONS).toEqual({ TEST: true });
|
57
|
-
});
|
58
|
-
|
59
|
-
it("merges init options", () => {
|
60
|
-
expect(i18n.getMergedInitOptions({ debug: true }, { lng: "en-US" })).toEqual({ debug: true, lng: "en-US" });
|
61
|
-
});
|
62
|
-
});
|
package/src/jsapi/i18n-jsapi.ts
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
import { I18N } from "@uuip/unified-ui-platform-sdk";
|
2
|
-
import { AgentxService } from "@wxcc-desktop/sdk-types";
|
3
|
-
import { logger } from "../sdk";
|
4
|
-
import { createJsApiLogger } from "./common/_logger";
|
5
|
-
import { createServiceChecker } from "./common/_service-checker";
|
6
|
-
|
7
|
-
type Config = {
|
8
|
-
logger: ReturnType<typeof createJsApiLogger>;
|
9
|
-
serviceChecker: ReturnType<typeof createServiceChecker>;
|
10
|
-
};
|
11
|
-
|
12
|
-
export class I18NJsApi {
|
13
|
-
private readonly logger: Config["logger"];
|
14
|
-
|
15
|
-
private readonly serviceChecker: Config["serviceChecker"];
|
16
|
-
|
17
|
-
private SERVICE?: AgentxService;
|
18
|
-
|
19
|
-
private checkService() {
|
20
|
-
return this.serviceChecker.check(this.SERVICE);
|
21
|
-
}
|
22
|
-
|
23
|
-
constructor(config: Config) {
|
24
|
-
this.logger = config.logger;
|
25
|
-
this.serviceChecker = config.serviceChecker;
|
26
|
-
}
|
27
|
-
|
28
|
-
init(SERVICE?: AgentxService) {
|
29
|
-
if (SERVICE) {
|
30
|
-
this.SERVICE = SERVICE;
|
31
|
-
}
|
32
|
-
|
33
|
-
if (!this.checkService()) {
|
34
|
-
return;
|
35
|
-
}
|
36
|
-
|
37
|
-
this.logger.info("Inited");
|
38
|
-
}
|
39
|
-
|
40
|
-
cleanup() {
|
41
|
-
this.SERVICE = undefined;
|
42
|
-
|
43
|
-
this.logger.info("Cleaned");
|
44
|
-
}
|
45
|
-
|
46
|
-
// i18next instance
|
47
|
-
createInstance(createServiceOptions?: I18N.CreateServiceOptions) {
|
48
|
-
return I18N.createService(createServiceOptions);
|
49
|
-
}
|
50
|
-
|
51
|
-
// i18next instance powered LitElement mixin
|
52
|
-
createMixin(createMixinOptions: I18N.CreateMixinOptions) {
|
53
|
-
return I18N.createMixin(createMixinOptions);
|
54
|
-
}
|
55
|
-
|
56
|
-
get DEFAULT_INIT_OPTIONS() {
|
57
|
-
if (!this.checkService()) {
|
58
|
-
return;
|
59
|
-
}
|
60
|
-
return this.SERVICE?.i18n.DEFAULT_INIT_OPTIONS;
|
61
|
-
}
|
62
|
-
|
63
|
-
getMergedInitOptions(...initOptions: I18N.InitOptions[]) {
|
64
|
-
return I18N.mergeServiceInitOptions(...initOptions);
|
65
|
-
}
|
66
|
-
}
|
67
|
-
|
68
|
-
const i18nJsApiLogger = createJsApiLogger(logger, "[I18N JSAPI] =>");
|
69
|
-
|
70
|
-
// Standalone init
|
71
|
-
export const createI18NJsApi = () =>
|
72
|
-
new I18NJsApi({
|
73
|
-
// LOGGER
|
74
|
-
logger: i18nJsApiLogger,
|
75
|
-
// CHECK
|
76
|
-
serviceChecker: createServiceChecker({ logger: i18nJsApiLogger })
|
77
|
-
});
|
@@ -1,45 +0,0 @@
|
|
1
|
-
import { Logger } from "@uuip/unified-ui-platform-sdk";
|
2
|
-
import { createLoggerJsApi, LoggerJsApi } from "./logger-jsapi";
|
3
|
-
|
4
|
-
describe("Logger JSAPI", () => {
|
5
|
-
let logger: LoggerJsApi;
|
6
|
-
|
7
|
-
beforeEach(() => {
|
8
|
-
logger = createLoggerJsApi();
|
9
|
-
});
|
10
|
-
|
11
|
-
it("creates", () => {
|
12
|
-
expect(logger).toBeDefined();
|
13
|
-
expect(logger["logger"]).toBeDefined();
|
14
|
-
});
|
15
|
-
|
16
|
-
it("createLogger", () => {
|
17
|
-
const clientLogger = logger.createLogger("TEST1");
|
18
|
-
|
19
|
-
expect(clientLogger.prefix).toBe("TEST1");
|
20
|
-
});
|
21
|
-
|
22
|
-
it("get logs", () => {
|
23
|
-
const clientLogger = logger.createLogger("TEST2");
|
24
|
-
|
25
|
-
clientLogger.info("ttt");
|
26
|
-
|
27
|
-
expect(logger.getLogsCollection("TEST2")?.length).toBe(1);
|
28
|
-
expect(logger.getLogsJsonUrl("TEST2")).toContain("data:text/plain;charset=utf-8,");
|
29
|
-
expect(logger.getLogsTextUrl("TEST2")).toContain("data:text/plain;charset=utf-8,");
|
30
|
-
});
|
31
|
-
|
32
|
-
it("browser downloads", () => {
|
33
|
-
const clientLogger = logger.createLogger("TEST3");
|
34
|
-
|
35
|
-
clientLogger.info("bbb");
|
36
|
-
|
37
|
-
const Logger_POOL_browserDownloadPrefixedLogsJson = jest.spyOn(Logger.POOL, "browserDownloadPrefixedLogsJson");
|
38
|
-
logger.browserDownloadLogsJson("TEST3");
|
39
|
-
expect(Logger_POOL_browserDownloadPrefixedLogsJson).toHaveBeenCalledWith("TEST3");
|
40
|
-
|
41
|
-
const Logger_POOL_browserDownloadPrefixedLogsText = jest.spyOn(Logger.POOL, "browserDownloadPrefixedLogsText");
|
42
|
-
logger.browserDownloadLogsText("TEST3");
|
43
|
-
expect(Logger_POOL_browserDownloadPrefixedLogsText).toHaveBeenCalledWith("TEST3");
|
44
|
-
});
|
45
|
-
});
|
@@ -1,62 +0,0 @@
|
|
1
|
-
import { createLogger, Logger } from "@uuip/unified-ui-platform-sdk";
|
2
|
-
import { logger } from "../sdk";
|
3
|
-
import { createJsApiLogger } from "./common/_logger";
|
4
|
-
|
5
|
-
type Config = { logger: ReturnType<typeof createJsApiLogger> };
|
6
|
-
|
7
|
-
export class LoggerJsApi {
|
8
|
-
private readonly logger: Config["logger"];
|
9
|
-
private readonly clientLoggers: Map<string, Logger.Service> = new Map<string, Logger.Service>();
|
10
|
-
|
11
|
-
constructor(config: Config) {
|
12
|
-
this.logger = config.logger;
|
13
|
-
}
|
14
|
-
|
15
|
-
createLogger(prefix: string) {
|
16
|
-
const clientLogger = createLogger(prefix);
|
17
|
-
this.clientLoggers.set(prefix, clientLogger);
|
18
|
-
this.logger.info(`Client logger created: "${prefix}"`);
|
19
|
-
return clientLogger;
|
20
|
-
}
|
21
|
-
|
22
|
-
cleanupLogs(prefix: string) {
|
23
|
-
if (this.clientLoggers.has(prefix)) {
|
24
|
-
Logger.POOL.cleanupPrefixedLogs(prefix);
|
25
|
-
}
|
26
|
-
}
|
27
|
-
|
28
|
-
browserDownloadLogsJson(prefix: string) {
|
29
|
-
if (this.clientLoggers.has(prefix)) {
|
30
|
-
Logger.POOL.browserDownloadPrefixedLogsJson(prefix);
|
31
|
-
}
|
32
|
-
}
|
33
|
-
|
34
|
-
browserDownloadLogsText(prefix: string) {
|
35
|
-
if (this.clientLoggers.has(prefix)) {
|
36
|
-
Logger.POOL.browserDownloadPrefixedLogsText(prefix);
|
37
|
-
}
|
38
|
-
}
|
39
|
-
|
40
|
-
getLogsCollection(prefix: string) {
|
41
|
-
if (this.clientLoggers.has(prefix)) {
|
42
|
-
return Logger.POOL.getPrefixedLogsCollection(prefix);
|
43
|
-
}
|
44
|
-
}
|
45
|
-
|
46
|
-
getLogsJsonUrl(prefix: string) {
|
47
|
-
if (this.clientLoggers.has(prefix)) {
|
48
|
-
return Logger.POOL.getPrefixedLogsJsonUrl(prefix);
|
49
|
-
}
|
50
|
-
}
|
51
|
-
|
52
|
-
getLogsTextUrl(prefix: string) {
|
53
|
-
if (this.clientLoggers.has(prefix)) {
|
54
|
-
return Logger.POOL.getPrefixedLogsTextUrl(prefix);
|
55
|
-
}
|
56
|
-
}
|
57
|
-
}
|
58
|
-
|
59
|
-
const loggerJsApiLogger = createJsApiLogger(logger, "[Logger JSAPI] =>");
|
60
|
-
|
61
|
-
// Standalone init
|
62
|
-
export const createLoggerJsApi = () => new LoggerJsApi({ logger: loggerJsApiLogger });
|