@webitel/ui-sdk 24.4.19 → 24.4.21

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 (31) hide show
  1. package/dist/img/sprite/custom-chat-gateway.svg +5 -0
  2. package/dist/img/sprite/index.js +1 -0
  3. package/dist/ui-sdk.mjs +1069 -1069
  4. package/dist/ui-sdk.umd.js +9 -9
  5. package/package.json +3 -2
  6. package/src/api/clients/agents/agents.js +292 -0
  7. package/src/api/clients/buckets/buckets.js +138 -0
  8. package/src/api/clients/calendars/calendars.js +248 -0
  9. package/src/api/clients/chatGateways/chatGateways.js +309 -0
  10. package/src/api/clients/chatGateways/defaults/defaultChatGateway.js +18 -0
  11. package/src/api/clients/chatGateways/defaults/webChatGateway.js +73 -0
  12. package/src/api/clients/chatGateways/enums/WebchatAlternativeChannel.enum.js +14 -0
  13. package/src/api/clients/chatGateways/scripts/generateUri.js +9 -0
  14. package/src/api/clients/communications/communications.js +162 -0
  15. package/src/api/clients/flows/flow.js +256 -0
  16. package/src/api/clients/gateways/defaults/defaultGateway.js +9 -0
  17. package/src/api/clients/gateways/defaults/registerGateway.js +12 -0
  18. package/src/api/clients/gateways/defaults/trunkingGateway.js +16 -0
  19. package/src/api/clients/gateways/gateways.js +204 -0
  20. package/src/api/clients/index.js +27 -0
  21. package/src/api/clients/lists/blacklists.js +144 -0
  22. package/src/api/clients/media/media.js +136 -0
  23. package/src/api/clients/queues/defaults/processing.js +10 -0
  24. package/src/api/clients/queues/queues.js +275 -0
  25. package/src/api/clients/roles/roles.js +213 -0
  26. package/src/api/clients/users/__tests__/users.spec.js +200 -0
  27. package/src/api/clients/users/users.js +254 -0
  28. package/src/api/defaults/getDefaultInstance/getDefaultInstance.js +14 -0
  29. package/src/api/defaults/getDefaultOpenAPIConfig/getDefaultOpenAPIConfig.js +9 -0
  30. package/src/api/defaults/index.js +4 -0
  31. package/src/enums/ChatGatewayProvider/ChatGatewayProvider.enum.js +1 -0
@@ -0,0 +1,136 @@
1
+ import axios from 'axios';
2
+ import { MediaFileServiceApiFactory } from 'webitel-sdk';
3
+ import {
4
+ getDefaultGetListResponse,
5
+ getDefaultGetParams,
6
+ getDefaultInstance,
7
+ getDefaultOpenAPIConfig,
8
+ } from '../../defaults';
9
+ import applyTransform, {
10
+ merge,
11
+ notify,
12
+ snakeToCamel,
13
+ starToSearch,
14
+ } from '../../transformers';
15
+
16
+ const instance = getDefaultInstance();
17
+ const configuration = getDefaultOpenAPIConfig();
18
+
19
+ const mediaService = new MediaFileServiceApiFactory(configuration, '', instance);
20
+
21
+ const token = localStorage.getItem('access-token');
22
+ const baseUrl = import.meta.env.VITE_API_URL;
23
+
24
+ const getMediaList = async (params) => {
25
+ const {
26
+ page,
27
+ size,
28
+ search,
29
+ sort,
30
+ fields,
31
+ id,
32
+ } = applyTransform(params, [
33
+ merge(getDefaultGetParams()),
34
+ starToSearch('search'),
35
+ ]);
36
+
37
+ try {
38
+ const response = await mediaService.searchMediaFile(
39
+ page,
40
+ size,
41
+ search,
42
+ sort,
43
+ fields,
44
+ id,
45
+ );
46
+ const { items, next } = applyTransform(response.data, [
47
+ snakeToCamel(),
48
+ merge(getDefaultGetListResponse()),
49
+ ]);
50
+ return {
51
+ items,
52
+ next,
53
+ };
54
+ } catch (err) {
55
+ throw applyTransform(err, [
56
+
57
+ notify,
58
+ ]);
59
+ }
60
+ };
61
+
62
+ const getMedia = async ({ itemId }) => {
63
+ const url = `${baseUrl}/storage/media/${itemId}/stream?access_token=${token}`;
64
+ try {
65
+ return await instance.get(url);
66
+ } catch (err) {
67
+ throw applyTransform(err, [
68
+
69
+ notify,
70
+ ]);
71
+ }
72
+ };
73
+
74
+ export const downloadMedia = async (id) => {
75
+ const url = `${baseUrl}/storage/media/${id}/download?access_token=${token}`;
76
+ try {
77
+ return await instance.get(url);
78
+ } catch (err) {
79
+ throw applyTransform(err, [
80
+
81
+ notify,
82
+ ]);
83
+ }
84
+ };
85
+
86
+ const addMediaInstance = axios.create({
87
+ headers: {
88
+ 'content-type': 'multipart/form-data',
89
+ },
90
+ });
91
+
92
+ const addMedia = async (params) => {
93
+ const url = `${baseUrl}/storage/media?access_token=${token}`;
94
+
95
+ const formData = new FormData();
96
+ formData.append('file', params.itemInstance);
97
+ try {
98
+ const response = await addMediaInstance.post(url, formData);
99
+ applyTransform(response, [
100
+ notify(() => ({ type: 'info', text: 'Successfully added' })),
101
+ ]);
102
+ return response;
103
+ } catch (err) {
104
+ throw applyTransform(err, [
105
+
106
+ notify,
107
+ ]);
108
+ }
109
+ };
110
+
111
+ const deleteMedia = async ({ id }) => {
112
+ try {
113
+ const response = await mediaService.deleteMediaFile(id);
114
+ return applyTransform(response.data, []);
115
+ } catch (err) {
116
+ throw applyTransform(err, [
117
+
118
+ notify,
119
+ ]);
120
+ }
121
+ };
122
+
123
+ const getMediaLookup = (params) => getMediaList({
124
+ ...params,
125
+ fields: params.fields || ['id', 'name'],
126
+ });
127
+
128
+ const MediaAPI = {
129
+ getList: getMediaList,
130
+ get: getMedia,
131
+ add: addMedia,
132
+ delete: deleteMedia,
133
+ getLookup: getMediaLookup,
134
+ };
135
+
136
+ export default MediaAPI;
@@ -0,0 +1,10 @@
1
+ import deepmerge from 'deepmerge';
2
+
3
+ const processing = (processing = {}) => (deepmerge({
4
+ enabled: false,
5
+ formSchema: {},
6
+ sec: 30,
7
+ renewalSec: 15,
8
+ }, processing));
9
+
10
+ export default processing;
@@ -0,0 +1,275 @@
1
+ import { QueueServiceApiFactory } from 'webitel-sdk';
2
+ import deepCopy from 'deep-copy';
3
+ import {
4
+ getDefaultGetListResponse,
5
+ getDefaultGetParams,
6
+ getDefaultInstance,
7
+ getDefaultOpenAPIConfig,
8
+ } from '../../defaults';
9
+ import applyTransform, {
10
+ camelToSnake,
11
+ merge,
12
+ mergeEach,
13
+ notify,
14
+ sanitize,
15
+ snakeToCamel,
16
+ starToSearch,
17
+ } from '../../transformers';
18
+ import isEmpty from '../../../scripts/isEmpty';
19
+ import processing from './defaults/processing';
20
+
21
+ const instance = getDefaultInstance();
22
+ const configuration = getDefaultOpenAPIConfig();
23
+
24
+ const queueService = new QueueServiceApiFactory(configuration, '', instance);
25
+
26
+ const doNotConvertKeys = ['variables'];
27
+
28
+ const fieldsToSend = [
29
+ 'name',
30
+ 'type',
31
+ 'strategy',
32
+ 'team',
33
+ 'priority',
34
+ 'dncList',
35
+ 'schema',
36
+ 'payload',
37
+ 'taskProcessing',
38
+ 'maxOfRetry',
39
+ 'timeout',
40
+ 'secBetweenRetries',
41
+ 'variables',
42
+ 'calendar',
43
+ 'description',
44
+ 'enabled',
45
+ 'ringtone',
46
+ 'doSchema',
47
+ 'afterSchema',
48
+ 'stickyAgent',
49
+ 'grantee',
50
+ 'tags',
51
+ ];
52
+
53
+ const preRequestHandler = (item) => {
54
+ const copy = deepCopy(item);
55
+ copy.variables = copy.variables.reduce((variables, variable) => {
56
+ if (!variable.key) return variables;
57
+ return { ...variables, [variable.key]: variable.value };
58
+ }, {});
59
+ return copy;
60
+ };
61
+
62
+ const getQueuesList = async (params) => {
63
+ const defaultObject = {
64
+ type: 0,
65
+ enabled: false,
66
+ active: 0,
67
+ waiting: 0,
68
+ priority: '0',
69
+ };
70
+
71
+ const {
72
+ page,
73
+ size,
74
+ search,
75
+ sort,
76
+ fields,
77
+ id,
78
+ queueType,
79
+ team,
80
+ tags,
81
+ } = applyTransform(params, [
82
+ merge(getDefaultGetParams()),
83
+ starToSearch('search'),
84
+ ]);
85
+
86
+ try {
87
+ const response = await queueService.searchQueue(
88
+ page,
89
+ size,
90
+ search,
91
+ sort,
92
+ fields,
93
+ id,
94
+ queueType,
95
+ team,
96
+ tags,
97
+ );
98
+ const { items, next } = applyTransform(response.data, [
99
+ snakeToCamel(doNotConvertKeys),
100
+ merge(getDefaultGetListResponse()),
101
+ ]);
102
+ return {
103
+ items: applyTransform(items, [
104
+ mergeEach(defaultObject),
105
+ ]),
106
+ next,
107
+ };
108
+ } catch (err) {
109
+ throw applyTransform(err, [
110
+ notify,
111
+ ]);
112
+ }
113
+ };
114
+
115
+ const getQueue = async ({ itemId: id }) => {
116
+ const defaultObject = {
117
+ tags: [],
118
+ type: 0,
119
+ formSchema: {},
120
+ taskProcessing: {},
121
+ };
122
+ const responseHandler = (item) => {
123
+ const copy = deepCopy(item);
124
+ try {
125
+ if (copy.variables) {
126
+ copy.variables = Object.keys(copy.variables)
127
+ .map((key) => ({
128
+ key,
129
+ value: copy.variables[key],
130
+ }));
131
+ }
132
+ if (isEmpty(copy.taskProcessing)) {
133
+ copy.taskProcessing = processing({
134
+ enabled: !!copy.processing,
135
+ formSchema: copy.formSchema,
136
+ sec: copy.processingSec || 0,
137
+ renewalSec: copy.processingRenewalSec || 0,
138
+ });
139
+ }
140
+ return copy;
141
+ } catch (err) {
142
+ throw err;
143
+ }
144
+ };
145
+ try {
146
+ const response = await queueService.readQueue(id);
147
+ return applyTransform(response.data, [
148
+ snakeToCamel(doNotConvertKeys),
149
+ merge(defaultObject),
150
+ responseHandler,
151
+ ]);
152
+ } catch (err) {
153
+ throw applyTransform(err, [
154
+ notify,
155
+ ]);
156
+ }
157
+ };
158
+
159
+ const addQueue = async ({ itemInstance }) => {
160
+ const item = applyTransform(itemInstance, [
161
+ preRequestHandler,
162
+ sanitize(fieldsToSend),
163
+ camelToSnake(doNotConvertKeys),
164
+ ]);
165
+ try {
166
+ const response = await queueService.createQueue(item);
167
+ return applyTransform(response.data, [
168
+ snakeToCamel(doNotConvertKeys),
169
+ ]);
170
+ } catch (err) {
171
+ throw applyTransform(err, [
172
+ notify,
173
+ ]);
174
+ }
175
+ };
176
+
177
+ const updateQueue = async ({ itemInstance, itemId: id }) => {
178
+ const item = applyTransform(itemInstance, [
179
+ preRequestHandler,
180
+ sanitize(fieldsToSend),
181
+ camelToSnake(doNotConvertKeys),
182
+ ]);
183
+ try {
184
+ const response = await queueService.updateQueue(id, item);
185
+ return applyTransform(response.data, [
186
+ snakeToCamel(doNotConvertKeys),
187
+ ]);
188
+ } catch (err) {
189
+ throw applyTransform(err, [
190
+ notify,
191
+ ]);
192
+ }
193
+ };
194
+
195
+ const patchQueue = async ({ id, changes }) => {
196
+ const item = applyTransform(changes, [
197
+ sanitize(fieldsToSend),
198
+ camelToSnake(doNotConvertKeys),
199
+ ]);
200
+ try {
201
+ const response = await queueService.patchQueue(id, item);
202
+ return applyTransform(response.data, [
203
+ snakeToCamel(doNotConvertKeys),
204
+ ]);
205
+ } catch (err) {
206
+ throw applyTransform(err, [
207
+ notify,
208
+ ]);
209
+ }
210
+ };
211
+
212
+ const deleteQueue = async ({ id }) => {
213
+ try {
214
+ const response = await queueService.deleteQueue(id);
215
+ return applyTransform(response.data, []);
216
+ } catch (err) {
217
+ throw applyTransform(err, [
218
+ notify,
219
+ ]);
220
+ }
221
+ };
222
+
223
+ const getQueuesLookup = (params) => getQueuesList({
224
+ ...params,
225
+ fields: params.fields || ['id', 'name', 'type'],
226
+ });
227
+
228
+ const getQueuesTags = async (params) => {
229
+ const {
230
+ page,
231
+ size,
232
+ search,
233
+ sort,
234
+ fields,
235
+ } = applyTransform(params, [
236
+ merge(getDefaultGetParams()),
237
+ starToSearch(),
238
+ camelToSnake(doNotConvertKeys),
239
+ ]);
240
+ try {
241
+ const response = await queueService.searchQueueTags(
242
+ page,
243
+ size,
244
+ search,
245
+ sort,
246
+ fields,
247
+ );
248
+ const { items, next } = applyTransform(response.data, [
249
+ snakeToCamel(doNotConvertKeys),
250
+ merge(getDefaultGetListResponse()),
251
+ ]);
252
+ return {
253
+ items,
254
+ next,
255
+ };
256
+ } catch (err) {
257
+ throw applyTransform(err, [
258
+
259
+ notify,
260
+ ]);
261
+ }
262
+ };
263
+
264
+ const QueuesAPI = {
265
+ getList: getQueuesList,
266
+ get: getQueue,
267
+ add: addQueue,
268
+ patch: patchQueue,
269
+ update: updateQueue,
270
+ delete: deleteQueue,
271
+ getLookup: getQueuesLookup,
272
+ getQueuesTags,
273
+ };
274
+
275
+ export default QueuesAPI;
@@ -0,0 +1,213 @@
1
+ import deepCopy from 'deep-copy';
2
+ import {
3
+ getDefaultGetListResponse,
4
+ getDefaultGetParams,
5
+ getDefaultInstance,
6
+ } from '../../defaults';
7
+ import applyTransform, {
8
+ camelToSnake,
9
+ generateUrl,
10
+ merge,
11
+ notify,
12
+ sanitize,
13
+ snakeToCamel,
14
+ starToSearch,
15
+ } from '../../transformers';
16
+ import ApplicationsAccess
17
+ from '../../../modules/Userinfo/classes/ApplicationsAccess';
18
+
19
+ const instance = getDefaultInstance();
20
+
21
+ const baseUrl = '/roles';
22
+ const fieldsToSend = ['name', 'description', 'permissions', 'metadata'];
23
+
24
+ const preRequestHandler = (item) => {
25
+ const copy = deepCopy(item);
26
+ copy.metadata.access = ApplicationsAccess.minify(copy.metadata.access);
27
+ return copy;
28
+ };
29
+
30
+ const getRoleList = async (params) => {
31
+ const fieldsToSend = ['page', 'size', 'q', 'sort', 'fields', 'id'];
32
+
33
+ const url = applyTransform(params, [
34
+ merge(getDefaultGetParams()),
35
+ starToSearch('search'),
36
+ (params) => ({ ...params, q: params.search }),
37
+ sanitize(fieldsToSend),
38
+ camelToSnake(),
39
+ generateUrl(baseUrl),
40
+ ]);
41
+ try {
42
+ const response = await instance.get(url);
43
+ const { items, next } = applyTransform(response.data, [
44
+ snakeToCamel(),
45
+ merge(getDefaultGetListResponse()),
46
+ ]);
47
+ return {
48
+ items,
49
+ next,
50
+ };
51
+ } catch (err) {
52
+ throw applyTransform(err, [
53
+ notify,
54
+ ]);
55
+ }
56
+ };
57
+
58
+ const getRole = async ({ itemId: id }) => {
59
+ const defaultObject = {
60
+ name: '',
61
+ description: '',
62
+ permissions: [],
63
+ metadata: {},
64
+ };
65
+
66
+ const itemResponseHandler = (response) => {
67
+ const copy = deepCopy(response);
68
+ copy.metadata.access = new ApplicationsAccess({ access: copy.metadata.access }).getAccess();
69
+ return copy;
70
+ };
71
+
72
+ const url = `${baseUrl}/${id}?fields=metadata&fields=permissions&fields=name&fields=description`;
73
+
74
+ try {
75
+ const response = await instance.get(url);
76
+ return applyTransform(response.data, [
77
+ snakeToCamel(),
78
+ merge(defaultObject),
79
+ itemResponseHandler,
80
+ ]);
81
+ } catch (err) {
82
+ throw applyTransform(err, [
83
+ notify,
84
+ ]);
85
+ }
86
+ };
87
+
88
+ const getExtendedRoles = async (params) => {
89
+ const fieldsToSend = ['page', 'size', 'q', 'sort', 'fields', 'id'];
90
+
91
+ const url = applyTransform(params, [
92
+ merge(getDefaultGetParams()),
93
+ starToSearch('search'),
94
+ (params) => ({ ...params, q: params.search }),
95
+ sanitize(fieldsToSend),
96
+ camelToSnake(),
97
+ generateUrl(baseUrl),
98
+ ]);
99
+ try {
100
+ const response = await instance.get(url);
101
+ const { items, next } = applyTransform(response.data, [
102
+ snakeToCamel(),
103
+ merge(getDefaultGetListResponse()),
104
+ ]);
105
+ return {
106
+ items,
107
+ next,
108
+ };
109
+ } catch (err) {
110
+ throw applyTransform(err, [
111
+ notify,
112
+ ]);
113
+ }
114
+ };
115
+
116
+ const addRole = async ({ itemInstance }) => {
117
+ const item = applyTransform(itemInstance, [
118
+ preRequestHandler,
119
+ sanitize(fieldsToSend),
120
+ camelToSnake(),
121
+ ]);
122
+ try {
123
+ const response = await instance.post(baseUrl, item);
124
+ return applyTransform(response.data, [
125
+ snakeToCamel(),
126
+ ]);
127
+ } catch (err) {
128
+ throw applyTransform(err, [
129
+ notify,
130
+ ]);
131
+ }
132
+ };
133
+
134
+ const updateRole = async ({ itemInstance, itemId: id }) => {
135
+ const item = applyTransform(itemInstance, [
136
+ preRequestHandler,
137
+ sanitize(fieldsToSend),
138
+ camelToSnake(),
139
+ ]);
140
+
141
+ const url = `${baseUrl}/${id}`;
142
+ try {
143
+ const response = await instance.put(url, item);
144
+ return applyTransform(response.data, [
145
+ snakeToCamel(),
146
+ ]);
147
+ } catch (err) {
148
+ throw applyTransform(err, [
149
+ notify,
150
+ ]);
151
+ }
152
+ };
153
+
154
+ const deleteRole = async ({ id }) => {
155
+ const url = `${baseUrl}/${id}`;
156
+ try {
157
+ const response = await instance.delete(url);
158
+ return applyTransform(response.data, []);
159
+ } catch (err) {
160
+ throw applyTransform(err, [
161
+ notify,
162
+ ]);
163
+ }
164
+ };
165
+
166
+ const getRolesLookup = (params) => getRoleList({
167
+ ...params,
168
+ fields: params.fields || ['id', 'name'],
169
+ });
170
+
171
+ const PERMISSIONS_LIST_URL = '/permissions';
172
+
173
+ const getPermissionsOptions = async (params) => {
174
+ const fieldsToSend = ['page', 'size', 'q', 'sort', 'fields', 'id'];
175
+
176
+ const url = applyTransform(params, [
177
+ merge(getDefaultGetParams()),
178
+ starToSearch('search'),
179
+ (params) => ({ ...params, q: params.search }),
180
+ sanitize(fieldsToSend),
181
+ camelToSnake(),
182
+ generateUrl(PERMISSIONS_LIST_URL),
183
+ ]);
184
+ try {
185
+ const response = await instance.get(url);
186
+ const { items, next } = applyTransform(response.data, [
187
+ snakeToCamel(),
188
+ merge(getDefaultGetListResponse()),
189
+ ]);
190
+ return {
191
+ items,
192
+ next,
193
+ };
194
+ } catch (err) {
195
+ throw applyTransform(err, [
196
+ notify,
197
+ ]);
198
+ }
199
+ };
200
+
201
+ const RolesAPI = {
202
+ getList: getRoleList,
203
+ get: getRole,
204
+ add: addRole,
205
+ update: updateRole,
206
+ delete: deleteRole,
207
+ getLookup: getRolesLookup,
208
+
209
+ getExtendedRoles,
210
+ getPermissionsOptions,
211
+ };
212
+
213
+ export default RolesAPI;