UNPKG

22.8 kBJavaScriptView Raw
1'use strict';
2
3// eslint-disable-next-line import/order
4var config = require("./config");
5var https = /^http:/.test(config().upload_prefix) ? require('http') : require('https');
6var querystring = require("querystring");
7var Q = require('q');
8var url = require('url');
9var utils = require("./utils");
10var ensureOption = require('./utils/ensureOption').defaults(config());
11
12var extend = utils.extend,
13 includes = utils.includes,
14 only = utils.only,
15 ensurePresenceOf = utils.ensurePresenceOf;
16
17
18var TRANSFORMATIONS_URI = "transformations";
19
20function call_api(method, uri, params, callback, options) {
21 var handle_response = void 0,
22 query_params = void 0;
23 ensurePresenceOf({ method, uri });
24 var deferred = Q.defer();
25 var cloudinary = ensureOption(options, "upload_prefix", "https://api.cloudinary.com");
26 var cloud_name = ensureOption(options, "cloud_name");
27 var api_key = ensureOption(options, "api_key");
28 var api_secret = ensureOption(options, "api_secret");
29
30 method = method.toUpperCase();
31 var api_url = [cloudinary, "v1_1", cloud_name].concat(uri).join("/");
32 var content_type = 'application/x-www-form-urlencoded';
33 if (options.content_type === 'json') {
34 query_params = JSON.stringify(params);
35 content_type = 'application/json';
36 } else {
37 query_params = querystring.stringify(params);
38 }
39 if (method === "GET") {
40 api_url += "?" + query_params;
41 }
42 var request_options = url.parse(api_url);
43 request_options = extend(request_options, {
44 method: method,
45 headers: {
46 'Content-Type': content_type,
47 'User-Agent': utils.getUserAgent()
48 },
49 auth: api_key + ":" + api_secret
50 });
51 if (options.agent != null) {
52 request_options.agent = options.agent;
53 }
54 if (method !== "GET") {
55 request_options.headers['Content-Length'] = Buffer.byteLength(query_params);
56 }
57 handle_response = function handle_response(res) {
58 if (includes([200, 400, 401, 403, 404, 409, 420, 500], res.statusCode)) {
59 var buffer = "";
60 var error = false;
61 res.on("data", function (d) {
62 buffer += d;
63 return buffer;
64 });
65 res.on("end", function () {
66 var result = void 0;
67 if (error) {
68 return;
69 }
70 try {
71 result = JSON.parse(buffer);
72 } catch (e) {
73 result = {
74 error: {
75 message: "Server return invalid JSON response. Status Code " + res.statusCode
76 }
77 };
78 }
79 if (result.error) {
80 result.error.http_code = res.statusCode;
81 } else {
82 result.rate_limit_allowed = parseInt(res.headers["x-featureratelimit-limit"]);
83 result.rate_limit_reset_at = new Date(res.headers["x-featureratelimit-reset"]);
84 result.rate_limit_remaining = parseInt(res.headers["x-featureratelimit-remaining"]);
85 }
86 if (result.error) {
87 deferred.reject(result);
88 } else {
89 deferred.resolve(result);
90 }
91 if (typeof callback === "function") {
92 callback(result);
93 }
94 });
95 res.on("error", function (e) {
96 error = true;
97 var err_obj = {
98 error: {
99 message: e,
100 http_code: res.statusCode
101 }
102 };
103 deferred.reject(err_obj.error);
104 if (typeof callback === "function") {
105 callback(err_obj);
106 }
107 });
108 } else {
109 var err_obj = {
110 error: {
111 message: "Server returned unexpected status code - " + res.statusCode,
112 http_code: res.statusCode
113 }
114 };
115 deferred.reject(err_obj.error);
116 if (typeof callback === "function") {
117 callback(err_obj);
118 }
119 }
120 };
121 var request = https.request(request_options, handle_response);
122 request.on("error", function (e) {
123 deferred.reject(e);
124 return typeof callback === "function" ? callback({ error: e }) : void 0;
125 });
126 request.setTimeout(ensureOption(options, "timeout", 60000));
127 if (method !== "GET") {
128 request.write(query_params);
129 }
130 request.end();
131 return deferred.promise;
132}
133
134function deleteResourcesParams(options) {
135 var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
136
137 return extend(params, only(options, "keep_original", "invalidate", "next_cursor", "transformations"));
138}
139
140exports.ping = function ping(callback) {
141 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
142
143 return call_api("get", ["ping"], {}, callback, options);
144};
145
146exports.usage = function usage(callback) {
147 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
148
149 return call_api("get", ["usage"], {}, callback, options);
150};
151
152exports.resource_types = function resource_types(callback) {
153 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
154
155 return call_api("get", ["resources"], {}, callback, options);
156};
157
158exports.resources = function resources(callback) {
159 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
160
161 var resource_type = void 0,
162 type = void 0,
163 uri = void 0;
164 resource_type = options.resource_type || "image";
165 type = options.type;
166 uri = ["resources", resource_type];
167 if (type != null) {
168 uri.push(type);
169 }
170 if (options.start_at != null && Object.prototype.toString.call(options.start_at) === '[object Date]') {
171 options.start_at = options.start_at.toUTCString();
172 }
173 return call_api("get", uri, only(options, "next_cursor", "max_results", "prefix", "tags", "context", "direction", "moderations", "start_at"), callback, options);
174};
175
176exports.resources_by_tag = function resources_by_tag(tag, callback) {
177 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
178
179 var resource_type = void 0,
180 uri = void 0;
181 resource_type = options.resource_type || "image";
182 uri = ["resources", resource_type, "tags", tag];
183 return call_api("get", uri, only(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations"), callback, options);
184};
185
186exports.resources_by_context = function resources_by_context(key, value, callback) {
187 var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
188
189 var params = void 0,
190 resource_type = void 0,
191 uri = void 0;
192 resource_type = options.resource_type || "image";
193 uri = ["resources", resource_type, "context"];
194 params = only(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations");
195 params.key = key;
196 if (value != null) {
197 params.value = value;
198 }
199 return call_api("get", uri, params, callback, options);
200};
201
202exports.resources_by_moderation = function resources_by_moderation(kind, status, callback) {
203 var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
204
205 var resource_type = void 0,
206 uri = void 0;
207 resource_type = options.resource_type || "image";
208 uri = ["resources", resource_type, "moderations", kind, status];
209 return call_api("get", uri, only(options, "next_cursor", "max_results", "tags", "context", "direction", "moderations"), callback, options);
210};
211
212exports.resources_by_ids = function resources_by_ids(public_ids, callback) {
213 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
214
215 var params = void 0,
216 resource_type = void 0,
217 type = void 0,
218 uri = void 0;
219 resource_type = options.resource_type || "image";
220 type = options.type || "upload";
221 uri = ["resources", resource_type, type];
222 params = only(options, "tags", "context", "moderations");
223 params["public_ids[]"] = public_ids;
224 return call_api("get", uri, params, callback, options);
225};
226
227exports.resource = function resource(public_id, callback) {
228 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
229
230 var resource_type = void 0,
231 type = void 0,
232 uri = void 0;
233 resource_type = options.resource_type || "image";
234 type = options.type || "upload";
235 uri = ["resources", resource_type, type, public_id];
236 return call_api("get", uri, only(options, "exif", "colors", "derived_next_cursor", "faces", "image_metadata", "pages", "phash", "coordinates", "max_results"), callback, options);
237};
238
239exports.restore = function restore(public_ids, callback) {
240 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
241
242 var resource_type = void 0,
243 type = void 0,
244 uri = void 0;
245 resource_type = options.resource_type || "image";
246 type = options.type || "upload";
247 uri = ["resources", resource_type, type, "restore"];
248 return call_api("post", uri, {
249 public_ids: public_ids
250 }, callback, options);
251};
252
253exports.update = function update(public_id, callback) {
254 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
255
256 var params = void 0,
257 resource_type = void 0,
258 type = void 0,
259 uri = void 0;
260 resource_type = options.resource_type || "image";
261 type = options.type || "upload";
262 uri = ["resources", resource_type, type, public_id];
263 params = utils.updateable_resource_params(options);
264 if (options.moderation_status != null) {
265 params.moderation_status = options.moderation_status;
266 }
267 return call_api("post", uri, params, callback, options);
268};
269
270exports.delete_resources = function delete_resources(public_ids, callback) {
271 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
272
273 var resource_type = void 0,
274 type = void 0,
275 uri = void 0;
276 resource_type = options.resource_type || "image";
277 type = options.type || "upload";
278 uri = ["resources", resource_type, type];
279 return call_api("delete", uri, deleteResourcesParams(options, {
280 "public_ids[]": public_ids
281 }), callback, options);
282};
283
284exports.delete_resources_by_prefix = function delete_resources_by_prefix(prefix, callback) {
285 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
286
287 var resource_type = void 0,
288 type = void 0,
289 uri = void 0;
290 resource_type = options.resource_type || "image";
291 type = options.type || "upload";
292 uri = ["resources", resource_type, type];
293 return call_api("delete", uri, deleteResourcesParams(options, {
294 prefix: prefix
295 }), callback, options);
296};
297
298exports.delete_resources_by_tag = function delete_resources_by_tag(tag, callback) {
299 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
300
301 var resource_type = void 0,
302 uri = void 0;
303 resource_type = options.resource_type || "image";
304 uri = ["resources", resource_type, "tags", tag];
305 return call_api("delete", uri, deleteResourcesParams(options), callback, options);
306};
307
308exports.delete_all_resources = function delete_all_resources(callback) {
309 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
310
311 var resource_type = void 0,
312 type = void 0,
313 uri = void 0;
314
315 resource_type = options.resource_type || "image";
316 type = options.type || "upload";
317 uri = ["resources", resource_type, type];
318 return call_api("delete", uri, deleteResourcesParams(options, {
319 all: true
320 }), callback, options);
321};
322
323exports.delete_derived_resources = function delete_derived_resources(derived_resource_ids, callback) {
324 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
325
326 var uri = void 0;
327 uri = ["derived_resources"];
328 return call_api("delete", uri, {
329 "derived_resource_ids[]": derived_resource_ids
330 }, callback, options);
331};
332
333exports.delete_derived_by_transformation = function delete_derived_by_transformation(public_ids, transformations, callback) {
334 var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
335
336 var params = void 0,
337 resource_type = void 0,
338 type = void 0,
339 uri = void 0;
340 resource_type = options.resource_type || "image";
341 type = options.type || "upload";
342 uri = "resources/" + resource_type + "/" + type;
343 params = extend({
344 "public_ids[]": public_ids
345 }, only(options, "invalidate"));
346 params.keep_original = true;
347 params.transformations = utils.build_eager(transformations);
348 return call_api("delete", uri, params, callback, options);
349};
350
351exports.tags = function tags(callback) {
352 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
353
354 var resource_type = void 0,
355 uri = void 0;
356 resource_type = options.resource_type || "image";
357 uri = ["tags", resource_type];
358 return call_api("get", uri, only(options, "next_cursor", "max_results", "prefix"), callback, options);
359};
360
361exports.transformations = function transformations(callback) {
362 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
363
364 var params = only(options, "next_cursor", "max_results", "named");
365 return call_api("get", TRANSFORMATIONS_URI, params, callback, options);
366};
367
368exports.transformation = function transformation(transformationName, callback) {
369 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
370
371 var params = only(options, "next_cursor", "max_results");
372 params.transformation = utils.build_eager(transformationName);
373 return call_api("get", TRANSFORMATIONS_URI, params, callback, options);
374};
375
376exports.delete_transformation = function delete_transformation(transformationName, callback) {
377 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
378
379 var params = {};
380 params.transformation = utils.build_eager(transformationName);
381 return call_api("delete", TRANSFORMATIONS_URI, params, callback, options);
382};
383
384exports.update_transformation = function update_transformation(transformationName, updates, callback) {
385 var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
386
387 var params = only(updates, "allowed_for_strict");
388 params.transformation = utils.build_eager(transformationName);
389 if (updates.unsafe_update != null) {
390 params.unsafe_update = utils.build_eager(updates.unsafe_update);
391 }
392 return call_api("put", TRANSFORMATIONS_URI, params, callback, options);
393};
394
395exports.create_transformation = function create_transformation(name, definition, callback) {
396 var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
397
398 var params = { name };
399 params.transformation = utils.build_eager(definition);
400 return call_api("post", TRANSFORMATIONS_URI, params, callback, options);
401};
402
403exports.upload_presets = function upload_presets(callback) {
404 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
405
406 return call_api("get", ["upload_presets"], only(options, "next_cursor", "max_results"), callback, options);
407};
408
409exports.upload_preset = function upload_preset(name, callback) {
410 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
411
412 var uri = void 0;
413 uri = ["upload_presets", name];
414 return call_api("get", uri, {}, callback, options);
415};
416
417exports.delete_upload_preset = function delete_upload_preset(name, callback) {
418 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
419
420 var uri = void 0;
421 uri = ["upload_presets", name];
422 return call_api("delete", uri, {}, callback, options);
423};
424
425exports.update_upload_preset = function update_upload_preset(name, callback) {
426 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
427
428 var params = void 0,
429 uri = void 0;
430 uri = ["upload_presets", name];
431 params = utils.merge(utils.clear_blank(utils.build_upload_params(options)), only(options, "unsigned", "disallow_public_id"));
432 return call_api("put", uri, params, callback, options);
433};
434
435exports.create_upload_preset = function create_upload_preset(callback) {
436 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
437
438 var params = void 0,
439 uri = void 0;
440 uri = ["upload_presets"];
441 params = utils.merge(utils.clear_blank(utils.build_upload_params(options)), only(options, "name", "unsigned", "disallow_public_id"));
442 return call_api("post", uri, params, callback, options);
443};
444
445exports.root_folders = function root_folders(callback) {
446 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
447
448 var uri = void 0;
449 uri = ["folders"];
450 return call_api("get", uri, {}, callback, options);
451};
452
453exports.sub_folders = function sub_folders(path, callback) {
454 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
455
456 var uri = void 0;
457 uri = ["folders", path];
458 return call_api("get", uri, {}, callback, options);
459};
460
461exports.delete_folder = function delete_folder(path, callback) {
462 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
463
464 var uri = void 0;
465 uri = ["folders", path];
466 return call_api("delete", uri, {}, callback, options);
467};
468
469exports.upload_mappings = function upload_mappings(callback) {
470 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
471
472 var params = void 0;
473 params = only(options, "next_cursor", "max_results");
474 return call_api("get", "upload_mappings", params, callback, options);
475};
476
477exports.upload_mapping = function upload_mapping(name, callback) {
478 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
479
480 if (name == null) {
481 name = null;
482 }
483 return call_api("get", 'upload_mappings', {
484 folder: name
485 }, callback, options);
486};
487
488exports.delete_upload_mapping = function delete_upload_mapping(name, callback) {
489 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
490
491 return call_api("delete", 'upload_mappings', {
492 folder: name
493 }, callback, options);
494};
495
496exports.update_upload_mapping = function update_upload_mapping(name, callback) {
497 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
498
499 var params = void 0;
500 params = only(options, "template");
501 params.folder = name;
502 return call_api("put", 'upload_mappings', params, callback, options);
503};
504
505exports.create_upload_mapping = function create_upload_mapping(name, callback) {
506 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
507
508 var params = void 0;
509 params = only(options, "template");
510 params.folder = name;
511 return call_api("post", 'upload_mappings', params, callback, options);
512};
513
514function publishResource(byKey, value, callback) {
515 var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
516
517 var params = void 0,
518 resource_type = void 0,
519 uri = void 0;
520 params = only(options, "type", "invalidate", "overwrite");
521 params[byKey] = value;
522 resource_type = options.resource_type || "image";
523 uri = ["resources", resource_type, "publish_resources"];
524 options = extend({
525 resource_type: resource_type
526 }, options);
527 return call_api("post", uri, params, callback, options);
528}
529
530exports.publish_by_prefix = function publish_by_prefix(prefix, callback) {
531 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
532
533 return publishResource("prefix", prefix, callback, options);
534};
535
536exports.publish_by_tag = function publish_by_tag(tag, callback) {
537 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
538
539 return publishResource("tag", tag, callback, options);
540};
541
542exports.publish_by_ids = function publish_by_ids(public_ids, callback) {
543 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
544
545 return publishResource("public_ids", public_ids, callback, options);
546};
547
548exports.list_streaming_profiles = function list_streaming_profiles(callback) {
549 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
550
551 return call_api("get", "streaming_profiles", {}, callback, options);
552};
553
554exports.get_streaming_profile = function get_streaming_profile(name, callback) {
555 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
556
557 return call_api("get", "streaming_profiles/" + name, {}, callback, options);
558};
559
560exports.delete_streaming_profile = function delete_streaming_profile(name, callback) {
561 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
562
563 return call_api("delete", "streaming_profiles/" + name, {}, callback, options);
564};
565
566exports.update_streaming_profile = function update_streaming_profile(name, callback) {
567 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
568
569 var params = void 0;
570 params = utils.build_streaming_profiles_param(options);
571 return call_api("put", "streaming_profiles/" + name, params, callback, options);
572};
573
574exports.create_streaming_profile = function create_streaming_profile(name, callback) {
575 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
576
577 var params = void 0;
578 params = utils.build_streaming_profiles_param(options);
579 params.name = name;
580 return call_api("post", 'streaming_profiles', params, callback, options);
581};
582
583function updateResourcesAccessMode(access_mode, by_key, value, callback) {
584 var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
585
586 var params = void 0,
587 resource_type = void 0,
588 type = void 0;
589 resource_type = options.resource_type || "image";
590 type = options.type || "upload";
591 params = {
592 access_mode: access_mode
593 };
594 params[by_key] = value;
595 return call_api("post", "resources/" + resource_type + "/" + type + "/update_access_mode", params, callback, options);
596}
597
598exports.search = function search(params, callback) {
599 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
600
601 options.content_type = 'json';
602 return call_api("post", "resources/search", params, callback, options);
603};
604
605exports.update_resources_access_mode_by_prefix = function update_resources_access_mode_by_prefix(access_mode, prefix, callback) {
606 var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
607
608 return updateResourcesAccessMode(access_mode, "prefix", prefix, callback, options);
609};
610
611exports.update_resources_access_mode_by_tag = function update_resources_access_mode_by_tag(access_mode, tag, callback) {
612 var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
613
614 return updateResourcesAccessMode(access_mode, "tag", tag, callback, options);
615};
616
617exports.update_resources_access_mode_by_ids = function update_resources_access_mode_by_ids(access_mode, ids, callback) {
618 var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
619
620 return updateResourcesAccessMode(access_mode, "public_ids[]", ids, callback, options);
621};
\No newline at end of file