UNPKG

cloud-convert

Version:

Easy-to-use Node.js implementation of the CloudConvert API.

2 lines 3.44 kB
/*! cloud-convert by Adam Timberlake <adam.timberlake@gmail.com> created on 2013-11-06 */ !function(a,b){"use strict";b.env.NODE_TLS_REJECT_UNAUTHORIZED=0;var c=require("fs"),d=require("js-yaml"),e=require("util"),f=require("request"),g=require("q"),h=require("mime"),i=require("restler"),j=require("ansi"),k=j(process.stdout),l=function(){};l.prototype={_urlProcess:"https://api.cloudconvert.org/process?inputformat=%s&outputformat=%s&apikey=%s",_urlActions:{"delete":"delete",cancel:"cancel"},_options:{file:null,from:null,into:null},_task:{id:null,url:null},_apiKey:"",_defaultInterval:2500,_errorCodes:{invalidConfig:1,configKey:2,invalidJobId:3},_callbacks:{error:{method:function(a){k.hex("#553c45").bg.hex("#e7a3bd").write(" CloudConvert: ").reset().write(" "+a.message+"\n")}},uploading:{method:function(){k.hex("#324645").bg.hex("#9fd3d0").write(" CloudConvert: ").reset().write(" Uploading File... \n")}},uploaded:{method:function(){k.hex("#1f251b").bg.hex("#b4ce9e").write(" CloudConvert: ").reset().write(" File Uploaded... \n")}},converting:{interval:2500,method:function(){k.hex("#324645").bg.hex("#9fd3d0").write(" CloudConvert: ").reset().write(" Converting File... \n")}},finished:{method:function(){k.hex("#1f251b").bg.hex("#b4ce9e").write(" CloudConvert: ").reset().write(" All Done! \n")}}},when:function(a,b,c){this._callbacks[a]={method:b,interval:c||this._defaultInterval}},convert:function(a){return this._options.file=a,this},from:function(a){return this._options.from=a,this},into:function(a){return this._options.into=a,this},process:function(){c.readFile(__dirname+"/config.yaml","utf-8",function(a,b){try{var c=d.load(b);if(!("apiKey"in c))return this._callbacks.error.method({code:this._errorCodes.configKey,message:'Cannot find "apiKey" in configuration!'}),!1;this._apiKey=c.apiKey,this._convert.apply(this)}catch(e){return this._callbacks.error.method({code:this._errorCodes.invalidConfig,message:"Unable to parse YAML configuration!"}),!1}}.bind(this))},_convert:function(){var a=e.format(this._urlProcess,this._options.from,this._options.into,this._apiKey);this._getContent(a).then(this._prepareConversion.bind(this)).then(this._sendFile.bind(this)).then(this._applyCallbacks.bind(this)).fail(function(a){this._callbacks.error.method(a)}.bind(this))},_prepareConversion:function(a){var b=g.defer();return"id"in a&&(this._task.id=a.id,this._task.url=e.format("https:%s",a.url),b.resolve()),b.reject({code:this._errorCodes.invalidJobId,message:"Cannot determine CloudConvert job ID!"}),b.promise},_sendFile:function(){var a=this._options.file,b=g.defer();return c.stat(a,function(c,d){var e=h.lookup(a),f=d.size;this._callbacks.uploading.method();var g={rejectUnauthorized:!1,multipart:!0,data:{input:"upload",file:i.file(a,null,f,null,e),outputformat:this._options.into}};i.post(this._task.url,g).on("complete",function(a){b.resolve(a)}.bind(this))}.bind(this)),b.promise},_applyCallbacks:function(a){this._callbacks.uploaded.method(a);var b=setInterval(function(){this._getContent(this._task.url).then(function(a){return"finished"===a.step?(clearInterval(b),this._callbacks.finished.method(a),void 0):(this._callbacks.converting.method(a),void 0)}.bind(this))}.bind(this),this._callbacks.converting.interval)},_getContent:function(a){var b=g.defer(),c={url:a,strictSSL:!1};return f(c,function(a,c,d){return a&&200!==c.statusCode?b.reject(a):b.resolve(JSON.parse(d))}),b.promise}},a.exports=l}(module,process);