UNPKG

built.io

Version:

SDK for Built.io Backend

83 lines (77 loc) 2.21 kB
var R = require('ramda'); var when = require('when'); var Events = require('../events'); var utility = require('../utilities/utility'); module.exports.makeCall = R.curry(function(app, object) { var deferred = when.defer(); var url = object.path; var path = url.substr(url.search("/v")); if (object.params) { for (var property in object.params) { path = utility.addParam(path, property, object.params); } } function emitFn(socket) { socket.emit('api', { headers: object.headers, method: object.method, url: path, body: object.entity }, function(error, response) { if (response.statusCode >= 200 && response.statusCode < 300) deferred.resolve(structureResponse(response)); else deferred.reject(structureResponse(response)); if (error) deferred.reject(structureResponse(error)); }); } if(app.isSocketConnected()) { emitFn(app.getSocket()); }else{ app.getAdhocOperations().push(emitFn); } return deferred.promise; }); function structureResponse(response) { return { headers : response.headers, status : response.statusCode, entity : response.body } } 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; }