built.io
Version:
SDK for Built.io Backend
68 lines (64 loc) • 1.66 kB
JavaScript
var rest = require('rest');
var mime = require('rest/interceptor/mime');
var errorCode = require('rest/interceptor/errorCode');
var when = require('when');
var Events = require('../events');
var client = rest.wrap(mime, {
mime: 'application/json'
})
.wrap(errorCode, {
code: 400
});
module.exports.makeCall = function(object) {
Events.trigger("http:start");
return client(object)
.then(function(response) {
Events.trigger("http:end");
return structureResponse(response);
})
.catch(function(error) {
throw structureResponse(error);
});
}
function structureResponse(response) {
return {
headers: response.headers,
status: response.status,
entity: response.entity
}
}
module.exports.makeXMLHttpRequest = function(object){
Events.trigger("upload:start");
var http = new XMLHttpRequest();
http.open('POST',object.url,true);
for(var header in object.headers){
http.setRequestHeader(header,object.headers[header]);
}
var deferred = registerHttpListeners(http);
http.upload.onprogress = function(e){
deferred.notify({
bytesUploaded :e.loaded,
bytesTotal :e.total,
timestamp :e.timeStamp
});
}
http.send(object.formData);
return deferred.promise;
}
function registerHttpListeners(http){
var deferred = when.defer();
http.onreadystatechange = function (e) {
if(http.readyState == 4){
if (http.status >= 200 && http.status <300) {
Events.trigger("upload:end");
deferred.resolve(http.responseText);
} else{
deferred.reject(http.statusText);
}
}
};
http.ontimeout = http.onerror= function (event) {
deferred.reject(http.statusText);
}
return deferred;
}