UNPKG

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