UNPKG

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