UNPKG

kred

Version:

Kred API client for Node.js

101 lines (89 loc) 2.69 kB
var http = require('http'); var url = require('url'); /** * Clone simple object to avoid references */ function clone(source){ var target = {}; for(var i in source){ if(source.hasOwnProperty(i)){ target[i] = source[i]; } } return target; } /** * Kred constructor * * @param {String} appId * @param {String} appKey * @param {Object} [options] Override default values for protocol, host and port */ function Kred(appId, appKey, options){ options = options || {}; if(!appId) throw new Error('Please provide an app id to constructor'); if(!appKey) throw new Error('Please provide an app key to constructor'); this.appId = appId; this.appKey = appKey; this.protocol = options.protocol || 'http'; this.host = options.host || 'api.kred.com'; this.port = options.port || 80; } /** * Known API endpoints */ var endpoints = [ 'kredscore', 'kred', 'kredentials', 'dailyscore', 'dailypoints', 'activity-stream', 'FriendStream', 'kredinfluence', 'kredoutreach', 'kredretweetinfluence' ]; endpoints.forEach(function(endpoint){ var name = endpoint.replace(/-([a-z])/g, function($){ return $[1].toUpperCase(); }); // activity-stream becomes activityStream name = name[0].toLowerCase() + name.slice(1); // FriendStream becomes friendStream Kred.prototype[name] = function(parameters, callback){ this.request(endpoint, parameters, callback); }; }); /** * Fetch data from custom endpoint * * @param {String} endpoint * @param {Object} parameters * @param {Function} callback */ Kred.prototype.request = function(endpoint, parameters, callback){ // Prepare uri var query = clone(parameters || {}); query.app_id = this.appId; query.app_key = this.appKey; var uri = url.format({ protocol: this.protocol, hostname: this.host, port: this.port, pathname: endpoint, query: query }); // Make call to API var rawData = ''; var request = http.get(uri, function(response){ // Collect returned data response.on('data', function(chunk){ rawData += chunk.toString(); }); // Parse collected data response.on('end', function(){ var data; try{ data = JSON.parse(rawData); }catch(e){} if(data && response.statusCode === 200){ callback(undefined, data); }else{ callback(new Error(response.statusCode + ', Error requesting details')); } }); }); request.on('error', function(e){ callback(e); }); }; module.exports = Kred;