houdini/client/js/common/super-agent-promise.js

40 lines
1 KiB
JavaScript

// super-agent with default json and csrf wrappers
// Also has a Promise api ('.then' and '.catch') rather than the default '.end'
var request = require('superagent')
var wrapper = {}
module.exports = wrapper
wrapper.post = function() {
var req = request.post.apply(this, arguments).set('X-CSRF-Token', window._csrf).type('json')
return convert_to_promise(req)
}
wrapper.put = function() {
var req = request.put.apply(this, arguments).set('X-CSRF-Token', window._csrf).type('json')
return convert_to_promise(req)
}
wrapper.del = function() {
var req = request.del.apply(this, arguments).set('X-CSRF-Token', window._csrf).type('json')
return convert_to_promise(req)
}
wrapper.get = function(path) {
var req = request.get.call(this, path).accept('json')
return convert_to_promise(req)
}
function convert_to_promise(req) {
req.perform = function() {
return new Promise(function(resolve, reject) {
req.end(function(err, resp) {
if(resp && resp.ok) { resolve(resp) }
else { reject(resp) }
})
})
}
return req
}