@webex/cc-store 1.28.0-ccwidgets.4 → 1.28.0-ccwidgets.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.
@@ -1,3 +1,3 @@
1
- import store from './store';
1
+ import store from './storeEventsWrapper';
2
2
  export * from './store.types';
3
3
  export default store;
@@ -1,13 +1,29 @@
1
- import { IContactCenter, Team, WithWebex, IdleCode, InitParams, IStore } from './store.types';
1
+ import { IContactCenter, Team, WithWebex, IdleCode, InitParams, IStore, ILogger, IWrapupCode, ICustomState } from './store.types';
2
+ import { ITask } from '@webex/plugin-cc';
2
3
  declare class Store implements IStore {
4
+ private static instance;
3
5
  teams: Team[];
4
6
  loginOptions: string[];
5
7
  cc: IContactCenter;
8
+ logger: ILogger;
6
9
  idleCodes: IdleCode[];
7
10
  agentId: string;
11
+ currentTheme: string;
12
+ wrapupCodes: IWrapupCode[];
13
+ incomingTask: ITask;
14
+ currentTask: ITask;
15
+ isAgentLoggedIn: boolean;
16
+ deviceType: string;
17
+ taskList: ITask[];
18
+ wrapupRequired: boolean;
19
+ currentState: string;
20
+ customState: ICustomState;
21
+ lastStateChangeTimestamp?: number;
22
+ lastIdleCodeChangeTimestamp?: number;
23
+ showMultipleLoginAlert: boolean;
8
24
  constructor();
9
- registerCC(webex: WithWebex['webex']): Promise<void>;
10
- init(options: InitParams): Promise<void>;
25
+ static getInstance(): Store;
26
+ registerCC(webex?: WithWebex['webex']): Promise<void>;
27
+ init(options: InitParams, setupEventListeners: any): Promise<void>;
11
28
  }
12
- declare const store: Store;
13
- export default store;
29
+ export default Store;
@@ -1,7 +1,16 @@
1
- import { AgentLogin, IContactCenter, Profile, Team } from '@webex/plugin-cc';
1
+ import { AgentLogin, IContactCenter, Profile, Team, LogContext, BuddyDetails, DestinationType } from '@webex/plugin-cc';
2
+ import { ITask } from '@webex/plugin-cc';
3
+ type ILogger = {
4
+ log: (message: string, context?: LogContext) => void;
5
+ info: (message: string, context?: LogContext) => void;
6
+ warn: (message: string, context?: LogContext) => void;
7
+ trace: (message: string, context?: LogContext) => void;
8
+ error: (message: string, context?: LogContext) => void;
9
+ };
2
10
  interface WithWebex {
3
11
  webex: {
4
12
  cc: IContactCenter;
13
+ logger: ILogger;
5
14
  };
6
15
  }
7
16
  interface WithWebexConfig {
@@ -21,7 +30,78 @@ interface IStore {
21
30
  cc: IContactCenter;
22
31
  idleCodes: IdleCode[];
23
32
  agentId: string;
24
- registerCC(webex: WithWebex['webex']): Promise<Profile>;
25
- init(params: InitParams): Promise<void>;
33
+ logger: ILogger;
34
+ wrapupCodes: IWrapupCode[];
35
+ currentTask: ITask;
36
+ incomingTask: ITask;
37
+ taskList: ITask[];
38
+ isAgentLoggedIn: boolean;
39
+ deviceType: string;
40
+ wrapupRequired: boolean;
41
+ currentState: string;
42
+ lastStateChangeTimestamp?: number;
43
+ lastIdleCodeChangeTimestamp?: number;
44
+ showMultipleLoginAlert: boolean;
45
+ currentTheme: string;
46
+ customState: ICustomState;
47
+ init(params: InitParams, callback: (ccSDK: IContactCenter) => void): Promise<void>;
48
+ registerCC(webex?: WithWebex['webex']): Promise<void>;
49
+ }
50
+ interface IStoreWrapper extends IStore {
51
+ store: IStore;
52
+ setCurrentTask(task: ITask): void;
53
+ setWrapupRequired(value: boolean): void;
54
+ setTaskList(taskList: ITask[]): void;
55
+ setIncomingTask(task: ITask): void;
56
+ setDeviceType(option: string): void;
57
+ setCurrentState(state: string): void;
58
+ setLastStateChangeTimestamp(timestamp: number): void;
59
+ setLastIdleCodeChangeTimestamp(timestamp: number): void;
60
+ setShowMultipleLoginAlert(value: boolean): void;
61
+ setCurrentTheme(theme: string): void;
62
+ setIsAgentLoggedIn(value: boolean): void;
63
+ setWrapupCodes(wrapupCodes: IWrapupCode[]): void;
64
+ setState(state: IdleCode | ICustomState): void;
65
+ }
66
+ interface IWrapupCode {
67
+ id: string;
68
+ name: string;
69
+ }
70
+ declare enum TASK_EVENTS {
71
+ TASK_INCOMING = "task:incoming",
72
+ TASK_ASSIGNED = "task:assigned",
73
+ TASK_MEDIA = "task:media",
74
+ TASK_HOLD = "task:hold",
75
+ TASK_UNHOLD = "task:unhold",
76
+ TASK_CONSULT = "task:consult",
77
+ TASK_CONSULT_END = "task:consultEnd",
78
+ TASK_CONSULT_ACCEPT = "task:consultAccepted",
79
+ TASK_PAUSE = "task:pause",
80
+ TASK_RESUME = "task:resume",
81
+ TASK_END = "task:end",
82
+ TASK_WRAPUP = "task:wrapup",
83
+ TASK_REJECT = "task:rejected",
84
+ TASK_HYDRATE = "task:hydrate",
85
+ AGENT_CONTACT_ASSIGNED = "AgentContactAssigned",
86
+ CONTACT_RECORDING_PAUSED = "ContactRecordingPaused",
87
+ CONTACT_RECORDING_RESUMED = "ContactRecordingResumed",
88
+ AGENT_WRAPPEDUP = "AgentWrappedUp"
89
+ }
90
+ declare enum CC_EVENTS {
91
+ AGENT_DN_REGISTERED = "AgentDNRegistered",
92
+ AGENT_LOGOUT_SUCCESS = "AgentLogoutSuccess",
93
+ AGENT_STATION_LOGIN_SUCCESS = "AgentStationLoginSuccess",
94
+ AGENT_MULTI_LOGIN = "agent:multiLogin",
95
+ AGENT_STATE_CHANGE = "agent:stateChange",
96
+ AGENT_RELOGIN_SUCCESS = "AgentReloginSuccess"
97
+ }
98
+ interface ICustomStateSet {
99
+ name: string;
100
+ developerName: string;
101
+ }
102
+ interface ICustomStateReset {
103
+ reset: boolean;
26
104
  }
27
- export type { IContactCenter, Profile, Team, AgentLogin, WithWebex, IdleCode, InitParams, IStore };
105
+ type ICustomState = ICustomStateSet | ICustomStateReset;
106
+ export type { IContactCenter, ITask, Profile, Team, AgentLogin, WithWebex, IdleCode, InitParams, IStore, ILogger, IWrapupCode, IStoreWrapper, ICustomState, DestinationType, BuddyDetails, };
107
+ export { CC_EVENTS, TASK_EVENTS };
@@ -0,0 +1,59 @@
1
+ import { IStoreWrapper, IStore, InitParams, TASK_EVENTS, CC_EVENTS, IWrapupCode, WithWebex, ICustomState, IdleCode, IContactCenter, ITask, BuddyDetails } from './store.types';
2
+ declare class StoreWrapper implements IStoreWrapper {
3
+ store: IStore;
4
+ onTaskRejected?: (reason: string) => void;
5
+ constructor();
6
+ get teams(): Team[];
7
+ get loginOptions(): string[];
8
+ get cc(): IContactCenter;
9
+ get logger(): import("./store.types").ILogger;
10
+ get idleCodes(): IdleCode[];
11
+ get agentId(): string;
12
+ get deviceType(): string;
13
+ get wrapupCodes(): IWrapupCode[];
14
+ get currentTask(): ITask;
15
+ get isAgentLoggedIn(): boolean;
16
+ get taskList(): ITask[];
17
+ get incomingTask(): ITask;
18
+ get wrapupRequired(): boolean;
19
+ get currentState(): string;
20
+ get lastStateChangeTimestamp(): number;
21
+ get lastIdleCodeChangeTimestamp(): number;
22
+ get showMultipleLoginAlert(): boolean;
23
+ get currentTheme(): string;
24
+ get customState(): ICustomState;
25
+ setCurrentTheme: (theme: string) => void;
26
+ setShowMultipleLoginAlert: (value: boolean) => void;
27
+ setDeviceType: (option: string) => void;
28
+ setCurrentState: (state: string) => void;
29
+ setLastStateChangeTimestamp: (timestamp: number) => void;
30
+ setLastIdleCodeChangeTimestamp: (timestamp: number) => void;
31
+ setIsAgentLoggedIn: (value: boolean) => void;
32
+ setWrapupRequired: (value: boolean) => void;
33
+ setCurrentTask: (task: ITask) => void;
34
+ setIncomingTask: (task: ITask) => void;
35
+ setTaskList: (taskList: ITask[]) => void;
36
+ setWrapupCodes: (wrapupCodes: IWrapupCode[]) => void;
37
+ setState: (state: ICustomState | IdleCode) => void;
38
+ setTaskRejected: (callback: ((reason: string) => void) | undefined) => void;
39
+ setCCCallback: (event: CC_EVENTS | TASK_EVENTS, callback: any) => void;
40
+ setTaskCallback: (event: TASK_EVENTS, callback: any, taskId: string) => void;
41
+ removeCCCallback: (event: CC_EVENTS) => void;
42
+ removeTaskCallback: (event: TASK_EVENTS, callback: any, taskId: string) => void;
43
+ init(options: InitParams): Promise<void>;
44
+ registerCC: (webex?: WithWebex["webex"]) => Promise<void>;
45
+ handleTaskRemove: (event: any) => void;
46
+ handleTaskEnd: (event: any, wrapupRequired: any) => void;
47
+ handleTaskAssigned: (event: any) => void;
48
+ handleTaskWrapUp: (event: any) => void;
49
+ handleIncomingTask: (event: any) => void;
50
+ handleStateChange: (data: any) => void;
51
+ handleMultiLoginCloseSession: (data: any) => void;
52
+ handleTaskHydrate: (event: any) => void;
53
+ handleTaskReject: (taskId: string, reason: string) => void;
54
+ getBuddyAgents: () => Promise<Array<BuddyDetails>>;
55
+ cleanUpStore: () => void;
56
+ setupIncomingTaskHandler: (ccSDK: IContactCenter) => void;
57
+ }
58
+ declare const storeWrapper: StoreWrapper;
59
+ export default storeWrapper;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@webex/cc-store",
3
3
  "description": "Webex Contact Center Widgets: Widgets Store",
4
- "version": "1.28.0-ccwidgets.4",
4
+ "version": "1.28.0-ccwidgets.40",
5
5
  "main": "dist/index.js",
6
6
  "license": "MIT",
7
7
  "publishConfig": {
@@ -12,23 +12,25 @@
12
12
  "package.json"
13
13
  ],
14
14
  "scripts": {
15
+ "clean": "rm -rf dist && rm -rf node_modules",
16
+ "clean:dist": "rm -rf dist",
15
17
  "build": "yarn run -T tsc",
16
- "build:src": "webpack && yarn run build",
18
+ "build:src": "yarn run clean:dist && webpack",
17
19
  "build:watch": "webpack --watch",
18
- "test:unit": "jest"
20
+ "test:unit": "jest --coverage",
21
+ "test:styles": "eslint"
19
22
  },
20
23
  "dependencies": {
21
24
  "mobx": "6.13.5",
22
- "react": "18.3.1",
23
- "react-dom": "18.3.1",
24
25
  "typescript": "5.6.3",
25
- "webex": "3.6.0-wxcc.5"
26
+ "webex": "3.8.0-next.31"
26
27
  },
27
28
  "devDependencies": {
28
29
  "@babel/core": "7.25.2",
29
30
  "@babel/preset-env": "7.25.4",
30
31
  "@babel/preset-react": "7.24.7",
31
32
  "@babel/preset-typescript": "7.25.9",
33
+ "@eslint/js": "^9.20.0",
32
34
  "@testing-library/dom": "10.4.0",
33
35
  "@testing-library/jest-dom": "6.6.2",
34
36
  "@testing-library/react": "16.0.1",
@@ -36,10 +38,21 @@
36
38
  "@types/react-test-renderer": "18",
37
39
  "babel-jest": "29.7.0",
38
40
  "babel-loader": "9.2.1",
41
+ "eslint": "^9.20.1",
42
+ "eslint-config-prettier": "^10.0.1",
43
+ "eslint-config-standard": "^17.1.0",
44
+ "eslint-plugin-import": "^2.25.2",
45
+ "eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
46
+ "eslint-plugin-prettier": "^5.2.3",
47
+ "eslint-plugin-promise": "^6.0.0",
48
+ "eslint-plugin-react": "^7.37.4",
39
49
  "file-loader": "6.2.0",
50
+ "globals": "^16.0.0",
40
51
  "jest": "29.7.0",
41
52
  "jest-environment-jsdom": "29.7.0",
53
+ "prettier": "^3.5.1",
42
54
  "ts-loader": "9.5.1",
55
+ "typescript-eslint": "^8.24.1",
43
56
  "webpack": "5.94.0",
44
57
  "webpack-cli": "5.1.4",
45
58
  "webpack-merge": "6.0.1"
@@ -50,6 +63,5 @@
50
63
  "**/tests/**/*.ts",
51
64
  "**/tests/**/*.tsx"
52
65
  ]
53
- },
54
- "stableVersion": "1.28.0-ccwidgets.3"
66
+ }
55
67
  }
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,oDAA4B;AAC5B,gDAA8B;AAC9B,kBAAe,eAAK,CAAC"}
package/dist/store.js DELETED
@@ -1,58 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const mobx_1 = require("mobx");
7
- const webex_1 = __importDefault(require("webex"));
8
- class Store {
9
- constructor() {
10
- this.teams = [];
11
- this.loginOptions = [];
12
- this.idleCodes = [];
13
- this.agentId = '';
14
- (0, mobx_1.makeAutoObservable)(this, { cc: mobx_1.observable.ref });
15
- }
16
- registerCC(webex) {
17
- this.cc = webex.cc;
18
- return this.cc.register().then((response) => {
19
- this.teams = response.teams;
20
- this.loginOptions = response.loginVoiceOptions;
21
- this.idleCodes = response.idleCodes;
22
- this.agentId = response.agentId;
23
- }).catch((error) => {
24
- console.error('Error registering contact center', error);
25
- return Promise.reject(error);
26
- });
27
- }
28
- init(options) {
29
- if ('webex' in options) {
30
- // If devs decide to go with webex, they will have to listen to the ready event before calling init
31
- // This has to be documented
32
- return this.registerCC(options.webex);
33
- }
34
- return new Promise((resolve, reject) => {
35
- const timer = setTimeout(() => {
36
- reject(new Error('Webex SDK failed to initialize'));
37
- }, 6000);
38
- const webex = webex_1.default.init({
39
- config: options.webexConfig,
40
- credentials: {
41
- access_token: options.access_token
42
- }
43
- });
44
- webex.once('ready', () => {
45
- clearTimeout(timer);
46
- this.registerCC(webex).then(() => {
47
- resolve();
48
- })
49
- .catch((error) => {
50
- reject(error);
51
- });
52
- });
53
- });
54
- }
55
- }
56
- const store = new Store();
57
- exports.default = store;
58
- //# sourceMappingURL=store.js.map
package/dist/store.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":";;;;;AAAA,+BAAoD;AACpD,kDAA0B;AAW1B,MAAM,KAAK;IAOT;QANA,UAAK,GAAW,EAAE,CAAC;QACnB,iBAAY,GAAa,EAAE,CAAC;QAE5B,cAAS,GAAe,EAAE,CAAC;QAC3B,YAAO,GAAW,EAAE,CAAC;QAGnB,IAAA,yBAAkB,EAAC,IAAI,EAAE,EAAC,EAAE,EAAE,iBAAU,CAAC,GAAG,EAAC,CAAC,CAAC;IACjD,CAAC;IAED,UAAU,CAAC,KAAyB;QAClC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,QAAiB,EAAE,EAAE;YACnD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,iBAAiB,CAAC;YAC/C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YACpC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAClC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YACzD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAmB;QACtB,IAAG,OAAO,IAAI,OAAO,EAAE,CAAC;YACtB,mGAAmG;YACnG,6BAA6B;YAC7B,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAErC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;YACtD,CAAC,EAAE,IAAI,CAAC,CAAC;YAET,MAAM,KAAK,GAAG,eAAK,CAAC,IAAI,CAAC;gBACvB,MAAM,EAAE,OAAO,CAAC,WAAW;gBAC3B,WAAW,EAAE;oBACX,YAAY,EAAE,OAAO,CAAC,YAAY;iBACnC;aACF,CAAC,CAAC;YAEH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC/B,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBACf,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAC1B,kBAAe,KAAK,CAAC"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=store.types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.types.js","sourceRoot":"","sources":["../src/store.types.ts"],"names":[],"mappings":""}