@webitel/api-services 0.1.65 → 0.1.67

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 (25) hide show
  1. package/package.json +1 -1
  2. package/src/api/clients/contactGroups/contactGroups.ts +57 -58
  3. package/src/api/clients/dynamicConditions/dynamicConditions.ts +179 -0
  4. package/src/api/clients/dynamicGroups/dynamicGroups.ts +191 -0
  5. package/src/api/clients/index.ts +2 -0
  6. package/src/api/clients/slaConditions/slaConditions.ts +50 -66
  7. package/src/api/clients/slas/slas.ts +30 -43
  8. package/src/validations/_shared/duration.validations.ts +7 -0
  9. package/src/validations/contactGroup/contactGroup.validations.ts +34 -0
  10. package/src/validations/contactGroupCondition/contactGroupCondition.validations.ts +15 -0
  11. package/src/validations/index.ts +6 -0
  12. package/src/validations/sla/sla.validations.ts +49 -0
  13. package/src/validations/slaCondition/slaCondition.validations.ts +12 -0
  14. package/types/.tsbuildinfo +1 -1
  15. package/types/api/clients/contactGroups/contactGroups.d.ts +3 -3
  16. package/types/api/clients/dynamicConditions/dynamicConditions.d.ts +27 -0
  17. package/types/api/clients/dynamicGroups/dynamicGroups.d.ts +27 -0
  18. package/types/api/clients/index.d.ts +2 -0
  19. package/types/api/clients/slaConditions/slaConditions.d.ts +5 -2
  20. package/types/validations/_shared/duration.validations.d.ts +2 -0
  21. package/types/validations/contactGroup/contactGroup.validations.d.ts +28 -0
  22. package/types/validations/contactGroupCondition/contactGroupCondition.validations.d.ts +7 -0
  23. package/types/validations/index.d.ts +6 -0
  24. package/types/validations/sla/sla.validations.d.ts +15 -0
  25. package/types/validations/slaCondition/slaCondition.validations.d.ts +13 -0
@@ -1,10 +1,12 @@
1
- import { SLAConditionsApiFactory } from 'webitel-sdk';
2
1
  import {
3
- getDefaultGetListResponse,
4
- getDefaultGetParams,
5
- getDefaultInstance,
6
- getDefaultOpenAPIConfig,
7
- } from '../../defaults';
2
+ CreateSLAConditionBody,
3
+ getSlaconditions,
4
+ ListSLAConditionsQueryParams,
5
+ UpdateSLAConditionBody,
6
+ } from '@webitel/api-services/gen';
7
+ import { getShallowFieldsToSendFromZodSchema } from '@webitel/api-services/gen/utils';
8
+
9
+ import { getDefaultGetListResponse, getDefaultGetParams } from '../../defaults';
8
10
  import {
9
11
  applyTransform,
10
12
  camelToSnake,
@@ -13,24 +15,7 @@ import {
13
15
  sanitize,
14
16
  snakeToCamel,
15
17
  } from '../../transformers';
16
- import type { ApiId, ApiParams, UpdateItemParams } from '../_shared/types';
17
-
18
- const instance = getDefaultInstance();
19
- const configuration = getDefaultOpenAPIConfig();
20
-
21
- const slaConditionsService = SLAConditionsApiFactory(
22
- configuration,
23
- '',
24
- instance,
25
- );
26
-
27
- const fieldsToSend = [
28
- 'name',
29
- 'priorities',
30
- 'sla_id',
31
- 'reaction_time',
32
- 'resolution_time',
33
- ];
18
+ import type { ApiId, ApiParams } from '../_shared/types';
34
19
 
35
20
  const getConditionsList = async ({
36
21
  parentId,
@@ -38,16 +23,9 @@ const getConditionsList = async ({
38
23
  }: {
39
24
  parentId: ApiId;
40
25
  } & ApiParams) => {
41
- const fieldsToSend = [
42
- 'page',
43
- 'size',
44
- 'q',
45
- 'sort',
46
- 'fields',
47
- 'id',
48
- 'slaConditionId',
49
- 'priorityId',
50
- ];
26
+ const fieldsToSend = getShallowFieldsToSendFromZodSchema(
27
+ ListSLAConditionsQueryParams,
28
+ );
51
29
 
52
30
  const {
53
31
  page,
@@ -60,25 +38,23 @@ const getConditionsList = async ({
60
38
  priority_id: priorityId,
61
39
  } = applyTransform(rest, [
62
40
  merge(getDefaultGetParams()),
63
- (params) => ({
64
- ...params,
65
- q: params.search,
66
- }),
67
41
  sanitize(fieldsToSend),
68
42
  camelToSnake(),
69
43
  ]);
70
44
 
71
45
  try {
72
- const response = await slaConditionsService.listSLAConditions(
46
+ const response = await getSlaconditions().listSLAConditions(
73
47
  String(parentId),
74
- page,
75
- size,
76
- fields,
77
- sort,
78
- id,
79
- q,
80
- slaConditionId,
81
- priorityId,
48
+ {
49
+ page,
50
+ size,
51
+ fields,
52
+ sort,
53
+ id,
54
+ q,
55
+ slaConditionId,
56
+ priorityId,
57
+ },
82
58
  );
83
59
  const { items, next } = applyTransform(response.data, [
84
60
  merge(getDefaultGetListResponse()),
@@ -103,15 +79,12 @@ const getCondition = async ({
103
79
  parentId: ApiId;
104
80
  itemId: ApiId;
105
81
  }) => {
106
- const itemResponseHandler = (item: ApiParams) => {
107
- return item.slaCondition;
108
- };
82
+ const itemResponseHandler = (item: ApiParams) => item.slaCondition;
109
83
 
110
84
  try {
111
- const response = await slaConditionsService.locateSLACondition(
85
+ const response = await getSlaconditions().locateSLACondition(
112
86
  String(parentId),
113
87
  String(id),
114
- fieldsToSend,
115
88
  );
116
89
  return applyTransform(response.data, [
117
90
  snakeToCamel(),
@@ -124,19 +97,25 @@ const getCondition = async ({
124
97
  }
125
98
  };
126
99
 
127
- const updateCondition = async ({
100
+ const addCondition = async ({
128
101
  itemInstance,
129
- itemId: id,
130
- }: UpdateItemParams) => {
102
+ parentId,
103
+ }: {
104
+ itemInstance: ApiParams;
105
+ parentId: ApiId;
106
+ }) => {
107
+ const fieldsToSend = getShallowFieldsToSendFromZodSchema(
108
+ CreateSLAConditionBody,
109
+ );
110
+
131
111
  const item = applyTransform(itemInstance, [
132
- camelToSnake(),
133
112
  sanitize(fieldsToSend),
113
+ camelToSnake(),
134
114
  ]);
135
115
 
136
116
  try {
137
- const response = await slaConditionsService.updateSLACondition(
138
- itemInstance.slaId,
139
- String(id),
117
+ const response = await getSlaconditions().createSLACondition(
118
+ String(parentId),
140
119
  item,
141
120
  );
142
121
  return applyTransform(response.data, [
@@ -149,21 +128,26 @@ const updateCondition = async ({
149
128
  }
150
129
  };
151
130
 
152
- const addCondition = async ({
131
+ const updateCondition = async ({
153
132
  itemInstance,
154
- parentId,
133
+ itemId: id,
155
134
  }: {
156
135
  itemInstance: ApiParams;
157
- parentId: ApiId;
136
+ itemId: ApiId;
158
137
  }) => {
138
+ const fieldsToSend = getShallowFieldsToSendFromZodSchema(
139
+ UpdateSLAConditionBody,
140
+ );
141
+
159
142
  const item = applyTransform(itemInstance, [
160
- camelToSnake(),
161
143
  sanitize(fieldsToSend),
144
+ camelToSnake(),
162
145
  ]);
163
146
 
164
147
  try {
165
- const response = await slaConditionsService.createSLACondition(
166
- String(parentId),
148
+ const response = await getSlaconditions().updateSLACondition(
149
+ String(itemInstance.slaId),
150
+ String(id),
167
151
  item,
168
152
  );
169
153
  return applyTransform(response.data, [
@@ -184,7 +168,7 @@ const deleteCondition = async ({
184
168
  parentId: ApiId;
185
169
  }) => {
186
170
  try {
187
- const response = await slaConditionsService.deleteSLACondition(
171
+ const response = await getSlaconditions().deleteSLACondition(
188
172
  String(parentId),
189
173
  String(id),
190
174
  );
@@ -1,10 +1,12 @@
1
- import { SLAsApiFactory } from 'webitel-sdk';
2
1
  import {
3
- getDefaultGetListResponse,
4
- getDefaultGetParams,
5
- getDefaultInstance,
6
- getDefaultOpenAPIConfig,
7
- } from '../../defaults';
2
+ CreateSLABody,
3
+ getSlas,
4
+ ListSLAsQueryParams,
5
+ UpdateSLABody,
6
+ } from '@webitel/api-services/gen';
7
+ import { getShallowFieldsToSendFromZodSchema } from '@webitel/api-services/gen/utils';
8
+
9
+ import { getDefaultGetListResponse, getDefaultGetParams } from '../../defaults';
8
10
  import {
9
11
  applyTransform,
10
12
  camelToSnake,
@@ -21,42 +23,24 @@ import type {
21
23
  UpdateItemParams,
22
24
  } from '../_shared/types';
23
25
 
24
- const instance = getDefaultInstance();
25
- const configuration = getDefaultOpenAPIConfig();
26
-
27
- const slaService = SLAsApiFactory(configuration, '', instance);
28
-
29
- const fieldsToSend = [
30
- 'name',
31
- 'description',
32
- 'valid_from',
33
- 'valid_to',
34
- 'calendar',
35
- 'reaction_time',
36
- 'resolution_time',
37
- ];
38
-
39
26
  const getSlasList = async (params: ApiParams) => {
40
- const fieldsToSend = [
41
- 'page',
42
- 'size',
43
- 'q',
44
- 'sort',
45
- 'fields',
46
- 'id',
47
- ];
27
+ const fieldsToSend = getShallowFieldsToSendFromZodSchema(ListSLAsQueryParams);
48
28
 
49
29
  const { page, size, fields, sort, id, q } = applyTransform(params, [
50
30
  merge(getDefaultGetParams()),
51
- (params) => ({
52
- ...params,
53
- q: params.search,
54
- }),
55
31
  sanitize(fieldsToSend),
56
32
  camelToSnake(),
57
33
  ]);
34
+
58
35
  try {
59
- const response = await slaService.listSLAs(page, size, fields, sort, id, q);
36
+ const response = await getSlas().listSLAs({
37
+ page,
38
+ size,
39
+ fields,
40
+ sort,
41
+ id,
42
+ q: q || params.search,
43
+ });
60
44
  const { items, next } = applyTransform(response.data, [
61
45
  merge(getDefaultGetListResponse()),
62
46
  ]);
@@ -72,12 +56,10 @@ const getSlasList = async (params: ApiParams) => {
72
56
  };
73
57
 
74
58
  const getSla = async ({ itemId: id }: GetItemParams) => {
75
- const itemResponseHandler = (item: ApiParams) => {
76
- return item.sla;
77
- };
59
+ const itemResponseHandler = (item: ApiParams) => item.sla;
78
60
 
79
61
  try {
80
- const response = await slaService.locateSLA(String(id), fieldsToSend);
62
+ const response = await getSlas().locateSLA(String(id));
81
63
  return applyTransform(response.data, [
82
64
  snakeToCamel(),
83
65
  itemResponseHandler,
@@ -90,12 +72,14 @@ const getSla = async ({ itemId: id }: GetItemParams) => {
90
72
  };
91
73
 
92
74
  const addSla = async ({ itemInstance }: AddItemParams) => {
75
+ const fieldsToSend = getShallowFieldsToSendFromZodSchema(CreateSLABody);
76
+
93
77
  const item = applyTransform(itemInstance, [
94
- camelToSnake(),
95
78
  sanitize(fieldsToSend),
79
+ camelToSnake(),
96
80
  ]);
97
81
  try {
98
- const response = await slaService.createSLA(item);
82
+ const response = await getSlas().createSLA(item);
99
83
  return applyTransform(response.data, [
100
84
  snakeToCamel(),
101
85
  ]);
@@ -107,12 +91,15 @@ const addSla = async ({ itemInstance }: AddItemParams) => {
107
91
  };
108
92
 
109
93
  const updateSla = async ({ itemInstance, itemId: id }: UpdateItemParams) => {
94
+ const fieldsToSend = getShallowFieldsToSendFromZodSchema(UpdateSLABody);
95
+
110
96
  const item = applyTransform(itemInstance, [
111
- camelToSnake(),
112
97
  sanitize(fieldsToSend),
98
+ camelToSnake(),
113
99
  ]);
100
+
114
101
  try {
115
- const response = await slaService.updateSLA(String(id), item);
102
+ const response = await getSlas().updateSLA(String(id), item);
116
103
  return applyTransform(response.data, [
117
104
  snakeToCamel(),
118
105
  ]);
@@ -125,7 +112,7 @@ const updateSla = async ({ itemInstance, itemId: id }: UpdateItemParams) => {
125
112
 
126
113
  const deleteSla = async ({ id }: DeleteItemParams) => {
127
114
  try {
128
- const response = await slaService.deleteSLA(String(id));
115
+ const response = await getSlas().deleteSLA(String(id));
129
116
  return applyTransform(response.data, []);
130
117
  } catch (err) {
131
118
  throw applyTransform(err, [
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+
3
+ export const requiredDurationSchema = (min = 1) =>
4
+ z.union([
5
+ z.string().min(min),
6
+ z.number().min(min),
7
+ ]);
@@ -0,0 +1,34 @@
1
+ import type { ContactsGroup } from '@webitel/api-services/gen/models';
2
+ import { ContactsGroupType } from '@webitel/api-services/gen/models';
3
+ import { z } from 'zod';
4
+ import {
5
+ lookupSchema,
6
+ requiredLookupSchema,
7
+ } from '../_shared/lookup.validations';
8
+ import type { ZodShape } from '../types';
9
+
10
+ const baseSchema = {
11
+ name: z.string().min(1),
12
+ description: z.string().optional(),
13
+ enabled: z.boolean().optional(),
14
+ type: z.string().optional(),
15
+ };
16
+
17
+ const staticSchema = z.object<ZodShape<ContactsGroup>>({
18
+ ...baseSchema,
19
+ defaultGroup: lookupSchema.optional(),
20
+ });
21
+
22
+ const dynamicSchema = z.object<ZodShape<ContactsGroup>>({
23
+ ...baseSchema,
24
+ defaultGroup: requiredLookupSchema,
25
+ });
26
+
27
+ export const contactGroupSchema = z.discriminatedUnion('type', [
28
+ staticSchema.extend({
29
+ type: z.literal(ContactsGroupType.Static),
30
+ }),
31
+ dynamicSchema.extend({
32
+ type: z.literal(ContactsGroupType.Dynamic),
33
+ }),
34
+ ]);
@@ -0,0 +1,15 @@
1
+ import type { ContactsDynamicCondition } from '@webitel/api-services/gen/models';
2
+ import { z } from 'zod';
3
+ import {
4
+ lookupSchema,
5
+ requiredLookupSchema,
6
+ } from '../_shared/lookup.validations';
7
+ import type { ZodShape } from '../types';
8
+
9
+ export const contactGroupConditionSchema = z.object<
10
+ ZodShape<ContactsDynamicCondition>
11
+ >({
12
+ expression: z.string().min(1),
13
+ group: requiredLookupSchema,
14
+ assignee: lookupSchema.optional(),
15
+ });
@@ -1,3 +1,5 @@
1
+ export * from './_shared/duration.validations';
2
+ export * from './_shared/lookup.validations';
1
3
  export * from './auditForm/auditForm.validations';
2
4
  export * from './bucket/bucket.validations';
3
5
  export * from './calendar/calendar.validations';
@@ -5,6 +7,10 @@ export * from './casePriority/casePriority.validations';
5
7
  export * from './caseSource/caseSource.validations';
6
8
  export * from './caseStatus/caseStatus.validations';
7
9
  export * from './caseStatusCondition/caseStatusCondition.validations';
10
+ export * from './contactGroup/contactGroup.validations';
11
+ export * from './contactGroupCondition/contactGroupCondition.validations';
8
12
  export * from './OAuth/OAuth.validations';
9
13
  export * from './onlineSkill/onlineSkill.validations';
14
+ export * from './sla/sla.validations';
15
+ export * from './slaCondition/slaCondition.validations';
10
16
  export * from './types';
@@ -0,0 +1,49 @@
1
+ import type { WebitelCasesSLA } from '@webitel/api-services/gen/models';
2
+ import { z } from 'zod';
3
+ import { requiredDurationSchema } from '../_shared/duration.validations';
4
+ import { requiredLookupSchema } from '../_shared/lookup.validations';
5
+ import type { ZodShape } from '../types';
6
+
7
+ const MINUTE_IN_MS = 60000;
8
+
9
+ export const slaSchema = z
10
+ .object<ZodShape<WebitelCasesSLA>>({
11
+ name: z.string().min(1),
12
+ description: z.string().optional(),
13
+ calendar: requiredLookupSchema,
14
+ reactionTime: requiredDurationSchema(),
15
+ resolutionTime: requiredDurationSchema(),
16
+ validFrom: z
17
+ .union([
18
+ z.string(),
19
+ z.number(),
20
+ ])
21
+ .nullish(),
22
+ validTo: z
23
+ .union([
24
+ z.string(),
25
+ z.number(),
26
+ ])
27
+ .nullish(),
28
+ })
29
+ .superRefine((data, ctx) => {
30
+ if (!data.validFrom || !data.validTo) return;
31
+
32
+ const validFrom = Number(data.validFrom);
33
+ const validTo = Number(data.validTo);
34
+
35
+ if (Number.isNaN(validFrom) || Number.isNaN(validTo)) return;
36
+
37
+ if (validFrom > validTo - MINUTE_IN_MS) {
38
+ ctx.addIssue({
39
+ code: 'too_big',
40
+ origin: 'date',
41
+ maximum: validTo,
42
+ inclusive: false,
43
+ input: data.validFrom,
44
+ path: [
45
+ 'validFrom',
46
+ ],
47
+ });
48
+ }
49
+ });
@@ -0,0 +1,12 @@
1
+ import type { WebitelCasesSLACondition } from '@webitel/api-services/gen/models';
2
+ import { z } from 'zod';
3
+ import { requiredDurationSchema } from '../_shared/duration.validations';
4
+ import { requiredLookupSchema } from '../_shared/lookup.validations';
5
+ import type { ZodShape } from '../types';
6
+
7
+ export const slaConditionSchema = z.object<ZodShape<WebitelCasesSLACondition>>({
8
+ name: z.string().min(1),
9
+ priorities: z.array(requiredLookupSchema).min(1),
10
+ reactionTime: requiredDurationSchema(),
11
+ resolutionTime: requiredDurationSchema(),
12
+ });