hunterio
Version:
Hunter.io SDK (unofficial)
50 lines (37 loc) • 1.28 kB
JavaScript
var fs = require('fs');
var async = require('async');
var request = require('request-json');
var calls = require('./calls');
function SDK(key, version, host) {
var clientBaseUrl = 'https://api.hunter.io' + '/' + (version || 'v2') + '/';
this.client = request.createClient(clientBaseUrl);
this.key = key;
}
Object.keys(calls).forEach(function(call) {
var def = calls[call];
SDK.prototype[call] = function() {
var args = [].slice.call(arguments);
var params = def.params || [];
var namedArgs = args.splice(0, params.length);
var path = params.reduce(function(prev, key, index) {
return prev.replace('{' + key + '}', namedArgs[index]);
}, def.path);
var queryParamHash = args.shift();
path += Object.keys(queryParamHash).reduce(function(str, key) {
return str + '&' + key + '=' + encodeURIComponent(queryParamHash[key]);
}, '?api_key=' + this.key);
var clientArgs = [path];
if (def.method === 'post' || def.method === 'put' || def.method === 'patch') {
clientArgs.push(args.shift());
}
var callback = args.shift();
clientArgs.push(function(err, res, body) {
if (err) {
return callback(err, null);
}
callback(null, body, res);
});
this.client[def.method].apply(this.client, clientArgs);
};
});
module.exports = SDK;