@forestadmin/datasource-zendesk 1.0.0
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 +162 -0
- package/dist/client/index.d.ts +91 -0
- package/dist/client/index.js +243 -0
- package/dist/client-options.d.ts +16 -0
- package/dist/client-options.js +10 -0
- package/dist/collections/base-zendesk-collection.d.ts +52 -0
- package/dist/collections/base-zendesk-collection.js +203 -0
- package/dist/collections/organization-collection.d.ts +15 -0
- package/dist/collections/organization-collection.js +145 -0
- package/dist/collections/searchable-collection.d.ts +6 -0
- package/dist/collections/searchable-collection.js +20 -0
- package/dist/collections/ticket/comments-embedder.d.ts +5 -0
- package/dist/collections/ticket/comments-embedder.js +40 -0
- package/dist/collections/ticket/relation-embedder.d.ts +10 -0
- package/dist/collections/ticket/relation-embedder.js +62 -0
- package/dist/collections/ticket/schema-definition.d.ts +13 -0
- package/dist/collections/ticket/schema-definition.js +147 -0
- package/dist/collections/ticket/serializer.d.ts +15 -0
- package/dist/collections/ticket/serializer.js +96 -0
- package/dist/collections/ticket-collection.d.ts +18 -0
- package/dist/collections/ticket-collection.js +139 -0
- package/dist/collections/user-collection.d.ts +15 -0
- package/dist/collections/user-collection.js +162 -0
- package/dist/datasource.d.ts +16 -0
- package/dist/datasource.js +49 -0
- package/dist/enums.d.ts +10 -0
- package/dist/enums.js +12 -0
- package/dist/errors.d.ts +14 -0
- package/dist/errors.js +31 -0
- package/dist/factory.d.ts +5 -0
- package/dist/factory.js +15 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +30 -0
- package/dist/plugins/close-ticket/errors.d.ts +7 -0
- package/dist/plugins/close-ticket/errors.js +44 -0
- package/dist/plugins/close-ticket/index.d.ts +13 -0
- package/dist/plugins/close-ticket/index.js +74 -0
- package/dist/plugins/close-ticket/messages.d.ts +12 -0
- package/dist/plugins/close-ticket/messages.js +33 -0
- package/dist/plugins/create-ticket-with-notification/form-builder.d.ts +30 -0
- package/dist/plugins/create-ticket-with-notification/form-builder.js +179 -0
- package/dist/plugins/create-ticket-with-notification/index.d.ts +19 -0
- package/dist/plugins/create-ticket-with-notification/index.js +81 -0
- package/dist/query/condition-tree-translator.d.ts +9 -0
- package/dist/query/condition-tree-translator.js +90 -0
- package/dist/query/operators.d.ts +15 -0
- package/dist/query/operators.js +34 -0
- package/dist/schema/custom-fields-introspector.d.ts +13 -0
- package/dist/schema/custom-fields-introspector.js +89 -0
- package/dist/types.d.ts +23 -0
- package/dist/types.js +3 -0
- package/package.json +33 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TICKET_COMMENT_THREAD_SCHEMA = exports.TICKET_SORTABLE = void 0;
|
|
4
|
+
exports.getTicketFieldSchemas = getTicketFieldSchemas;
|
|
5
|
+
const datasource_1 = require("../../datasource");
|
|
6
|
+
const enums_1 = require("../../enums");
|
|
7
|
+
const base_zendesk_collection_1 = require("../base-zendesk-collection");
|
|
8
|
+
exports.TICKET_SORTABLE = {
|
|
9
|
+
updated_at: 'updated_at',
|
|
10
|
+
created_at: 'created_at',
|
|
11
|
+
priority: 'priority',
|
|
12
|
+
status: 'status',
|
|
13
|
+
ticket_type: 'ticket_type',
|
|
14
|
+
};
|
|
15
|
+
exports.TICKET_COMMENT_THREAD_SCHEMA = {
|
|
16
|
+
id: 'Number',
|
|
17
|
+
body: 'String',
|
|
18
|
+
html_body: 'String',
|
|
19
|
+
public: 'Boolean',
|
|
20
|
+
author_email: 'String',
|
|
21
|
+
author_name: 'String',
|
|
22
|
+
created_at: 'Date',
|
|
23
|
+
};
|
|
24
|
+
function getTicketFieldSchemas() {
|
|
25
|
+
return {
|
|
26
|
+
id: {
|
|
27
|
+
type: 'Column',
|
|
28
|
+
columnType: 'Number',
|
|
29
|
+
isPrimaryKey: true,
|
|
30
|
+
isReadOnly: true,
|
|
31
|
+
isSortable: false,
|
|
32
|
+
filterOperators: new Set(base_zendesk_collection_1.ID_OPS),
|
|
33
|
+
},
|
|
34
|
+
subject: {
|
|
35
|
+
type: 'Column',
|
|
36
|
+
columnType: 'String',
|
|
37
|
+
filterOperators: new Set(base_zendesk_collection_1.STRING_OPS),
|
|
38
|
+
},
|
|
39
|
+
description: {
|
|
40
|
+
type: 'Column',
|
|
41
|
+
columnType: 'String',
|
|
42
|
+
filterOperators: new Set(),
|
|
43
|
+
},
|
|
44
|
+
status: {
|
|
45
|
+
type: 'Column',
|
|
46
|
+
columnType: 'Enum',
|
|
47
|
+
enumValues: [...enums_1.TICKET_STATUSES],
|
|
48
|
+
isSortable: true,
|
|
49
|
+
filterOperators: new Set(base_zendesk_collection_1.STRING_OPS),
|
|
50
|
+
},
|
|
51
|
+
priority: {
|
|
52
|
+
type: 'Column',
|
|
53
|
+
columnType: 'Enum',
|
|
54
|
+
enumValues: [...enums_1.TICKET_PRIORITIES],
|
|
55
|
+
isSortable: true,
|
|
56
|
+
filterOperators: new Set(base_zendesk_collection_1.STRING_OPS),
|
|
57
|
+
},
|
|
58
|
+
ticket_type: {
|
|
59
|
+
type: 'Column',
|
|
60
|
+
columnType: 'Enum',
|
|
61
|
+
enumValues: [...enums_1.TICKET_TYPES],
|
|
62
|
+
isSortable: true,
|
|
63
|
+
filterOperators: new Set(base_zendesk_collection_1.STRING_OPS),
|
|
64
|
+
},
|
|
65
|
+
requester_id: {
|
|
66
|
+
type: 'Column',
|
|
67
|
+
columnType: 'Number',
|
|
68
|
+
filterOperators: new Set(base_zendesk_collection_1.NUMBER_OPS),
|
|
69
|
+
},
|
|
70
|
+
assignee_id: {
|
|
71
|
+
type: 'Column',
|
|
72
|
+
columnType: 'Number',
|
|
73
|
+
filterOperators: new Set(base_zendesk_collection_1.NUMBER_OPS),
|
|
74
|
+
},
|
|
75
|
+
group_id: {
|
|
76
|
+
type: 'Column',
|
|
77
|
+
columnType: 'Number',
|
|
78
|
+
filterOperators: new Set(base_zendesk_collection_1.NUMBER_OPS),
|
|
79
|
+
},
|
|
80
|
+
organization_id: {
|
|
81
|
+
type: 'Column',
|
|
82
|
+
columnType: 'Number',
|
|
83
|
+
filterOperators: new Set(base_zendesk_collection_1.NUMBER_OPS),
|
|
84
|
+
},
|
|
85
|
+
external_id: {
|
|
86
|
+
type: 'Column',
|
|
87
|
+
columnType: 'String',
|
|
88
|
+
filterOperators: new Set(base_zendesk_collection_1.STRING_OPS),
|
|
89
|
+
},
|
|
90
|
+
requester_email: {
|
|
91
|
+
type: 'Column',
|
|
92
|
+
columnType: 'String',
|
|
93
|
+
isReadOnly: true,
|
|
94
|
+
filterOperators: new Set(['Equal']),
|
|
95
|
+
},
|
|
96
|
+
tags: {
|
|
97
|
+
type: 'Column',
|
|
98
|
+
columnType: ['String'],
|
|
99
|
+
filterOperators: new Set(),
|
|
100
|
+
},
|
|
101
|
+
url: {
|
|
102
|
+
type: 'Column',
|
|
103
|
+
columnType: 'String',
|
|
104
|
+
isReadOnly: true,
|
|
105
|
+
filterOperators: new Set(),
|
|
106
|
+
},
|
|
107
|
+
created_at: {
|
|
108
|
+
type: 'Column',
|
|
109
|
+
columnType: 'Date',
|
|
110
|
+
isReadOnly: true,
|
|
111
|
+
isSortable: true,
|
|
112
|
+
filterOperators: new Set(base_zendesk_collection_1.DATE_OPS),
|
|
113
|
+
},
|
|
114
|
+
updated_at: {
|
|
115
|
+
type: 'Column',
|
|
116
|
+
columnType: 'Date',
|
|
117
|
+
isReadOnly: true,
|
|
118
|
+
isSortable: true,
|
|
119
|
+
filterOperators: new Set(base_zendesk_collection_1.DATE_OPS),
|
|
120
|
+
},
|
|
121
|
+
comments: {
|
|
122
|
+
type: 'Column',
|
|
123
|
+
columnType: [exports.TICKET_COMMENT_THREAD_SCHEMA],
|
|
124
|
+
isReadOnly: true,
|
|
125
|
+
filterOperators: new Set(),
|
|
126
|
+
},
|
|
127
|
+
requester: {
|
|
128
|
+
type: 'ManyToOne',
|
|
129
|
+
foreignCollection: datasource_1.COLLECTION_NAMES.user,
|
|
130
|
+
foreignKey: 'requester_id',
|
|
131
|
+
foreignKeyTarget: 'id',
|
|
132
|
+
},
|
|
133
|
+
assignee: {
|
|
134
|
+
type: 'ManyToOne',
|
|
135
|
+
foreignCollection: datasource_1.COLLECTION_NAMES.user,
|
|
136
|
+
foreignKey: 'assignee_id',
|
|
137
|
+
foreignKeyTarget: 'id',
|
|
138
|
+
},
|
|
139
|
+
organization: {
|
|
140
|
+
type: 'ManyToOne',
|
|
141
|
+
foreignCollection: datasource_1.COLLECTION_NAMES.organization,
|
|
142
|
+
foreignKey: 'organization_id',
|
|
143
|
+
foreignKeyTarget: 'id',
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLWRlZmluaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29sbGVjdGlvbnMvdGlja2V0L3NjaGVtYS1kZWZpbml0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdCQSxzREEwSEM7QUFoSkQsaURBQW9EO0FBQ3BELHVDQUErRTtBQUMvRSx3RUFBc0Y7QUFFekUsUUFBQSxlQUFlLEdBQTJCO0lBQ3JELFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLFdBQVcsRUFBRSxhQUFhO0NBQzNCLENBQUM7QUFFVyxRQUFBLDRCQUE0QixHQUFHO0lBQzFDLEVBQUUsRUFBRSxRQUFRO0lBQ1osSUFBSSxFQUFFLFFBQVE7SUFDZCxTQUFTLEVBQUUsUUFBUTtJQUNuQixNQUFNLEVBQUUsU0FBUztJQUNqQixZQUFZLEVBQUUsUUFBUTtJQUN0QixXQUFXLEVBQUUsUUFBUTtJQUNyQixVQUFVLEVBQUUsTUFBTTtDQUNWLENBQUM7QUFFWCxTQUFnQixxQkFBcUI7SUFDbkMsT0FBTztRQUNMLEVBQUUsRUFBRTtZQUNGLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFLFFBQVE7WUFDcEIsWUFBWSxFQUFFLElBQUk7WUFDbEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsZUFBZSxFQUFFLElBQUksR0FBRyxDQUFDLGdDQUFNLENBQUM7U0FDakM7UUFDRCxPQUFPLEVBQUU7WUFDUCxJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLGVBQWUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxvQ0FBVSxDQUFDO1NBQ3JDO1FBQ0QsV0FBVyxFQUFFO1lBQ1gsSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsUUFBUTtZQUNwQixlQUFlLEVBQUUsSUFBSSxHQUFHLEVBQUU7U0FDM0I7UUFDRCxNQUFNLEVBQUU7WUFDTixJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFVBQVUsRUFBRSxDQUFDLEdBQUcsdUJBQWUsQ0FBQztZQUNoQyxVQUFVLEVBQUUsSUFBSTtZQUNoQixlQUFlLEVBQUUsSUFBSSxHQUFHLENBQUMsb0NBQVUsQ0FBQztTQUNyQztRQUNELFFBQVEsRUFBRTtZQUNSLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFLE1BQU07WUFDbEIsVUFBVSxFQUFFLENBQUMsR0FBRyx5QkFBaUIsQ0FBQztZQUNsQyxVQUFVLEVBQUUsSUFBSTtZQUNoQixlQUFlLEVBQUUsSUFBSSxHQUFHLENBQUMsb0NBQVUsQ0FBQztTQUNyQztRQUNELFdBQVcsRUFBRTtZQUNYLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFLE1BQU07WUFDbEIsVUFBVSxFQUFFLENBQUMsR0FBRyxvQkFBWSxDQUFDO1lBQzdCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGVBQWUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxvQ0FBVSxDQUFDO1NBQ3JDO1FBQ0QsWUFBWSxFQUFFO1lBQ1osSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsUUFBUTtZQUNwQixlQUFlLEVBQUUsSUFBSSxHQUFHLENBQUMsb0NBQVUsQ0FBQztTQUNyQztRQUNELFdBQVcsRUFBRTtZQUNYLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFLFFBQVE7WUFDcEIsZUFBZSxFQUFFLElBQUksR0FBRyxDQUFDLG9DQUFVLENBQUM7U0FDckM7UUFDRCxRQUFRLEVBQUU7WUFDUixJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLGVBQWUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxvQ0FBVSxDQUFDO1NBQ3JDO1FBQ0QsZUFBZSxFQUFFO1lBQ2YsSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsUUFBUTtZQUNwQixlQUFlLEVBQUUsSUFBSSxHQUFHLENBQUMsb0NBQVUsQ0FBQztTQUNyQztRQUNELFdBQVcsRUFBRTtZQUNYLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFLFFBQVE7WUFDcEIsZUFBZSxFQUFFLElBQUksR0FBRyxDQUFDLG9DQUFVLENBQUM7U0FDckM7UUFDRCxlQUFlLEVBQUU7WUFDZixJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGVBQWUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxFQUFFO1lBQ0osSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFDdEIsZUFBZSxFQUFFLElBQUksR0FBRyxFQUFFO1NBQzNCO1FBQ0QsR0FBRyxFQUFFO1lBQ0gsSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsUUFBUTtZQUNwQixVQUFVLEVBQUUsSUFBSTtZQUNoQixlQUFlLEVBQUUsSUFBSSxHQUFHLEVBQUU7U0FDM0I7UUFDRCxVQUFVLEVBQUU7WUFDVixJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGVBQWUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxrQ0FBUSxDQUFDO1NBQ25DO1FBQ0QsVUFBVSxFQUFFO1lBQ1YsSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsTUFBTTtZQUNsQixVQUFVLEVBQUUsSUFBSTtZQUNoQixVQUFVLEVBQUUsSUFBSTtZQUNoQixlQUFlLEVBQUUsSUFBSSxHQUFHLENBQUMsa0NBQVEsQ0FBQztTQUNuQztRQUNELFFBQVEsRUFBRTtZQUNSLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFLENBQUMsb0NBQTRCLENBQUM7WUFDMUMsVUFBVSxFQUFFLElBQUk7WUFDaEIsZUFBZSxFQUFFLElBQUksR0FBRyxFQUFFO1NBQzNCO1FBQ0QsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLFdBQVc7WUFDakIsaUJBQWlCLEVBQUUsNkJBQWdCLENBQUMsSUFBSTtZQUN4QyxVQUFVLEVBQUUsY0FBYztZQUMxQixnQkFBZ0IsRUFBRSxJQUFJO1NBQ3ZCO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsSUFBSSxFQUFFLFdBQVc7WUFDakIsaUJBQWlCLEVBQUUsNkJBQWdCLENBQUMsSUFBSTtZQUN4QyxVQUFVLEVBQUUsYUFBYTtZQUN6QixnQkFBZ0IsRUFBRSxJQUFJO1NBQ3ZCO1FBQ0QsWUFBWSxFQUFFO1lBQ1osSUFBSSxFQUFFLFdBQVc7WUFDakIsaUJBQWlCLEVBQUUsNkJBQWdCLENBQUMsWUFBWTtZQUNoRCxVQUFVLEVBQUUsaUJBQWlCO1lBQzdCLGdCQUFnQixFQUFFLElBQUk7U0FDdkI7S0FDRixDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ZendeskRecord } from '../../types';
|
|
2
|
+
import type { RecordData } from '@forestadmin/datasource-toolkit';
|
|
3
|
+
/**
|
|
4
|
+
* Map a raw Zendesk ticket payload to the Forest column layout exposed by TicketCollection.
|
|
5
|
+
*
|
|
6
|
+
* - Zendesk's `type` field is renamed `ticket_type` to avoid collision with the JS keyword.
|
|
7
|
+
* - Custom fields (`custom_fields: [{ id, value }]`) are flattened to columns named via the
|
|
8
|
+
* `customFieldIdToColumnName` map. Unknown custom field ids are silently ignored.
|
|
9
|
+
* - `requester_email` is provided by the caller through `emails` because the raw ticket
|
|
10
|
+
* payload only carries `requester_id`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function serializeTicket(ticket: ZendeskRecord, emails: Map<number, string>, customFieldIdToColumnName: Map<number, string>): RecordData;
|
|
13
|
+
export declare function serializeUser(user: ZendeskRecord): RecordData;
|
|
14
|
+
export declare function serializeOrganization(organization: ZendeskRecord): RecordData;
|
|
15
|
+
//# sourceMappingURL=serializer.d.ts.map
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.serializeTicket = serializeTicket;
|
|
4
|
+
exports.serializeUser = serializeUser;
|
|
5
|
+
exports.serializeOrganization = serializeOrganization;
|
|
6
|
+
const TICKET_BASE_FIELDS = [
|
|
7
|
+
'id',
|
|
8
|
+
'subject',
|
|
9
|
+
'description',
|
|
10
|
+
'status',
|
|
11
|
+
'priority',
|
|
12
|
+
'requester_id',
|
|
13
|
+
'assignee_id',
|
|
14
|
+
'group_id',
|
|
15
|
+
'organization_id',
|
|
16
|
+
'external_id',
|
|
17
|
+
'tags',
|
|
18
|
+
'url',
|
|
19
|
+
'created_at',
|
|
20
|
+
'updated_at',
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* Map a raw Zendesk ticket payload to the Forest column layout exposed by TicketCollection.
|
|
24
|
+
*
|
|
25
|
+
* - Zendesk's `type` field is renamed `ticket_type` to avoid collision with the JS keyword.
|
|
26
|
+
* - Custom fields (`custom_fields: [{ id, value }]`) are flattened to columns named via the
|
|
27
|
+
* `customFieldIdToColumnName` map. Unknown custom field ids are silently ignored.
|
|
28
|
+
* - `requester_email` is provided by the caller through `emails` because the raw ticket
|
|
29
|
+
* payload only carries `requester_id`.
|
|
30
|
+
*/
|
|
31
|
+
function serializeTicket(ticket, emails, customFieldIdToColumnName) {
|
|
32
|
+
const record = {};
|
|
33
|
+
for (const key of TICKET_BASE_FIELDS) {
|
|
34
|
+
if (ticket[key] !== undefined)
|
|
35
|
+
record[key] = ticket[key];
|
|
36
|
+
}
|
|
37
|
+
record.ticket_type = ticket.type ?? null;
|
|
38
|
+
const requesterId = ticket.requester_id;
|
|
39
|
+
if (typeof requesterId === 'number' && emails.has(requesterId)) {
|
|
40
|
+
record.requester_email = emails.get(requesterId);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
record.requester_email = null;
|
|
44
|
+
}
|
|
45
|
+
const rawCustomFields = Array.isArray(ticket.custom_fields)
|
|
46
|
+
? ticket.custom_fields
|
|
47
|
+
: [];
|
|
48
|
+
for (const entry of rawCustomFields) {
|
|
49
|
+
const columnName = customFieldIdToColumnName.get(entry.id);
|
|
50
|
+
if (columnName)
|
|
51
|
+
record[columnName] = entry.value;
|
|
52
|
+
}
|
|
53
|
+
return record;
|
|
54
|
+
}
|
|
55
|
+
function serializeUser(user) {
|
|
56
|
+
const record = {
|
|
57
|
+
id: user.id,
|
|
58
|
+
email: user.email,
|
|
59
|
+
name: user.name,
|
|
60
|
+
role: user.role,
|
|
61
|
+
phone: user.phone,
|
|
62
|
+
organization_id: user.organization_id,
|
|
63
|
+
time_zone: user.time_zone,
|
|
64
|
+
locale: user.locale,
|
|
65
|
+
verified: user.verified,
|
|
66
|
+
suspended: user.suspended,
|
|
67
|
+
created_at: user.created_at,
|
|
68
|
+
updated_at: user.updated_at,
|
|
69
|
+
};
|
|
70
|
+
const userFields = (user.user_fields ?? {});
|
|
71
|
+
for (const [key, value] of Object.entries(userFields)) {
|
|
72
|
+
if (record[key] === undefined)
|
|
73
|
+
record[key] = value;
|
|
74
|
+
}
|
|
75
|
+
return record;
|
|
76
|
+
}
|
|
77
|
+
function serializeOrganization(organization) {
|
|
78
|
+
const record = {
|
|
79
|
+
id: organization.id,
|
|
80
|
+
name: organization.name,
|
|
81
|
+
domain_names: organization.domain_names,
|
|
82
|
+
details: organization.details,
|
|
83
|
+
notes: organization.notes,
|
|
84
|
+
group_id: organization.group_id,
|
|
85
|
+
shared_tickets: organization.shared_tickets,
|
|
86
|
+
created_at: organization.created_at,
|
|
87
|
+
updated_at: organization.updated_at,
|
|
88
|
+
};
|
|
89
|
+
const orgFields = (organization.organization_fields ?? {});
|
|
90
|
+
for (const [key, value] of Object.entries(orgFields)) {
|
|
91
|
+
if (record[key] === undefined)
|
|
92
|
+
record[key] = value;
|
|
93
|
+
}
|
|
94
|
+
return record;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2xsZWN0aW9ucy90aWNrZXQvc2VyaWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTZCQSwwQ0ErQkM7QUFFRCxzQ0F1QkM7QUFFRCxzREFvQkM7QUF4R0QsTUFBTSxrQkFBa0IsR0FBRztJQUN6QixJQUFJO0lBQ0osU0FBUztJQUNULGFBQWE7SUFDYixRQUFRO0lBQ1IsVUFBVTtJQUNWLGNBQWM7SUFDZCxhQUFhO0lBQ2IsVUFBVTtJQUNWLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsTUFBTTtJQUNOLEtBQUs7SUFDTCxZQUFZO0lBQ1osWUFBWTtDQUNiLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLGVBQWUsQ0FDN0IsTUFBcUIsRUFDckIsTUFBMkIsRUFDM0IseUJBQThDO0lBRTlDLE1BQU0sTUFBTSxHQUFlLEVBQUUsQ0FBQztJQUU5QixLQUFLLE1BQU0sR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDckMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUztZQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUF1QixDQUFDO0lBQ2pGLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxHQUFJLE1BQU0sQ0FBQyxJQUEyQixJQUFJLElBQUksQ0FBQztJQUVqRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO0lBRXhDLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUMvRCxNQUFNLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztJQUNoQyxD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
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ZendeskClient } from '../client';
|
|
2
|
+
import type { CustomFieldEntry, ZendeskRecord } from '../types';
|
|
3
|
+
import type { Caller, DataSource, Filter, Logger, PaginatedFilter, Projection, RecordData } from '@forestadmin/datasource-toolkit';
|
|
4
|
+
import BaseZendeskCollection from './base-zendesk-collection';
|
|
5
|
+
export default class TicketCollection extends BaseZendeskCollection {
|
|
6
|
+
private readonly customFields;
|
|
7
|
+
constructor(datasource: DataSource, client: ZendeskClient, customFields: CustomFieldEntry[], logger?: Logger);
|
|
8
|
+
list(caller: Caller, filter: PaginatedFilter, projection: Projection): Promise<RecordData[]>;
|
|
9
|
+
create(caller: Caller, data: RecordData[]): Promise<RecordData[]>;
|
|
10
|
+
update(caller: Caller, filter: Filter, patch: RecordData): Promise<void>;
|
|
11
|
+
delete(caller: Caller, filter: Filter): Promise<void>;
|
|
12
|
+
protected findOne(id: number | string): Promise<ZendeskRecord | null>;
|
|
13
|
+
protected serializeRecord(record: ZendeskRecord): RecordData;
|
|
14
|
+
protected serializeForFilter(records: ZendeskRecord[]): Promise<RecordData[]>;
|
|
15
|
+
private filtersOnRequesterEmail;
|
|
16
|
+
private buildPayload;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=ticket-collection.d.ts.map
|
|
@@ -0,0 +1,139 @@
|
|
|
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 datasource_1 = require("../datasource");
|
|
7
|
+
const base_zendesk_collection_1 = __importDefault(require("./base-zendesk-collection"));
|
|
8
|
+
const comments_embedder_1 = require("./ticket/comments-embedder");
|
|
9
|
+
const relation_embedder_1 = require("./ticket/relation-embedder");
|
|
10
|
+
const schema_definition_1 = require("./ticket/schema-definition");
|
|
11
|
+
const serializer_1 = require("./ticket/serializer");
|
|
12
|
+
const READ_ONLY_INPUTS = new Set([
|
|
13
|
+
'id',
|
|
14
|
+
'url',
|
|
15
|
+
'created_at',
|
|
16
|
+
'updated_at',
|
|
17
|
+
'requester_email',
|
|
18
|
+
'comments',
|
|
19
|
+
'requester',
|
|
20
|
+
'assignee',
|
|
21
|
+
'organization',
|
|
22
|
+
]);
|
|
23
|
+
function collectIds(records, field) {
|
|
24
|
+
const ids = [];
|
|
25
|
+
for (const record of records) {
|
|
26
|
+
const value = record[field];
|
|
27
|
+
if (typeof value === 'number')
|
|
28
|
+
ids.push(value);
|
|
29
|
+
else if (typeof value === 'string' && !Number.isNaN(Number(value)))
|
|
30
|
+
ids.push(Number(value));
|
|
31
|
+
}
|
|
32
|
+
return Array.from(new Set(ids));
|
|
33
|
+
}
|
|
34
|
+
class TicketCollection extends base_zendesk_collection_1.default {
|
|
35
|
+
constructor(datasource, client, customFields, logger) {
|
|
36
|
+
super(datasource_1.COLLECTION_NAMES.ticket, datasource, client, 'ticket', schema_definition_1.TICKET_SORTABLE, logger);
|
|
37
|
+
this.customFields = customFields;
|
|
38
|
+
this.addFields((0, schema_definition_1.getTicketFieldSchemas)());
|
|
39
|
+
this.addCustomFields(customFields);
|
|
40
|
+
}
|
|
41
|
+
async list(caller, filter, projection) {
|
|
42
|
+
const ids = this.extractIdLookup(filter?.conditionTree);
|
|
43
|
+
const tickets = ids ? await this.fetchRecordsByIds(ids) : await this.searchRecords(filter);
|
|
44
|
+
const needsEmail = projection.includes('requester_email') ||
|
|
45
|
+
(ids !== null && this.filtersOnRequesterEmail(filter));
|
|
46
|
+
const emails = needsEmail
|
|
47
|
+
? await this.client.fetchUserEmails(collectIds(tickets, 'requester_id'))
|
|
48
|
+
: new Map();
|
|
49
|
+
let records = tickets.map(ticket => (0, serializer_1.serializeTicket)(ticket, emails, this.zendeskIdToColumnName));
|
|
50
|
+
// The id-lookup path bypassed Zendesk Search, so honor the filter, sort and pagination here.
|
|
51
|
+
if (ids)
|
|
52
|
+
records = this.refine(records, filter, caller.timezone);
|
|
53
|
+
const relations = (0, relation_embedder_1.findRequestedRelations)(projection);
|
|
54
|
+
if (relations.requester || relations.assignee || relations.organization) {
|
|
55
|
+
await (0, relation_embedder_1.embedRelations)(records, relations, this.client);
|
|
56
|
+
}
|
|
57
|
+
if ((0, comments_embedder_1.isCommentsRequested)(projection)) {
|
|
58
|
+
await (0, comments_embedder_1.embedComments)(records, this.client);
|
|
59
|
+
}
|
|
60
|
+
return projection.apply(records);
|
|
61
|
+
}
|
|
62
|
+
async create(caller, data) {
|
|
63
|
+
const created = [];
|
|
64
|
+
for (const item of data) {
|
|
65
|
+
// eslint-disable-next-line no-await-in-loop
|
|
66
|
+
const raw = await this.client.createTicket(this.buildPayload(item, { onCreate: true }));
|
|
67
|
+
created.push((0, serializer_1.serializeTicket)(raw, new Map(), this.zendeskIdToColumnName));
|
|
68
|
+
}
|
|
69
|
+
return created;
|
|
70
|
+
}
|
|
71
|
+
async update(caller, filter, patch) {
|
|
72
|
+
const ids = await this.resolveIds(filter, caller.timezone);
|
|
73
|
+
const payload = this.buildPayload(patch, { onCreate: false });
|
|
74
|
+
for (const id of ids) {
|
|
75
|
+
// eslint-disable-next-line no-await-in-loop
|
|
76
|
+
await this.client.updateTicket(id, payload);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async delete(caller, filter) {
|
|
80
|
+
const ids = await this.resolveIds(filter, caller.timezone);
|
|
81
|
+
for (const id of ids) {
|
|
82
|
+
// eslint-disable-next-line no-await-in-loop
|
|
83
|
+
await this.client.deleteTicket(id);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
findOne(id) {
|
|
87
|
+
return this.client.findTicket(id);
|
|
88
|
+
}
|
|
89
|
+
serializeRecord(record) {
|
|
90
|
+
return (0, serializer_1.serializeTicket)(record, new Map(), this.zendeskIdToColumnName);
|
|
91
|
+
}
|
|
92
|
+
// Resolve requester_email so scope/segment conditions on it are honored when filtering in memory.
|
|
93
|
+
async serializeForFilter(records) {
|
|
94
|
+
const emails = await this.client.fetchUserEmails(collectIds(records, 'requester_id'));
|
|
95
|
+
return records.map(record => (0, serializer_1.serializeTicket)(record, emails, this.zendeskIdToColumnName));
|
|
96
|
+
}
|
|
97
|
+
// ===== Helpers =====
|
|
98
|
+
filtersOnRequesterEmail(filter) {
|
|
99
|
+
return filter?.conditionTree?.someLeaf(leaf => leaf.field === 'requester_email') ?? false;
|
|
100
|
+
}
|
|
101
|
+
buildPayload(data, { onCreate }) {
|
|
102
|
+
const payload = {};
|
|
103
|
+
const customFields = [];
|
|
104
|
+
for (const [key, value] of Object.entries(data)) {
|
|
105
|
+
if (READ_ONLY_INPUTS.has(key)) {
|
|
106
|
+
// ignore read-only inputs
|
|
107
|
+
}
|
|
108
|
+
else if (key === 'description') {
|
|
109
|
+
// Zendesk derives `description` from the first comment; it can only be set at creation.
|
|
110
|
+
if (onCreate) {
|
|
111
|
+
payload.description = value;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
this.logger?.('Warn', `[datasource-zendesk] 'description' cannot be edited after creation; ignoring it.`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else if (key === 'ticket_type') {
|
|
118
|
+
payload.type = value;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
const ticketCustomField = this.customFields.find(cf => cf.columnName === key);
|
|
122
|
+
if (ticketCustomField) {
|
|
123
|
+
customFields.push({ id: ticketCustomField.zendeskId, value });
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
payload[key] = value;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (customFields.length > 0)
|
|
131
|
+
payload.custom_fields = customFields;
|
|
132
|
+
if (onCreate && typeof data.description === 'string') {
|
|
133
|
+
payload.comment = { body: data.description };
|
|
134
|
+
}
|
|
135
|
+
return payload;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.default = TicketCollection;
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlja2V0LWNvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sbGVjdGlvbnMvdGlja2V0LWNvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFZQSw4Q0FBaUQ7QUFDakQsd0ZBQThEO0FBQzlELGtFQUFnRjtBQUNoRixrRUFBb0Y7QUFDcEYsa0VBQW9GO0FBQ3BGLG9EQUFzRDtBQUV0RCxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQy9CLElBQUk7SUFDSixLQUFLO0lBQ0wsWUFBWTtJQUNaLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsVUFBVTtJQUNWLFdBQVc7SUFDWCxVQUFVO0lBQ1YsY0FBYztDQUNmLENBQUMsQ0FBQztBQUVILFNBQVMsVUFBVSxDQUFDLE9BQXdCLEVBQUUsS0FBYTtJQUN6RCxNQUFNLEdBQUcsR0FBYSxFQUFFLENBQUM7SUFFekIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMxQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQXFCLGdCQUFpQixTQUFRLGlDQUFxQjtJQUdqRSxZQUNFLFVBQXNCLEVBQ3RCLE1BQXFCLEVBQ3JCLFlBQWdDLEVBQ2hDLE1B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
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ZendeskClient } from '../client';
|
|
2
|
+
import type { CustomFieldEntry, ZendeskRecord } from '../types';
|
|
3
|
+
import type { Caller, DataSource, Filter, Logger, RecordData } from '@forestadmin/datasource-toolkit';
|
|
4
|
+
import SearchableCollection from './searchable-collection';
|
|
5
|
+
export default class UserCollection extends SearchableCollection {
|
|
6
|
+
private readonly customFields;
|
|
7
|
+
constructor(datasource: DataSource, client: ZendeskClient, customFields: CustomFieldEntry[], logger?: Logger);
|
|
8
|
+
create(caller: Caller, data: RecordData[]): Promise<RecordData[]>;
|
|
9
|
+
update(caller: Caller, filter: Filter, patch: RecordData): Promise<void>;
|
|
10
|
+
delete(caller: Caller, filter: Filter): Promise<void>;
|
|
11
|
+
protected findOne(id: number | string): Promise<ZendeskRecord | null>;
|
|
12
|
+
protected serializeRecord(record: ZendeskRecord): RecordData;
|
|
13
|
+
private buildPayload;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=user-collection.d.ts.map
|
|
@@ -0,0 +1,162 @@
|
|
|
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 datasource_1 = require("../datasource");
|
|
7
|
+
const enums_1 = require("../enums");
|
|
8
|
+
const base_zendesk_collection_1 = require("./base-zendesk-collection");
|
|
9
|
+
const searchable_collection_1 = __importDefault(require("./searchable-collection"));
|
|
10
|
+
const serializer_1 = require("./ticket/serializer");
|
|
11
|
+
const SORTABLE = {
|
|
12
|
+
created_at: 'created_at',
|
|
13
|
+
updated_at: 'updated_at',
|
|
14
|
+
name: 'name',
|
|
15
|
+
};
|
|
16
|
+
const READ_ONLY_INPUTS = new Set(['id', 'created_at', 'updated_at']);
|
|
17
|
+
function getUserFieldSchemas() {
|
|
18
|
+
return {
|
|
19
|
+
id: {
|
|
20
|
+
type: 'Column',
|
|
21
|
+
columnType: 'Number',
|
|
22
|
+
isPrimaryKey: true,
|
|
23
|
+
isReadOnly: true,
|
|
24
|
+
isSortable: false,
|
|
25
|
+
filterOperators: new Set(base_zendesk_collection_1.ID_OPS),
|
|
26
|
+
},
|
|
27
|
+
email: {
|
|
28
|
+
type: 'Column',
|
|
29
|
+
columnType: 'String',
|
|
30
|
+
filterOperators: new Set(base_zendesk_collection_1.STRING_OPS),
|
|
31
|
+
},
|
|
32
|
+
name: {
|
|
33
|
+
type: 'Column',
|
|
34
|
+
columnType: 'String',
|
|
35
|
+
isSortable: true,
|
|
36
|
+
filterOperators: new Set(base_zendesk_collection_1.STRING_OPS),
|
|
37
|
+
},
|
|
38
|
+
role: {
|
|
39
|
+
type: 'Column',
|
|
40
|
+
columnType: 'Enum',
|
|
41
|
+
enumValues: [...enums_1.USER_ROLES],
|
|
42
|
+
filterOperators: new Set(base_zendesk_collection_1.STRING_OPS),
|
|
43
|
+
},
|
|
44
|
+
phone: {
|
|
45
|
+
type: 'Column',
|
|
46
|
+
columnType: 'String',
|
|
47
|
+
filterOperators: new Set(base_zendesk_collection_1.STRING_OPS),
|
|
48
|
+
},
|
|
49
|
+
organization_id: {
|
|
50
|
+
type: 'Column',
|
|
51
|
+
columnType: 'Number',
|
|
52
|
+
filterOperators: new Set(base_zendesk_collection_1.NUMBER_OPS),
|
|
53
|
+
},
|
|
54
|
+
time_zone: {
|
|
55
|
+
type: 'Column',
|
|
56
|
+
columnType: 'String',
|
|
57
|
+
filterOperators: new Set(),
|
|
58
|
+
},
|
|
59
|
+
locale: {
|
|
60
|
+
type: 'Column',
|
|
61
|
+
columnType: 'String',
|
|
62
|
+
filterOperators: new Set(),
|
|
63
|
+
},
|
|
64
|
+
verified: {
|
|
65
|
+
type: 'Column',
|
|
66
|
+
columnType: 'Boolean',
|
|
67
|
+
filterOperators: new Set(base_zendesk_collection_1.BOOLEAN_OPS),
|
|
68
|
+
},
|
|
69
|
+
suspended: {
|
|
70
|
+
type: 'Column',
|
|
71
|
+
columnType: 'Boolean',
|
|
72
|
+
filterOperators: new Set(base_zendesk_collection_1.BOOLEAN_OPS),
|
|
73
|
+
},
|
|
74
|
+
created_at: {
|
|
75
|
+
type: 'Column',
|
|
76
|
+
columnType: 'Date',
|
|
77
|
+
isReadOnly: true,
|
|
78
|
+
isSortable: true,
|
|
79
|
+
filterOperators: new Set(base_zendesk_collection_1.DATE_OPS),
|
|
80
|
+
},
|
|
81
|
+
updated_at: {
|
|
82
|
+
type: 'Column',
|
|
83
|
+
columnType: 'Date',
|
|
84
|
+
isReadOnly: true,
|
|
85
|
+
isSortable: true,
|
|
86
|
+
filterOperators: new Set(base_zendesk_collection_1.DATE_OPS),
|
|
87
|
+
},
|
|
88
|
+
organization: {
|
|
89
|
+
type: 'ManyToOne',
|
|
90
|
+
foreignCollection: datasource_1.COLLECTION_NAMES.organization,
|
|
91
|
+
foreignKey: 'organization_id',
|
|
92
|
+
foreignKeyTarget: 'id',
|
|
93
|
+
},
|
|
94
|
+
requested_tickets: {
|
|
95
|
+
type: 'OneToMany',
|
|
96
|
+
foreignCollection: datasource_1.COLLECTION_NAMES.ticket,
|
|
97
|
+
originKey: 'requester_id',
|
|
98
|
+
originKeyTarget: 'id',
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
class UserCollection extends searchable_collection_1.default {
|
|
103
|
+
constructor(datasource, client, customFields, logger) {
|
|
104
|
+
super(datasource_1.COLLECTION_NAMES.user, datasource, client, 'user', SORTABLE, logger);
|
|
105
|
+
this.customFields = customFields;
|
|
106
|
+
this.addFields(getUserFieldSchemas());
|
|
107
|
+
this.addCustomFields(customFields);
|
|
108
|
+
}
|
|
109
|
+
async create(caller, data) {
|
|
110
|
+
const created = [];
|
|
111
|
+
for (const item of data) {
|
|
112
|
+
// eslint-disable-next-line no-await-in-loop
|
|
113
|
+
const raw = await this.client.createUser(this.buildPayload(item));
|
|
114
|
+
created.push((0, serializer_1.serializeUser)(raw));
|
|
115
|
+
}
|
|
116
|
+
return created;
|
|
117
|
+
}
|
|
118
|
+
async update(caller, filter, patch) {
|
|
119
|
+
const ids = await this.resolveIds(filter, caller.timezone);
|
|
120
|
+
const payload = this.buildPayload(patch);
|
|
121
|
+
for (const id of ids) {
|
|
122
|
+
// eslint-disable-next-line no-await-in-loop
|
|
123
|
+
await this.client.updateUser(id, payload);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async delete(caller, filter) {
|
|
127
|
+
const ids = await this.resolveIds(filter, caller.timezone);
|
|
128
|
+
for (const id of ids) {
|
|
129
|
+
// eslint-disable-next-line no-await-in-loop
|
|
130
|
+
await this.client.deleteUser(id);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
findOne(id) {
|
|
134
|
+
return this.client.findUser(id);
|
|
135
|
+
}
|
|
136
|
+
serializeRecord(record) {
|
|
137
|
+
return (0, serializer_1.serializeUser)(record);
|
|
138
|
+
}
|
|
139
|
+
buildPayload(data) {
|
|
140
|
+
const payload = {};
|
|
141
|
+
const userFields = {};
|
|
142
|
+
for (const [key, value] of Object.entries(data)) {
|
|
143
|
+
if (READ_ONLY_INPUTS.has(key) || key === 'requested_tickets' || key === 'organization') {
|
|
144
|
+
// ignored
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
const customField = this.customFields.find(cf => cf.columnName === key);
|
|
148
|
+
if (customField?.zendeskKey) {
|
|
149
|
+
userFields[customField.zendeskKey] = value;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
payload[key] = value;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (Object.keys(userFields).length > 0)
|
|
157
|
+
payload.user_fields = userFields;
|
|
158
|
+
return payload;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
exports.default = UserCollection;
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbGxlY3Rpb25zL3VzZXItY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVdBLDhDQUFpRDtBQUNqRCxvQ0FBc0M7QUFDdEMsdUVBQWtHO0FBQ2xHLG9GQUEyRDtBQUMzRCxvREFBb0Q7QUFFcEQsTUFBTSxRQUFRLEdBQTJCO0lBQ3ZDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLElBQUksRUFBRSxNQUFNO0NBQ2IsQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFFckUsU0FBUyxtQkFBbUI7SUFDMUIsT0FBTztRQUNMLEVBQUUsRUFBRTtZQUNGLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFLFFBQVE7WUFDcEIsWUFBWSxFQUFFLElBQUk7WUFDbEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsZUFBZSxFQUFFLElBQUksR0FBRyxDQUFDLGdDQUFNLENBQUM7U0FDakM7UUFDRCxLQUFLLEVBQUU7WUFDTCxJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLGVBQWUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxvQ0FBVSxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxFQUFFO1lBQ0osSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsUUFBUTtZQUNwQixVQUFVLEVBQUUsSUFBSTtZQUNoQixlQUFlLEVBQUUsSUFBSSxHQUFHLENBQUMsb0NBQVUsQ0FBQztTQUNyQztRQUNELElBQUksRUFBRTtZQUNKLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFLE1BQU07WUFDbEIsVUFBVSxFQUFFLENBQUMsR0FBRyxrQkFBVSxDQUFDO1lBQzNC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
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ZendeskClient } from './client';
|
|
2
|
+
import type { CustomFieldMapping } from './types';
|
|
3
|
+
import type { Logger } from '@forestadmin/datasource-toolkit';
|
|
4
|
+
import { BaseDataSource } from '@forestadmin/datasource-toolkit';
|
|
5
|
+
export declare const COLLECTION_NAMES: {
|
|
6
|
+
readonly ticket: "zendesk_ticket";
|
|
7
|
+
readonly user: "zendesk_user";
|
|
8
|
+
readonly organization: "zendesk_organization";
|
|
9
|
+
};
|
|
10
|
+
export default class ZendeskDataSource extends BaseDataSource {
|
|
11
|
+
readonly client: ZendeskClient;
|
|
12
|
+
readonly customFieldMapping: CustomFieldMapping;
|
|
13
|
+
static create(client: ZendeskClient, logger?: Logger): Promise<ZendeskDataSource>;
|
|
14
|
+
private constructor();
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=datasource.d.ts.map
|