UNPKG

20.9 kBJavaScriptView Raw
1const utils = require("./utils");
2const call_api = require("./api_client/call_api");
3
4const { extend, only } = utils;
5
6const TRANSFORMATIONS_URI = "transformations";
7
8function deleteResourcesParams(options, params = {}) {
9 return extend(params, only(options, "keep_original", "invalidate", "next_cursor", "transformations"));
10}
11
12exports.ping = function ping(callback, options = {}) {
13 return call_api("get", ["ping"], {}, callback, options);
14};
15
16exports.usage = function usage(callback, options = {}) {
17 return call_api("get", ["usage"], {}, callback, options);
18};
19
20exports.resource_types = function resource_types(callback, options = {}) {
21 return call_api("get", ["resources"], {}, callback, options);
22};
23
24exports.resources = function resources(callback, options = {}) {
25 let resource_type, type, uri;
26 resource_type = options.resource_type || "image";
27 type = options.type;
28 uri = ["resources", resource_type];
29 if (type != null) {
30 uri.push(type);
31 }
32 if ((options.start_at != null) && Object.prototype.toString.call(options.start_at) === '[object Date]') {
33 options.start_at = options.start_at.toUTCString();
34 }
35 return call_api("get", uri, only(options, "next_cursor", "max_results", "prefix", "tags", "context", "direction", "moderations", "start_at"), callback, options);
36};
37
38exports.resources_by_tag = function resources_by_tag(tag, callback, options = {}) {
39 let resource_type, uri;
40 resource_type = options.resource_type || "image";
41 uri = ["resources", resource_type, "tags", tag];
42 return call_api("get", uri, only(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations"), callback, options);
43};
44
45exports.resources_by_context = function resources_by_context(key, value, callback, options = {}) {
46 let params, resource_type, uri;
47 resource_type = options.resource_type || "image";
48 uri = ["resources", resource_type, "context"];
49 params = only(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations");
50 params.key = key;
51 if (value != null) {
52 params.value = value;
53 }
54 return call_api("get", uri, params, callback, options);
55};
56
57exports.resources_by_moderation = function resources_by_moderation(kind, status, callback, options = {}) {
58 let resource_type, uri;
59 resource_type = options.resource_type || "image";
60 uri = ["resources", resource_type, "moderations", kind, status];
61 return call_api("get", uri, only(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations"), callback, options);
62};
63
64exports.resources_by_ids = function resources_by_ids(public_ids, callback, options = {}) {
65 let params, resource_type, type, uri;
66 resource_type = options.resource_type || "image";
67 type = options.type || "upload";
68 uri = ["resources", resource_type, type];
69 params = only(options, "tags", "context", "moderations");
70 params["public_ids[]"] = public_ids;
71 return call_api("get", uri, params, callback, options);
72};
73
74exports.resource = function resource(public_id, callback, options = {}) {
75 let resource_type, type, uri;
76 resource_type = options.resource_type || "image";
77 type = options.type || "upload";
78 uri = ["resources", resource_type, type, public_id];
79 return call_api("get", uri, only(options, "exif", "colors", "derived_next_cursor", "faces", "image_metadata", "pages", "phash", "coordinates", "max_results"), callback, options);
80};
81
82exports.restore = function restore(public_ids, callback, options = {}) {
83 let resource_type, type, uri;
84 resource_type = options.resource_type || "image";
85 type = options.type || "upload";
86 uri = ["resources", resource_type, type, "restore"];
87 return call_api("post", uri, {
88 public_ids: public_ids,
89 }, callback, options);
90};
91
92exports.update = function update(public_id, callback, options = {}) {
93 let params, resource_type, type, uri;
94 resource_type = options.resource_type || "image";
95 type = options.type || "upload";
96 uri = ["resources", resource_type, type, public_id];
97 params = utils.updateable_resource_params(options);
98 if (options.moderation_status != null) {
99 params.moderation_status = options.moderation_status;
100 }
101 return call_api("post", uri, params, callback, options);
102};
103
104exports.delete_resources = function delete_resources(public_ids, callback, options = {}) {
105 let resource_type, type, uri;
106 resource_type = options.resource_type || "image";
107 type = options.type || "upload";
108 uri = ["resources", resource_type, type];
109 return call_api("delete", uri, deleteResourcesParams(options, {
110 "public_ids[]": public_ids,
111 }), callback, options);
112};
113
114exports.delete_resources_by_prefix = function delete_resources_by_prefix(prefix, callback, options = {}) {
115 let resource_type, type, uri;
116 resource_type = options.resource_type || "image";
117 type = options.type || "upload";
118 uri = ["resources", resource_type, type];
119 return call_api("delete", uri, deleteResourcesParams(options, {
120 prefix: prefix,
121 }), callback, options);
122};
123
124exports.delete_resources_by_tag = function delete_resources_by_tag(tag, callback, options = {}) {
125 let resource_type, uri;
126 resource_type = options.resource_type || "image";
127 uri = ["resources", resource_type, "tags", tag];
128 return call_api("delete", uri, deleteResourcesParams(options), callback, options);
129};
130
131exports.delete_all_resources = function delete_all_resources(callback, options = {}) {
132 let resource_type, type, uri;
133
134 resource_type = options.resource_type || "image";
135 type = options.type || "upload";
136 uri = ["resources", resource_type, type];
137 return call_api("delete", uri, deleteResourcesParams(options, {
138 all: true,
139 }), callback, options);
140};
141
142exports.delete_derived_resources = function delete_derived_resources(derived_resource_ids, callback, options = {}) {
143 let uri;
144 uri = ["derived_resources"];
145 return call_api("delete", uri, {
146 "derived_resource_ids[]": derived_resource_ids,
147 }, callback, options);
148};
149
150exports.delete_derived_by_transformation = function delete_derived_by_transformation(
151 public_ids,
152 transformations,
153 callback,
154 options = {},
155) {
156 let params, resource_type, type, uri;
157 resource_type = options.resource_type || "image";
158 type = options.type || "upload";
159 uri = "resources/" + resource_type + "/" + type;
160 params = extend({
161 "public_ids[]": public_ids,
162 }, only(options, "invalidate"));
163 params.keep_original = true;
164 params.transformations = utils.build_eager(transformations);
165 return call_api("delete", uri, params, callback, options);
166};
167
168exports.tags = function tags(callback, options = {}) {
169 let resource_type, uri;
170 resource_type = options.resource_type || "image";
171 uri = ["tags", resource_type];
172 return call_api("get", uri, only(options, "next_cursor", "max_results", "prefix"), callback, options);
173};
174
175exports.transformations = function transformations(callback, options = {}) {
176 const params = only(options, "next_cursor", "max_results", "named");
177 return call_api("get", TRANSFORMATIONS_URI, params, callback, options);
178};
179
180exports.transformation = function transformation(transformationName, callback, options = {}) {
181 const params = only(options, "next_cursor", "max_results");
182 params.transformation = utils.build_eager(transformationName);
183 return call_api("get", TRANSFORMATIONS_URI, params, callback, options);
184};
185
186exports.delete_transformation = function delete_transformation(transformationName, callback, options = {}) {
187 const params = {};
188 params.transformation = utils.build_eager(transformationName);
189 return call_api("delete", TRANSFORMATIONS_URI, params, callback, options);
190};
191
192exports.update_transformation = function update_transformation(transformationName, updates, callback, options = {}) {
193 const params = only(updates, "allowed_for_strict");
194 params.transformation = utils.build_eager(transformationName);
195 if (updates.unsafe_update != null) {
196 params.unsafe_update = utils.build_eager(updates.unsafe_update);
197 }
198 return call_api("put", TRANSFORMATIONS_URI, params, callback, options);
199};
200
201exports.create_transformation = function create_transformation(name, definition, callback, options = {}) {
202 const params = { name };
203 params.transformation = utils.build_eager(definition);
204 return call_api("post", TRANSFORMATIONS_URI, params, callback, options);
205};
206
207exports.upload_presets = function upload_presets(callback, options = {}) {
208 return call_api("get", ["upload_presets"], only(options, "next_cursor", "max_results"), callback, options);
209};
210
211exports.upload_preset = function upload_preset(name, callback, options = {}) {
212 let uri;
213 uri = ["upload_presets", name];
214 return call_api("get", uri, {}, callback, options);
215};
216
217exports.delete_upload_preset = function delete_upload_preset(name, callback, options = {}) {
218 let uri;
219 uri = ["upload_presets", name];
220 return call_api("delete", uri, {}, callback, options);
221};
222
223exports.update_upload_preset = function update_upload_preset(name, callback, options = {}) {
224 let params, uri;
225 uri = ["upload_presets", name];
226 params = utils.merge(utils.clear_blank(utils.build_upload_params(options)), only(options, "unsigned", "disallow_public_id", "live"));
227 return call_api("put", uri, params, callback, options);
228};
229
230exports.create_upload_preset = function create_upload_preset(callback, options = {}) {
231 let params, uri;
232 uri = ["upload_presets"];
233 params = utils.merge(utils.clear_blank(utils.build_upload_params(options)), only(options, "name", "unsigned", "disallow_public_id", "live"));
234 return call_api("post", uri, params, callback, options);
235};
236
237exports.root_folders = function root_folders(callback, options = {}) {
238 let uri;
239 uri = ["folders"];
240 return call_api("get", uri, {}, callback, options);
241};
242
243exports.sub_folders = function sub_folders(path, callback, options = {}) {
244 let uri;
245 uri = ["folders", path];
246 return call_api("get", uri, {}, callback, options);
247};
248
249exports.delete_folder = function delete_folder(path, callback, options = {}) {
250 let uri;
251 uri = ["folders", path];
252 return call_api("delete", uri, {}, callback, options);
253};
254
255exports.upload_mappings = function upload_mappings(callback, options = {}) {
256 let params;
257 params = only(options, "next_cursor", "max_results");
258 return call_api("get", "upload_mappings", params, callback, options);
259};
260
261exports.upload_mapping = function upload_mapping(name, callback, options = {}) {
262 if (name == null) {
263 name = null;
264 }
265 return call_api("get", 'upload_mappings', {
266 folder: name,
267 }, callback, options);
268};
269
270exports.delete_upload_mapping = function delete_upload_mapping(name, callback, options = {}) {
271 return call_api("delete", 'upload_mappings', {
272 folder: name,
273 }, callback, options);
274};
275
276exports.update_upload_mapping = function update_upload_mapping(name, callback, options = {}) {
277 let params;
278 params = only(options, "template");
279 params.folder = name;
280 return call_api("put", 'upload_mappings', params, callback, options);
281};
282
283exports.create_upload_mapping = function create_upload_mapping(name, callback, options = {}) {
284 let params;
285 params = only(options, "template");
286 params.folder = name;
287 return call_api("post", 'upload_mappings', params, callback, options);
288};
289
290function publishResource(byKey, value, callback, options = {}) {
291 let params, resource_type, uri;
292 params = only(options, "type", "invalidate", "overwrite");
293 params[byKey] = value;
294 resource_type = options.resource_type || "image";
295 uri = ["resources", resource_type, "publish_resources"];
296 options = extend({
297 resource_type: resource_type,
298 }, options);
299 return call_api("post", uri, params, callback, options);
300}
301
302exports.publish_by_prefix = function publish_by_prefix(prefix, callback, options = {}) {
303 return publishResource("prefix", prefix, callback, options);
304};
305
306exports.publish_by_tag = function publish_by_tag(tag, callback, options = {}) {
307 return publishResource("tag", tag, callback, options);
308};
309
310exports.publish_by_ids = function publish_by_ids(public_ids, callback, options = {}) {
311 return publishResource("public_ids", public_ids, callback, options);
312};
313
314exports.list_streaming_profiles = function list_streaming_profiles(callback, options = {}) {
315 return call_api("get", "streaming_profiles", {}, callback, options);
316};
317
318exports.get_streaming_profile = function get_streaming_profile(name, callback, options = {}) {
319 return call_api("get", "streaming_profiles/" + name, {}, callback, options);
320};
321
322exports.delete_streaming_profile = function delete_streaming_profile(name, callback, options = {}) {
323 return call_api("delete", "streaming_profiles/" + name, {}, callback, options);
324};
325
326exports.update_streaming_profile = function update_streaming_profile(name, callback, options = {}) {
327 let params;
328 params = utils.build_streaming_profiles_param(options);
329 return call_api("put", "streaming_profiles/" + name, params, callback, options);
330};
331
332exports.create_streaming_profile = function create_streaming_profile(name, callback, options = {}) {
333 let params;
334 params = utils.build_streaming_profiles_param(options);
335 params.name = name;
336 return call_api("post", 'streaming_profiles', params, callback, options);
337};
338
339function updateResourcesAccessMode(access_mode, by_key, value, callback, options = {}) {
340 let params, resource_type, type;
341 resource_type = options.resource_type || "image";
342 type = options.type || "upload";
343 params = {
344 access_mode: access_mode,
345 };
346 params[by_key] = value;
347 return call_api("post", "resources/" + resource_type + "/" + type + "/update_access_mode", params, callback, options);
348}
349
350exports.search = function search(params, callback, options = {}) {
351 options.content_type = 'json';
352 return call_api("post", "resources/search", params, callback, options);
353};
354
355exports.update_resources_access_mode_by_prefix = function update_resources_access_mode_by_prefix(
356 access_mode,
357 prefix,
358 callback,
359 options = {},
360) {
361 return updateResourcesAccessMode(access_mode, "prefix", prefix, callback, options);
362};
363
364exports.update_resources_access_mode_by_tag = function update_resources_access_mode_by_tag(
365 access_mode,
366 tag,
367 callback,
368 options = {},
369) {
370 return updateResourcesAccessMode(access_mode, "tag", tag, callback, options);
371};
372
373exports.update_resources_access_mode_by_ids = function update_resources_access_mode_by_ids(
374 access_mode,
375 ids,
376 callback,
377 options = {},
378) {
379 return updateResourcesAccessMode(access_mode, "public_ids[]", ids, callback, options);
380};
381
382/**
383 * Creates a new metadata field definition
384 *
385 * @see https://cloudinary.com/documentation/admin_api#create_a_metadata_field
386 *
387 * @param {Object} field The field to add
388 * @param {Function} callback Callback function
389 * @param {Object} options Configuration options
390 *
391 * @return {Object}
392 */
393exports.add_metadata_field = function add_metadata_field(field, callback, options = {}) {
394 const params = only(field, "external_id", "type", "label", "mandatory", "default_value", "validation", "datasource");
395 options.content_type = "json";
396 return call_api("post", ["metadata_fields"], params, callback, options);
397};
398
399/**
400 * Returns a list of all metadata field definitions
401 *
402 * @see https://cloudinary.com/documentation/admin_api#get_metadata_fields
403 *
404 * @param {Function} callback Callback function
405 * @param {Object} options Configuration options
406 *
407 * @return {Object}
408 */
409exports.list_metadata_fields = function list_metadata_fields(callback, options = {}) {
410 return call_api("get", ["metadata_fields"], {}, callback, options);
411};
412
413/**
414 * Deletes a metadata field definition.
415 *
416 * The field should no longer be considered a valid candidate for all other endpoints
417 *
418 * @see https://cloudinary.com/documentation/admin_api#delete_a_metadata_field_by_external_id
419 *
420 * @param {String} field_external_id The external id of the field to delete
421 * @param {Function} callback Callback function
422 * @param {Object} options Configuration options
423 *
424 * @return {Object}
425 */
426exports.delete_metadata_field = function delete_metadata_field(field_external_id, callback, options = {}) {
427 return call_api("delete", ["metadata_fields", field_external_id], {}, callback, options);
428};
429
430/**
431 * Get a metadata field by external id
432 *
433 * @see https://cloudinary.com/documentation/admin_api#get_a_metadata_field_by_external_id
434 *
435 * @param {String} external_id The ID of the metadata field to retrieve
436 * @param {Function} callback Callback function
437 * @param {Object} options Configuration options
438 *
439 * @return {Object}
440 */
441exports.metadata_field_by_field_id = function metadata_field_by_field_id(external_id, callback, options = {}) {
442 return call_api("get", ["metadata_fields", external_id], {}, callback, options);
443};
444
445/**
446 * Updates a metadata field by external id
447 *
448 * Updates a metadata field definition (partially, no need to pass the entire object) passed as JSON data.
449 * See {@link https://cloudinary.com/documentation/admin_api#generic_structure_of_a_metadata_field Generic structure of a metadata field} for details.
450 *
451 * @see https://cloudinary.com/documentation/admin_api#update_a_metadata_field_by_external_id
452 *
453 * @param {String} external_id The ID of the metadata field to update
454 * @param {Object} field Updated values of metadata field
455 * @param {Function} callback Callback function
456 * @param {Object} options Configuration options
457 *
458 * @return {Object}
459 */
460exports.update_metadata_field = function update_metadata_field(external_id, field, callback, options = {}) {
461 const params = only(field, "external_id", "type", "label", "mandatory", "default_value", "validation", "datasource");
462 options.content_type = "json";
463 return call_api("put", ["metadata_fields", external_id], params, callback, options);
464};
465
466/**
467 * Updates a metadata field datasource
468 *
469 * Updates the datasource of a supported field type (currently only enum and set), passed as JSON data. The
470 * update is partial: datasource entries with an existing external_id will be updated and entries with new
471 * external_id’s (or without external_id’s) will be appended.
472 *
473 * @see https://cloudinary.com/documentation/admin_api#update_a_metadata_field_datasource
474 *
475 * @param {String} field_external_id The ID of the field to update
476 * @param {Object} entries_external_id Updated values for datasource
477 * @param {Function} callback Callback function
478 * @param {Object} options Configuration options
479 *
480 * @return {Object}
481 */
482exports.update_metadata_field_datasource = function update_metadata_field_datasource(field_external_id, entries_external_id, callback, options = {}) {
483 const params = only(entries_external_id, "values");
484 options.content_type = "json";
485 return call_api("put", ["metadata_fields", field_external_id, "datasource"], params, callback, options);
486};
487
488/**
489 * Deletes entries in a metadata field datasource
490 *
491 * Deletes (blocks) the datasource entries for a specified metadata field definition. Sets the state of the
492 * entries to inactive. This is a soft delete, the entries still exist under the hood and can be activated again
493 * with the restore datasource entries method.
494 *
495 * @see https://cloudinary.com/documentation/admin_api#delete_entries_in_a_metadata_field_datasource
496 *
497 * @param {String} field_external_id The ID of the metadata field
498 * @param {Array} entries_external_id An array of IDs of datasource entries to delete
499 * @param {Function} callback Callback function
500 * @param {Object} options Configuration options
501 *
502 * @return {Object}
503 */
504exports.delete_datasource_entries = function delete_datasource_entries(field_external_id, entries_external_id, callback, options = {}) {
505 options.content_type = "json";
506 const params = { external_ids: entries_external_id };
507 return call_api("delete", ["metadata_fields", field_external_id, "datasource"], params, callback, options);
508};
509
510/**
511 * Restores entries in a metadata field datasource
512 *
513 * Restores (unblocks) any previously deleted datasource entries for a specified metadata field definition.
514 * Sets the state of the entries to active.
515 *
516 * @see https://cloudinary.com/documentation/admin_api#restore_entries_in_a_metadata_field_datasource
517 *
518 * @param {String} field_external_id The ID of the metadata field
519 * @param {Array} entries_external_id An array of IDs of datasource entries to delete
520 * @param {Function} callback Callback function
521 * @param {Object} options Configuration options
522 *
523 * @return {Object}
524 */
525exports.restore_metadata_field_datasource = function restore_metadata_field_datasource(field_external_id, entries_external_id, callback, options = {}) {
526 options.content_type = "json";
527 const params = { external_ids: entries_external_id };
528 return call_api("post", ["metadata_fields", field_external_id, "datasource_restore"], params, callback, options);
529};