UNPKG

@xervo/api-util

Version:

wrapper to make API request simpler

131 lines (103 loc) 3.25 kB
const Assign = require('lodash.assign'); const Pick = require('lodash.pick'); const Superagent = require('superagent'); const URL = require('url'); const Util = require('util'); const API_URL = { protocol: 'https:', hostname: 'api.xervo.io', port: 443 }; const HEADERS = { 'Content-Type': 'application/json', 'Accept': 'application/json' }; function validData(data) { var isObject = {}.toString.call(data) === '[object Object]'; var isArray = Array.isArray(data); return isObject || isArray; } function makeRequest(agent, headers, token, done) { if (token) agent = agent.set('Authorization', Util.format('Token %s', token)); agent .set(headers) .end(function (err, response) { if (err) return done(err); return done(null, response.body); }); } module.exports = function (options) { var urlObject, headers; options = options || {}; urlObject = Assign({}, API_URL, Pick(options, Object.keys(API_URL))); headers = Assign({}, HEADERS, { 'API-Version': options.version || 'v2' }); function getURL(path) { var bits = path.split('?'); var obj = { pathname: bits[0], search: bits[1] }; return URL.format(Assign({}, urlObject, obj)); } return { get: function (endpoint, token, done) { var agent; if (typeof token === 'function') { done = token; token = options.token; } agent = Superagent.get(getURL(endpoint)); return makeRequest(agent, headers, token, done); }, post: function (endpoint, data, token, done) { var agent; // post('/path', done) if (typeof data === 'function') { done = data; return done(new Error('data required')); } // post('/path', '1234', done) if (typeof data === 'string' && typeof token === 'function') { done = token; return done(new Error('data required')); } // post('/path', {}, done) if (typeof token === 'function') { done = token; token = options.token; } if (!validData(data)) return done(new Error('data required')); agent = Superagent.post(getURL(endpoint)).send(data); return makeRequest(agent, headers, token, done); }, put: function (endpoint, data, token, done) { var agent; // put('/path', done) if (typeof data === 'function') { done = data; return done(new Error('data required')); } // put('/path', '1234', done) if (typeof data === 'string' && typeof token === 'function') { done = token; return done(new Error('data required')); } // put('/path', {}, done) if (typeof token === 'function') { done = token; token = options.token; } if (!validData(data)) return done(new Error('data required')); agent = Superagent.put(getURL(endpoint)).send(data); return makeRequest(agent, headers, token, done); }, delete: function (endpoint, token, done) { var agent; if (typeof token === 'function') { done = token; token = options.token; } agent = Superagent.delete(getURL(endpoint)); return makeRequest(agent, headers, token, done); } }; };