UNPKG

4 kBJavaScriptView Raw
1const Joi = require('@hapi/joi');
2const { validate, prepare } = require('../../utils/options');
3
4// Validation
5const _type = Joi.string().valid('tickets', 'organizations', 'users');
6const _id = Joi.number().min(1);
7const _name = Joi.string().min(1);
8const _data = Joi.object();
9
10// Initialize Endpoint
11module.exports = (options = {}) => {
12 const { error } = validate(options);
13 if (error) throw new Error(error.details[0].message);
14
15 const { url, headers } = prepare(options);
16
17 return {
18 /**
19 * List Tags
20 *
21 * GET /api/v2/tags.json
22 * https://developer.zendesk.com/rest_api/docs/support/tags#list-tags
23 */
24 list: () => {
25 // Ignore any options
26 return {
27 method: 'GET',
28 url: `${url}/api/v2/tags.json`,
29 headers
30 };
31 },
32
33 /**
34 * Show Tags
35 *
36 * GET /api/v2/tickets/{id}/tags.json
37 * GET /api/v2/organizations/{id}/tags.json
38 * GET /api/v2/users/{id}/tags.json
39 * https://developer.zendesk.com/rest_api/docs/support/tags#show-tags
40 */
41 show: (options = {}) => {
42 const { error } = Joi.object({
43 type: _type.required(),
44 id: _id.required()
45 }).validate(options);
46 if (error) throw new Error(error.details[0].message);
47
48 const { type, id } = options;
49 return {
50 method: 'GET',
51 url: `${url}/api/v2/${type}/${id}/tags.json`,
52 headers
53 };
54 },
55
56 /**
57 * Set Tags
58 *
59 * POST /api/v2/tickets/{id}/tags.json
60 * POST /api/v2/organizations/{id}/tags.json
61 * POST /api/v2/users/{id}/tags.json
62 * https://developer.zendesk.com/rest_api/docs/support/tags#set-tags
63 */
64 set: (options = {}) => {
65 const { error } = Joi.object({
66 type: _type.required(),
67 id: _id.required(),
68 data: _data.required()
69 }).validate(options);
70 if (error) throw new Error(error.details[0].message);
71
72 const { type, id, data } = options;
73 return {
74 method: 'POST',
75 url: `${url}/api/v2/${type}/${id}/tags.json`,
76 headers,
77 data
78 };
79 },
80
81 /**
82 * Add Tags
83 *
84 * PUT /api/v2/tickets/{id}/tags.json
85 * PUT /api/v2/organizations/{id}/tags.json
86 * PUT /api/v2/users/{id}/tags.json
87 * https://developer.zendesk.com/rest_api/docs/support/tags#add-tags
88 */
89 add: (options = {}) => {
90 const { error } = Joi.object({
91 type: _type.required(),
92 id: _id.required(),
93 data: _data.required()
94 }).validate(options);
95 if (error) throw new Error(error.details[0].message);
96
97 const { type, id, data } = options;
98 return {
99 method: 'PUT',
100 url: `${url}/api/v2/${type}/${id}/tags.json`,
101 headers,
102 data
103 };
104 },
105
106 /**
107 * Remove Tags
108 *
109 * DELETE /api/v2/tickets/{id}/tags.json
110 * DELETE /api/v2/organizations/{id}/tags.json
111 * DELETE /api/v2/users/{id}/tags.json
112 * https://developer.zendesk.com/rest_api/docs/support/tags#remove-tags
113 */
114 remove: (options = {}) => {
115 const { error } = Joi.object({
116 type: _type.required(),
117 id: _id.required(),
118 data: _data.required()
119 }).validate(options);
120 if (error) throw new Error(error.details[0].message);
121
122 const { type, id, data } = options;
123 return {
124 method: 'DELETE',
125 url: `${url}/api/v2/${type}/${id}/tags.json`,
126 headers,
127 data
128 };
129 },
130
131 /**
132 * Autocomplete Tags
133 *
134 * GET /api/v2/autocomplete/tags.json?name={name}
135 * https://developer.zendesk.com/rest_api/docs/support/tags#autocomplete-tags
136 */
137 autocomplete: (options = {}) => {
138 const { error } = Joi.object({
139 name: _name.required()
140 }).validate(options);
141 if (error) throw new Error(error.details[0].message);
142
143 const { name } = options;
144 return {
145 method: 'GET',
146 url: `${url}/api/v2/autocomplete/tags.json?name=${name}`,
147 headers
148 };
149 }
150 };
151};