simple-cw-node
Version:
A simple ChatWork API client for Node.js (UNOFFICIAL)
74 lines (60 loc) • 1.93 kB
JavaScript
var pack = require('../package.json'),
agent = require('superagent'),
_ = require('lodash'),
http_verbs = ['get', 'post', 'put', 'del'];
// enable deferred.
_.mixin(require('underscore.deferred'));
module.exports = function () {
var chatwork = {
apiVersion: 'v2',
sdkVersion: pack.version,
token: undefined,
// ----------------------
Deferred: _.Deferred,
when: _.when
};
var ua = 'Simple-CW-Node/' + chatwork.sdkVersion;
chatwork.init = function (params) {
params = params || {};
this.type = params.type;
this.token = params.token;
};
chatwork.api = function (method, api) {
var callback, dfd, done, url, request, authHeader, authValue
params = arguments[2];
if (_.isFunction(arguments[3])) {
callback = arguments[3];
} else if (_.isFunction(arguments[2])) {
callback = arguments[2];
} else {
dfd = _.Deferred();
}
done = function (err, res) {
err = err || res.body.errors;
if (callback) callback(err, res);
if (dfd) return err ? dfd.reject(err) : dfd.resolve(res);
};
url = 'https://api.chatwork.com/' + this.apiVersion + '/' + api;
request = agent[method];
if (this.type === 'oauth') {
authHeader = 'Authorization'
authValue = 'Bearer ' + this.token
}
else {
authHeader = 'X-ChatWorkToken'
authValue = this.token
}
request(url)
.type('form')
.set('User-Agent', ua)
.set(authHeader, authValue)
.send(params)
.end(done);
return dfd;
};
// methods
_.each(http_verbs, function (verb) {
chatwork[verb] = _.partial(chatwork.api, verb);
});
return chatwork;
};