UNPKG

built.io

Version:

SDK for Built.io Backend

68 lines (64 loc) 1.66 kB
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; }