@webitel/api-services 0.0.23 → 0.0.25
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/package.json +14 -10
- package/src/api/axios/generateInstance.ts +30 -0
- package/src/api/axios/index.ts +2 -0
- package/src/api/clients/_shared/generatePermissionsApi.ts +97 -0
- package/src/api/clients/agents/agentChats.ts +74 -0
- package/src/api/clients/agents/agents.ts +265 -0
- package/src/api/clients/buckets/buckets.ts +112 -0
- package/src/api/clients/calendars/calendars.ts +214 -0
- package/src/api/clients/caseCloseReasonGroups/caseCloseReasonGroups.ts +128 -0
- package/src/api/clients/caseCloseReasons/caseCloseReasons.ts +128 -0
- package/src/api/clients/casePriorities/casePriorities.ts +139 -0
- package/src/api/clients/caseServiceCatalogs/serviceCatalogs.ts +198 -0
- package/src/api/clients/caseServices/services.ts +181 -0
- package/src/api/clients/caseSources/caseSources.ts +121 -0
- package/src/api/clients/caseStatusConditions/caseStatusConditions.ts +165 -0
- package/src/api/clients/caseStatuses/caseStatuses.ts +119 -0
- package/src/api/clients/catalog/catalog.ts +44 -0
- package/src/api/clients/chatGateways/chatGateways.ts +302 -0
- package/src/api/clients/chatGateways/defaults/defaultChatGateway.ts +18 -0
- package/src/api/clients/chatGateways/defaults/webChatGateway.ts +72 -0
- package/src/api/clients/chatGateways/enums/WebchatAlternativeChannel.enum.ts +14 -0
- package/src/api/clients/chatGateways/scripts/generateUri.ts +9 -0
- package/src/api/clients/communications/communications.ts +141 -0
- package/src/api/clients/configurations/configurations.ts +144 -0
- package/src/api/clients/contactGroups/contactGroups.ts +187 -0
- package/src/api/clients/flows/flow.ts +225 -0
- package/src/api/clients/gateways/defaults/defaultGateway.ts +9 -0
- package/src/api/clients/gateways/defaults/registerGateway.ts +12 -0
- package/src/api/clients/gateways/defaults/trunkingGateway.ts +16 -0
- package/src/api/clients/gateways/gateways.ts +175 -0
- package/src/api/clients/index.ts +68 -0
- package/src/api/clients/labels/labels.ts +56 -0
- package/src/api/clients/lists/blacklists.ts +118 -0
- package/src/api/clients/media/media.ts +120 -0
- package/src/api/clients/object/object.ts +114 -0
- package/src/api/clients/queues/defaults/processing.ts +14 -0
- package/src/api/clients/queues/queues.ts +238 -0
- package/src/api/clients/quickReplies/quickReplies.ts +117 -0
- package/src/api/clients/roles/roles.ts +202 -0
- package/src/api/clients/skills/skills.ts +112 -0
- package/src/api/clients/slaConditions/slaConditions.ts +165 -0
- package/src/api/clients/slas/slas.ts +118 -0
- package/src/api/clients/teams/teams.ts +144 -0
- package/src/api/clients/users/__tests__/users.spec.ts +265 -0
- package/src/api/clients/users/users.ts +230 -0
- package/src/api/clients/wtTypes/_shared/utils/sortDynamicFields.ts +21 -0
- package/src/api/clients/wtTypes/sysTypes/sysTypes.ts +64 -0
- package/src/api/clients/wtTypes/typeExtensions/typeExtensions.ts +122 -0
- package/src/api/clients//321/201ontacts/contactChatMessagesHistory.ts +98 -0
- package/src/api/clients//321/201ontacts/contacts.ts +339 -0
- package/src/api/clients//321/201ontacts/enums/ContactsSearchMode.ts +9 -0
- package/src/api/clients//321/201ontacts/index.ts +5 -0
- package/src/api/defaults/getDefaultGetListResponse/getDefaultGetListResponse.ts +6 -0
- package/src/api/defaults/getDefaultGetParams/getDefaultGetParams.ts +6 -0
- package/src/api/defaults/getDefaultInstance/getDefaultInstance.ts +21 -0
- package/src/api/defaults/getDefaultOpenAPIConfig/getDefaultOpenAPIConfig.ts +10 -0
- package/src/api/defaults/index.ts +11 -0
- package/src/api/index.ts +6 -0
- package/src/api/interceptors/index.ts +3 -0
- package/src/api/interceptors/request/index.ts +2 -0
- package/src/api/interceptors/request/updateToken.interceptor.ts +10 -0
- package/src/api/interceptors/response/handleUnauthorized.interceptor.ts +12 -0
- package/src/api/interceptors/response/index.ts +2 -0
- package/src/api/transformers/addQueryParamsToUrl/addQueryParamsToUrl.transformer.ts +19 -0
- package/src/api/transformers/applyTransform.ts +17 -0
- package/src/api/transformers/camelToSnake/camelToSnake.transformer.ts +5 -0
- package/src/api/transformers/generateUrl/generateUrl.transformer.ts +13 -0
- package/src/api/transformers/index.ts +28 -0
- package/src/api/transformers/log/log.transformer.ts +6 -0
- package/src/api/transformers/merge/merge.transformer.ts +8 -0
- package/src/api/transformers/mergeEach/mergeEach.transformer.ts +8 -0
- package/src/api/transformers/notify/notify.transformer.ts +39 -0
- package/src/api/transformers/sanitize/sanitize.transformer.ts +12 -0
- package/src/api/transformers/skipIf/skipIf.ts +11 -0
- package/src/api/transformers/snakeToCamel/snakeToCamel.transformer.ts +5 -0
- package/src/api/transformers/starToSearch/starToSearch.transformer.ts +15 -0
- package/src/gen/_docs/html/assets/navigation.js +1 -1
- package/src/gen/_docs/html/assets/search.js +1 -1
- package/src/gen/_docs/html/interfaces/_models_webitelCasesInputSource.WebitelCasesInputSource.html +0 -1
- package/src/gen/_docs/html/interfaces/_models_webitelCasesSource.WebitelCasesSource.html +5 -6
- package/src/gen/_docs/html/modules/index.html +1 -1
- package/src/gen/_docs/html/modules/sources_sources.zod.gen.html +7 -7
- package/src/gen/_docs/html/types/_models_createCaseParams.CreateCaseParams.html +9 -3
- package/src/gen/_docs/html/types/_models_updateCase2Params.UpdateCase2Params.html +8 -3
- package/src/gen/_docs/html/types/_models_updateCaseParams.UpdateCaseParams.html +8 -3
- package/src/gen/_docs/html/variables/cases_cases.zod.gen.createCaseQueryParams.html +1 -1
- package/src/gen/_docs/html/variables/cases_cases.zod.gen.updateCase2QueryParams.html +1 -1
- package/src/gen/_docs/html/variables/cases_cases.zod.gen.updateCaseQueryParams.html +1 -1
- package/src/gen/_models/createCaseParams.ts +8 -0
- package/src/gen/_models/updateCase2Params.ts +8 -0
- package/src/gen/_models/updateCaseParams.ts +8 -0
- package/src/gen/_models/webitelCasesInputSource.ts +0 -1
- package/src/gen/_models/webitelCasesSource.ts +5 -6
- package/src/gen/cases/cases.zod.gen.ts +18 -0
- package/src/gen/sources/sources.msw.api.gen.ts +6 -6
- package/src/gen/sources/sources.zod.gen.ts +0 -27
- package/types/api/axios/generateInstance.d.ts +2 -0
- package/types/api/axios/index.d.ts +1 -0
- package/types/api/clients/_shared/generatePermissionsApi.d.ts +13 -0
- package/types/api/clients/agents/agentChats.d.ts +8 -0
- package/types/api/clients/agents/agents.d.ts +44 -0
- package/types/api/clients/buckets/buckets.d.ts +24 -0
- package/types/api/clients/calendars/calendars.d.ts +28 -0
- package/types/api/clients/caseCloseReasonGroups/caseCloseReasonGroups.d.ts +24 -0
- package/types/api/clients/caseCloseReasons/caseCloseReasons.d.ts +30 -0
- package/types/api/clients/casePriorities/casePriorities.d.ts +24 -0
- package/types/api/clients/caseServiceCatalogs/serviceCatalogs.d.ts +24 -0
- package/types/api/clients/caseServices/services.d.ts +35 -0
- package/types/api/clients/caseSources/caseSources.d.ts +24 -0
- package/types/api/clients/caseStatusConditions/caseStatusConditions.d.ts +36 -0
- package/types/api/clients/caseStatuses/caseStatuses.d.ts +24 -0
- package/types/api/clients/catalog/catalog.d.ts +9 -0
- package/types/api/clients/chatGateways/chatGateways.d.ts +28 -0
- package/types/api/clients/chatGateways/defaults/defaultChatGateway.d.ts +15 -0
- package/types/api/clients/chatGateways/defaults/webChatGateway.d.ts +64 -0
- package/types/api/clients/chatGateways/enums/WebchatAlternativeChannel.enum.d.ts +8 -0
- package/types/api/clients/chatGateways/scripts/generateUri.d.ts +2 -0
- package/types/api/clients/communications/communications.d.ts +28 -0
- package/types/api/clients/configurations/configurations.d.ts +28 -0
- package/types/api/clients/contactGroups/contactGroups.d.ts +47 -0
- package/types/api/clients/flows/flow.d.ts +28 -0
- package/types/api/clients/gateways/defaults/defaultGateway.d.ts +8 -0
- package/types/api/clients/gateways/defaults/registerGateway.d.ts +13 -0
- package/types/api/clients/gateways/defaults/trunkingGateway.d.ts +11 -0
- package/types/api/clients/gateways/gateways.d.ts +28 -0
- package/types/api/clients/index.d.ts +33 -0
- package/types/api/clients/labels/labels.d.ts +11 -0
- package/types/api/clients/lists/blacklists.d.ts +24 -0
- package/types/api/clients/media/media.d.ts +19 -0
- package/types/api/clients/object/object.d.ts +11 -0
- package/types/api/clients/queues/defaults/processing.d.ts +7 -0
- package/types/api/clients/queues/queues.d.ts +32 -0
- package/types/api/clients/quickReplies/quickReplies.d.ts +24 -0
- package/types/api/clients/roles/roles.d.ts +32 -0
- package/types/api/clients/skills/skills.d.ts +24 -0
- package/types/api/clients/slaConditions/slaConditions.d.ts +30 -0
- package/types/api/clients/slas/slas.d.ts +24 -0
- package/types/api/clients/teams/teams.d.ts +24 -0
- package/types/api/clients/users/users.d.ts +46 -0
- package/types/api/clients/wtTypes/_shared/utils/sortDynamicFields.d.ts +2 -0
- package/types/api/clients/wtTypes/sysTypes/sysTypes.d.ts +30 -0
- package/types/api/clients/wtTypes/typeExtensions/typeExtensions.d.ts +32 -0
- package/types/api/clients//321/201ontacts/contactChatMessagesHistory.d.ts +14 -0
- package/types/api/clients//321/201ontacts/contacts.d.ts +23 -0
- package/types/api/clients//321/201ontacts/enums/ContactsSearchMode.d.ts +8 -0
- package/types/api/clients//321/201ontacts/index.d.ts +4 -0
- package/types/api/defaults/getDefaultGetListResponse/getDefaultGetListResponse.d.ts +5 -0
- package/types/api/defaults/getDefaultGetParams/getDefaultGetParams.d.ts +8 -0
- package/types/api/defaults/getDefaultInstance/getDefaultInstance.d.ts +3 -0
- package/types/api/defaults/getDefaultOpenAPIConfig/getDefaultOpenAPIConfig.d.ts +3 -0
- package/types/api/defaults/index.d.ts +5 -0
- package/types/api/index.d.ts +5 -0
- package/types/api/interceptors/index.d.ts +2 -0
- package/types/api/interceptors/request/index.d.ts +1 -0
- package/types/api/interceptors/request/updateToken.interceptor.d.ts +2 -0
- package/types/api/interceptors/response/handleUnauthorized.interceptor.d.ts +2 -0
- package/types/api/interceptors/response/index.d.ts +1 -0
- package/types/api/transformers/addQueryParamsToUrl/addQueryParamsToUrl.transformer.d.ts +2 -0
- package/types/api/transformers/applyTransform.d.ts +5 -0
- package/types/api/transformers/camelToSnake/camelToSnake.transformer.d.ts +2 -0
- package/types/api/transformers/generateUrl/generateUrl.transformer.d.ts +2 -0
- package/types/api/transformers/index.d.ts +14 -0
- package/types/api/transformers/log/log.transformer.d.ts +2 -0
- package/types/api/transformers/merge/merge.transformer.d.ts +2 -0
- package/types/api/transformers/mergeEach/mergeEach.transformer.d.ts +2 -0
- package/types/api/transformers/notify/notify.transformer.d.ts +2 -0
- package/types/api/transformers/sanitize/sanitize.transformer.d.ts +2 -0
- package/types/api/transformers/skipIf/skipIf.d.ts +1 -0
- package/types/api/transformers/snakeToCamel/snakeToCamel.transformer.d.ts +2 -0
- package/types/api/transformers/starToSearch/starToSearch.transformer.d.ts +2 -0
- package/types/gen/_models/configServicePatchConfigBody.d.ts +15 -0
- package/types/gen/_models/configServiceUpdateConfigBody.d.ts +14 -0
- package/types/gen/_models/engineTriggerObjectType.d.ts +0 -1
- package/types/gen/_models/fileServiceSearchFilesChannelItem.d.ts +0 -2
- package/types/gen/_models/googlerpcStatus.d.ts +4 -4
- package/types/gen/_models/groupsAddContactsToGroupParams.d.ts +12 -0
- package/types/gen/_models/loggerDeleteConfigBulkRequest.d.ts +9 -0
- package/types/gen/_models/loggerDeleteConfigLogsRequest.d.ts +10 -0
- package/types/gen/_models/loggerDeleteConfigLogsResponse.d.ts +9 -0
- package/types/gen/_models/readSystemObjectsParams.d.ts +9 -0
- package/types/gen/_models/searchConfigObjectItem.d.ts +25 -0
- package/types/gen/_models/searchConfigParams.d.ts +18 -0
- package/types/gen/_models/searchLogByConfigIdActionItem.d.ts +14 -0
- package/types/gen/_models/searchLogByConfigIdParams.d.ts +19 -0
- package/types/gen/_models/searchLogByRecordIdActionItem.d.ts +14 -0
- package/types/gen/_models/searchLogByRecordIdParams.d.ts +22 -0
- package/types/gen/_models/searchLogByUserIdActionItem.d.ts +14 -0
- package/types/gen/_models/searchLogByUserIdParams.d.ts +25 -0
- package/types/gen/_models/storageUploadFileChannel.d.ts +0 -2
- package/types/gen/_models/webitelcasesStatus.d.ts +2 -2
- package/types/gen/file-policies-service/file-policies-service.zod.gen.d.ts +0 -18
- package/types/gen/file-service/file-service.api.gen.d.ts +1 -3
- package/types/gen/file-service/file-service.msw.api.gen.d.ts +1 -3
- package/types/gen/file-service/file-service.zod.gen.d.ts +0 -18
- package/types/gen/trigger-service/trigger-service.zod.gen.d.ts +0 -9
- package/src/defaults/index.ts +0 -2
- package/src/gen/_docs/html/variables/sources_sources.zod.gen.createSourceBodyNameRegExp.html +0 -1
- package/src/gen/_docs/html/variables/sources_sources.zod.gen.createSourceResponseNameRegExp.html +0 -1
- package/src/gen/_docs/html/variables/sources_sources.zod.gen.deleteSourceResponseNameRegExp.html +0 -1
- package/src/gen/_docs/html/variables/sources_sources.zod.gen.listSourcesResponseItemsItemNameRegExp.html +0 -1
- package/src/gen/_docs/html/variables/sources_sources.zod.gen.locateSourceResponseSourceNameRegExp.html +0 -1
- package/src/gen/_docs/html/variables/sources_sources.zod.gen.updateSource2BodyNameRegExp.html +0 -1
- package/src/gen/_docs/html/variables/sources_sources.zod.gen.updateSource2ResponseNameRegExp.html +0 -1
- package/src/gen/_docs/html/variables/sources_sources.zod.gen.updateSourceBodyNameRegExp.html +0 -1
- package/src/gen/_docs/html/variables/sources_sources.zod.gen.updateSourceResponseNameRegExp.html +0 -1
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
import deepCopy from 'deep-copy';
|
|
2
|
+
import { ContactsApiFactory } from 'webitel-sdk';
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
getDefaultGetListResponse,
|
|
6
|
+
getDefaultGetParams,
|
|
7
|
+
getDefaultInstance,
|
|
8
|
+
getDefaultOpenAPIConfig,
|
|
9
|
+
} from '../../defaults/index';
|
|
10
|
+
import applyTransform, {
|
|
11
|
+
camelToSnake,
|
|
12
|
+
merge,
|
|
13
|
+
notify,
|
|
14
|
+
sanitize,
|
|
15
|
+
snakeToCamel,
|
|
16
|
+
} from '../../transformers/index';
|
|
17
|
+
import ContactsSearchMode from './enums/ContactsSearchMode';
|
|
18
|
+
|
|
19
|
+
const instance = getDefaultInstance();
|
|
20
|
+
const configuration = getDefaultOpenAPIConfig();
|
|
21
|
+
|
|
22
|
+
const contactService = new ContactsApiFactory(configuration, '', instance);
|
|
23
|
+
|
|
24
|
+
const formatAccessMode = (item) => ({
|
|
25
|
+
...item,
|
|
26
|
+
access: {
|
|
27
|
+
edit: item.mode.includes('w'),
|
|
28
|
+
delete: item.mode.includes('d'),
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
const getList = async (params) => {
|
|
33
|
+
const fieldsToSend = [
|
|
34
|
+
'page',
|
|
35
|
+
'size',
|
|
36
|
+
'q',
|
|
37
|
+
'sort',
|
|
38
|
+
'fields',
|
|
39
|
+
'id',
|
|
40
|
+
'qin',
|
|
41
|
+
'notIdGroup',
|
|
42
|
+
'group',
|
|
43
|
+
'owner',
|
|
44
|
+
'label',
|
|
45
|
+
'user',
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
if (!params.fields) {
|
|
49
|
+
params.fields = [
|
|
50
|
+
'id',
|
|
51
|
+
'etag',
|
|
52
|
+
'name',
|
|
53
|
+
'managers',
|
|
54
|
+
'labels',
|
|
55
|
+
'about',
|
|
56
|
+
'variables',
|
|
57
|
+
'timezones',
|
|
58
|
+
'phones',
|
|
59
|
+
'emails',
|
|
60
|
+
'imclients',
|
|
61
|
+
];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const listResponseHandler = (items) =>
|
|
65
|
+
items?.map((item) => ({
|
|
66
|
+
...item,
|
|
67
|
+
name: item.name.commonName,
|
|
68
|
+
managers: item.managers ? [...item.managers.data] : [],
|
|
69
|
+
labels: item.labels ? [...item.labels.data] : [],
|
|
70
|
+
groups: getGroupsFromResponse(item),
|
|
71
|
+
variables: item.variables ? [...item.variables.data] : [],
|
|
72
|
+
timezones: item.timezones ? [...item.timezones.data] : [],
|
|
73
|
+
phones: item.phones ? [...item.phones.data] : [],
|
|
74
|
+
emails: item.emails ? [...item.emails.data] : [],
|
|
75
|
+
}));
|
|
76
|
+
|
|
77
|
+
let changedParams;
|
|
78
|
+
|
|
79
|
+
if (params?.search) {
|
|
80
|
+
changedParams = { ...params, q: params.search };
|
|
81
|
+
} else if (params?.q && params?.qin) {
|
|
82
|
+
changedParams = { ...params };
|
|
83
|
+
} else {
|
|
84
|
+
let searchValue = '';
|
|
85
|
+
let searchKey = '';
|
|
86
|
+
|
|
87
|
+
if (params[ContactsSearchMode.NAME]) {
|
|
88
|
+
searchValue = params[ContactsSearchMode.NAME];
|
|
89
|
+
searchKey = ContactsSearchMode.NAME;
|
|
90
|
+
} else if (params[ContactsSearchMode.LABELS]) {
|
|
91
|
+
searchValue = params[ContactsSearchMode.LABELS];
|
|
92
|
+
searchKey = ContactsSearchMode.LABELS;
|
|
93
|
+
} else if (params[ContactsSearchMode.ABOUT]) {
|
|
94
|
+
searchValue = params[ContactsSearchMode.ABOUT];
|
|
95
|
+
searchKey = ContactsSearchMode.ABOUT;
|
|
96
|
+
} else if (params[ContactsSearchMode.VARIABLES]) {
|
|
97
|
+
searchValue = params[ContactsSearchMode.VARIABLES];
|
|
98
|
+
searchKey = ContactsSearchMode.VARIABLES;
|
|
99
|
+
} else if (params[ContactsSearchMode.DESTINATION]) {
|
|
100
|
+
searchValue = params[ContactsSearchMode.DESTINATION];
|
|
101
|
+
searchKey = 'emails,phones,imclients{user{name}}';
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// This code needed for adding starToSearch method to applyTransform while searchKey !== SearchMode.VARIABLES because '*' in variables search mode brokes backend logic.
|
|
105
|
+
// if (searchKey !== ContactsSearchMode.VARIABLES) {
|
|
106
|
+
// transformations.push(starToSearch('q')); WTEL-4265
|
|
107
|
+
// }
|
|
108
|
+
|
|
109
|
+
changedParams = {
|
|
110
|
+
...params,
|
|
111
|
+
q: searchValue || '',
|
|
112
|
+
qin: searchKey || '',
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
if (params.hasUser != null) {
|
|
116
|
+
changedParams.user = params.hasUser;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (params.contactGroup) {
|
|
120
|
+
changedParams.group = [...params.contactGroup.list];
|
|
121
|
+
}
|
|
122
|
+
if (params.contactLabel) {
|
|
123
|
+
changedParams.label = params.contactLabel.map((item) => item.label);
|
|
124
|
+
}
|
|
125
|
+
if (params.contactOwner) {
|
|
126
|
+
changedParams.owner = params.contactOwner;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (params.parentId) {
|
|
131
|
+
changedParams.group = [params.parentId];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const transformations = [
|
|
135
|
+
sanitize(fieldsToSend),
|
|
136
|
+
merge(getDefaultGetParams()),
|
|
137
|
+
camelToSnake(),
|
|
138
|
+
];
|
|
139
|
+
|
|
140
|
+
const {
|
|
141
|
+
page,
|
|
142
|
+
size,
|
|
143
|
+
q,
|
|
144
|
+
sort,
|
|
145
|
+
fields,
|
|
146
|
+
id,
|
|
147
|
+
qin,
|
|
148
|
+
mode,
|
|
149
|
+
group_id,
|
|
150
|
+
group,
|
|
151
|
+
not_id_group,
|
|
152
|
+
owner,
|
|
153
|
+
label,
|
|
154
|
+
user,
|
|
155
|
+
} = applyTransform(changedParams, transformations);
|
|
156
|
+
|
|
157
|
+
try {
|
|
158
|
+
const response = await contactService.searchContacts(
|
|
159
|
+
page,
|
|
160
|
+
size,
|
|
161
|
+
q,
|
|
162
|
+
sort || '+name',
|
|
163
|
+
['mode', ...fields],
|
|
164
|
+
id,
|
|
165
|
+
qin,
|
|
166
|
+
mode,
|
|
167
|
+
not_id_group,
|
|
168
|
+
group,
|
|
169
|
+
owner,
|
|
170
|
+
label,
|
|
171
|
+
user,
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
const { items, next } = applyTransform(
|
|
175
|
+
{ ...response.data, items: response.data.data || [] },
|
|
176
|
+
[snakeToCamel(['custom']), merge(getDefaultGetListResponse())],
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
return {
|
|
180
|
+
items: applyTransform(items, [
|
|
181
|
+
(items) => items?.map((item) => formatAccessMode(item)),
|
|
182
|
+
listResponseHandler,
|
|
183
|
+
]),
|
|
184
|
+
next,
|
|
185
|
+
};
|
|
186
|
+
} catch (err) {
|
|
187
|
+
throw applyTransform(err, [notify]);
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
const get = async ({ itemId: id }) => {
|
|
192
|
+
const fields = [
|
|
193
|
+
'name',
|
|
194
|
+
'about',
|
|
195
|
+
'labels',
|
|
196
|
+
'groups',
|
|
197
|
+
'etag',
|
|
198
|
+
'mode',
|
|
199
|
+
'managers',
|
|
200
|
+
'timezones',
|
|
201
|
+
'variables',
|
|
202
|
+
'phones',
|
|
203
|
+
'emails',
|
|
204
|
+
'imclients',
|
|
205
|
+
'user',
|
|
206
|
+
'custom',
|
|
207
|
+
];
|
|
208
|
+
|
|
209
|
+
const defaultObject = {};
|
|
210
|
+
const itemResponseHandler = (item) => {
|
|
211
|
+
return {
|
|
212
|
+
...item,
|
|
213
|
+
name: item.name.commonName,
|
|
214
|
+
labels: item.labels ? [...item.labels.data] : [],
|
|
215
|
+
groups: getGroupsFromResponse(item),
|
|
216
|
+
managers: item.managers ? [...item.managers.data] : [],
|
|
217
|
+
timezones: item.timezones ? [...item.timezones.data] : [],
|
|
218
|
+
variables: item.variables ? [...item.variables.data] : [],
|
|
219
|
+
phones: item.phones ? [...item.phones.data] : [],
|
|
220
|
+
emails: item.emails ? [...item.emails.data] : [],
|
|
221
|
+
};
|
|
222
|
+
};
|
|
223
|
+
try {
|
|
224
|
+
const response = await contactService.locateContact(id, fields);
|
|
225
|
+
return applyTransform(response.data, [
|
|
226
|
+
snakeToCamel(['custom']),
|
|
227
|
+
merge(defaultObject),
|
|
228
|
+
itemResponseHandler,
|
|
229
|
+
formatAccessMode,
|
|
230
|
+
]);
|
|
231
|
+
} catch (err) {
|
|
232
|
+
throw applyTransform(err, [notify]);
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
const fieldsToSend = [
|
|
237
|
+
'name',
|
|
238
|
+
'labels',
|
|
239
|
+
'about',
|
|
240
|
+
'managers',
|
|
241
|
+
'timezones',
|
|
242
|
+
'groups',
|
|
243
|
+
'custom',
|
|
244
|
+
];
|
|
245
|
+
|
|
246
|
+
const sanitizeManagers = (itemInstance) => {
|
|
247
|
+
// handle many managers and even no managers field cases
|
|
248
|
+
const managers = (itemInstance.managers || []).filter(
|
|
249
|
+
({ user } = {}) => user.id,
|
|
250
|
+
);
|
|
251
|
+
return { ...itemInstance, managers };
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
const sanitizeTimezones = (itemInstance) => {
|
|
255
|
+
// handle many timezones and even no timezones field cases
|
|
256
|
+
const timezones = (itemInstance.timezones || []).filter(
|
|
257
|
+
({ timezone } = {}) => timezone.id,
|
|
258
|
+
);
|
|
259
|
+
return { ...itemInstance, timezones };
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
const sanitizeGroups = (itemInstance) => {
|
|
263
|
+
// handle many groups and even no groups field cases
|
|
264
|
+
const groups = (itemInstance.groups || []).map((item) => ({ group: item }));
|
|
265
|
+
return { ...itemInstance, groups };
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
const preRequestHandler = (item) => {
|
|
269
|
+
const copy = deepCopy(item);
|
|
270
|
+
copy.name = {
|
|
271
|
+
commonName: copy.name,
|
|
272
|
+
};
|
|
273
|
+
return copy;
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
const getGroupsFromResponse = (item) => {
|
|
277
|
+
return item.groups ? [...item.groups.data.map((el) => el.group)] : [];
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
const add = async ({ itemInstance }) => {
|
|
281
|
+
const item = applyTransform(itemInstance, [
|
|
282
|
+
preRequestHandler,
|
|
283
|
+
sanitizeManagers,
|
|
284
|
+
sanitizeTimezones,
|
|
285
|
+
sanitizeGroups,
|
|
286
|
+
sanitize(fieldsToSend),
|
|
287
|
+
camelToSnake(['custom']),
|
|
288
|
+
]);
|
|
289
|
+
try {
|
|
290
|
+
const response = await contactService.createContact(item);
|
|
291
|
+
return applyTransform(response.data, [snakeToCamel(['custom'])]);
|
|
292
|
+
} catch (err) {
|
|
293
|
+
throw applyTransform(err, [notify]);
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
const update = async ({ itemInstance }) => {
|
|
298
|
+
const { etag } = itemInstance;
|
|
299
|
+
const item = applyTransform(itemInstance, [
|
|
300
|
+
preRequestHandler,
|
|
301
|
+
sanitizeManagers,
|
|
302
|
+
sanitizeTimezones,
|
|
303
|
+
sanitizeGroups,
|
|
304
|
+
sanitize(fieldsToSend),
|
|
305
|
+
camelToSnake(['custom']),
|
|
306
|
+
]);
|
|
307
|
+
try {
|
|
308
|
+
const response = await contactService.updateContact(etag, item);
|
|
309
|
+
return applyTransform(response.data, [snakeToCamel(['custom'])]);
|
|
310
|
+
} catch (err) {
|
|
311
|
+
throw applyTransform(err, [notify]);
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
const deleteContact = async ({ id }) => {
|
|
316
|
+
try {
|
|
317
|
+
const response = await contactService.deleteContact(id);
|
|
318
|
+
return applyTransform(response.data, []);
|
|
319
|
+
} catch (err) {
|
|
320
|
+
throw applyTransform(err, [notify]);
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
|
|
324
|
+
const getContactsLookup = (params) =>
|
|
325
|
+
getList({
|
|
326
|
+
...params,
|
|
327
|
+
fields: params.fields || ['id', 'name'],
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
const ContactsAPI = {
|
|
331
|
+
getList,
|
|
332
|
+
get,
|
|
333
|
+
add,
|
|
334
|
+
update,
|
|
335
|
+
delete: deleteContact,
|
|
336
|
+
getLookup: getContactsLookup,
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
export default ContactsAPI;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import qs from 'qs';
|
|
2
|
+
import generateInstance from '../../axios/generateInstance';
|
|
3
|
+
import updateTokenInterceptor from '../../interceptors/request/updateToken.interceptor';
|
|
4
|
+
import handleUnauthorizedInterceptor from '../../interceptors/response/handleUnauthorized.interceptor';
|
|
5
|
+
|
|
6
|
+
const getDefaultInstance = () => {
|
|
7
|
+
return generateInstance({
|
|
8
|
+
interceptors: {
|
|
9
|
+
request: [updateTokenInterceptor],
|
|
10
|
+
response: [handleUnauthorizedInterceptor],
|
|
11
|
+
},
|
|
12
|
+
baseURL: import.meta.env.VITE_API_URL,
|
|
13
|
+
paramsSerializer: (params) => {
|
|
14
|
+
return qs.stringify(params);
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export { getDefaultInstance };
|
|
20
|
+
|
|
21
|
+
export default getDefaultInstance;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Configuration } from 'webitel-sdk';
|
|
2
|
+
|
|
3
|
+
const getDefaultOpenAPIConfig = () =>
|
|
4
|
+
new Configuration({
|
|
5
|
+
basePath: import.meta.env.VITE_API_URL,
|
|
6
|
+
apiKey: localStorage.getItem('access-key') || '',
|
|
7
|
+
accessToken: localStorage.getItem('access-key') || '',
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
export default getDefaultOpenAPIConfig;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import getDefaultGetListResponse from './getDefaultGetListResponse/getDefaultGetListResponse';
|
|
2
|
+
import getDefaultGetParams from './getDefaultGetParams/getDefaultGetParams';
|
|
3
|
+
import getDefaultInstance from './getDefaultInstance/getDefaultInstance';
|
|
4
|
+
import getDefaultOpenAPIConfig from './getDefaultOpenAPIConfig/getDefaultOpenAPIConfig';
|
|
5
|
+
|
|
6
|
+
export {
|
|
7
|
+
getDefaultGetListResponse,
|
|
8
|
+
getDefaultGetParams,
|
|
9
|
+
getDefaultInstance,
|
|
10
|
+
getDefaultOpenAPIConfig,
|
|
11
|
+
};
|
package/src/api/index.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const handleUnauthorizedInterceptor = [
|
|
2
|
+
(response) => response,
|
|
3
|
+
(error) => {
|
|
4
|
+
if (error.response && error.response.status === 401) {
|
|
5
|
+
console.warn('intercepted 401');
|
|
6
|
+
localStorage.removeItem('access-token');
|
|
7
|
+
}
|
|
8
|
+
return Promise.reject(error);
|
|
9
|
+
},
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
export default handleUnauthorizedInterceptor;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// @author @stanislav-kozak
|
|
2
|
+
// This function adds query parameters to a given URL.
|
|
3
|
+
// Where queryArray is an array of query parameters in the format 'key=value'.
|
|
4
|
+
const addQueryParamsToUrl = (queryArray) => (url) => {
|
|
5
|
+
let modifyUrl = url;
|
|
6
|
+
|
|
7
|
+
if (queryArray && queryArray.length > 0) {
|
|
8
|
+
if (modifyUrl.includes('?')) {
|
|
9
|
+
modifyUrl += '&' + queryArray.join('&');
|
|
10
|
+
|
|
11
|
+
return modifyUrl;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
modifyUrl += '?' + queryArray.join('&');
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return modifyUrl;
|
|
18
|
+
};
|
|
19
|
+
export default addQueryParamsToUrl;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const applyTransform = (
|
|
2
|
+
target,
|
|
3
|
+
transformers,
|
|
4
|
+
{ debug = false, withContext = null } = {},
|
|
5
|
+
) => {
|
|
6
|
+
return transformers.reduce((result, transformer, index) => {
|
|
7
|
+
if (debug) console.info(`applyTransform debug on step ${index}`, result);
|
|
8
|
+
|
|
9
|
+
if (withContext) {
|
|
10
|
+
return transformer(result, withContext);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return transformer(result);
|
|
14
|
+
}, target);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export default applyTransform;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import qs from 'query-string';
|
|
2
|
+
|
|
3
|
+
const generateUrlTransformer = (baseUrl) => (params) => {
|
|
4
|
+
const stringifyOptions = {
|
|
5
|
+
skipEmptyString: true,
|
|
6
|
+
skipNull: true,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const url = `${baseUrl}?${qs.stringify(params, stringifyOptions)}`;
|
|
10
|
+
return url;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default generateUrlTransformer;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import addQueryParamsToUrl from './addQueryParamsToUrl/addQueryParamsToUrl.transformer';
|
|
2
|
+
import applyTransform from './applyTransform';
|
|
3
|
+
import camelToSnake from './camelToSnake/camelToSnake.transformer';
|
|
4
|
+
import generateUrl from './generateUrl/generateUrl.transformer';
|
|
5
|
+
import log from './log/log.transformer';
|
|
6
|
+
import merge from './merge/merge.transformer';
|
|
7
|
+
import mergeEach from './mergeEach/mergeEach.transformer';
|
|
8
|
+
import notify from './notify/notify.transformer';
|
|
9
|
+
import sanitize from './sanitize/sanitize.transformer';
|
|
10
|
+
import { skipIf } from './skipIf/skipIf';
|
|
11
|
+
import snakeToCamel from './snakeToCamel/snakeToCamel.transformer';
|
|
12
|
+
import starToSearch from './starToSearch/starToSearch.transformer';
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
addQueryParamsToUrl,
|
|
16
|
+
camelToSnake,
|
|
17
|
+
generateUrl,
|
|
18
|
+
log,
|
|
19
|
+
merge,
|
|
20
|
+
mergeEach,
|
|
21
|
+
notify,
|
|
22
|
+
sanitize,
|
|
23
|
+
skipIf,
|
|
24
|
+
snakeToCamel,
|
|
25
|
+
starToSearch,
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export default applyTransform;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import eventBus from '../../../scripts/eventBus';
|
|
2
|
+
|
|
3
|
+
const notifyTransformer = (notificationObject) => {
|
|
4
|
+
/*
|
|
5
|
+
if passed arg is function, then this notification - static content,
|
|
6
|
+
predefined before actual transformer is called in applyTransform flow
|
|
7
|
+
*/
|
|
8
|
+
if (typeof notificationObject === 'function') {
|
|
9
|
+
/*
|
|
10
|
+
so, create a callback which will send notification with params, passed to it
|
|
11
|
+
*/
|
|
12
|
+
const callback = ({ type, text }) =>
|
|
13
|
+
eventBus.$emit('notification', {
|
|
14
|
+
type,
|
|
15
|
+
text,
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
/*
|
|
19
|
+
and, then, return a function, which will be called in main applyTransform flow,
|
|
20
|
+
calling passed arg function with callback, and returning actual notify payload
|
|
21
|
+
*/
|
|
22
|
+
return (payload) => {
|
|
23
|
+
notificationObject({ callback });
|
|
24
|
+
return payload;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (notificationObject instanceof Error) {
|
|
28
|
+
eventBus.$emit('notification', {
|
|
29
|
+
type: 'error',
|
|
30
|
+
text:
|
|
31
|
+
notificationObject.response?.data?.detail ||
|
|
32
|
+
notificationObject.response?.data?.message ||
|
|
33
|
+
notificationObject,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return notificationObject;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export default notifyTransformer;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const sanitizeTransformer = (fieldsToSend) => (item) => {
|
|
2
|
+
return Object.keys(item).reduce((sanitizedItem, key) => {
|
|
3
|
+
if (fieldsToSend.indexOf(key) === -1) return sanitizedItem;
|
|
4
|
+
|
|
5
|
+
return {
|
|
6
|
+
...sanitizedItem,
|
|
7
|
+
[key]: item[key],
|
|
8
|
+
};
|
|
9
|
+
}, {});
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export default sanitizeTransformer;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const skipIf =
|
|
2
|
+
(
|
|
3
|
+
transformer: (...payload: unknown[]) => unknown,
|
|
4
|
+
ifFn: boolean | ((...payload: unknown[]) => boolean),
|
|
5
|
+
) =>
|
|
6
|
+
(payload: unknown) => {
|
|
7
|
+
if (typeof ifFn === 'function' ? ifFn(payload) : ifFn) {
|
|
8
|
+
return payload;
|
|
9
|
+
}
|
|
10
|
+
return transformer(payload);
|
|
11
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import deepcopy from 'deep-copy';
|
|
2
|
+
import get from 'lodash/get';
|
|
3
|
+
|
|
4
|
+
import updateObject from '../../../scripts/updateObject';
|
|
5
|
+
|
|
6
|
+
const starToSearchTransformer =
|
|
7
|
+
(path = 'search') =>
|
|
8
|
+
(params) => {
|
|
9
|
+
const copy = deepcopy(params);
|
|
10
|
+
const value = get(copy, path);
|
|
11
|
+
if (!value || value.slice(-1) === '*') return copy;
|
|
12
|
+
return updateObject({ obj: copy, path, value: `${value}*` });
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export default starToSearchTransformer;
|