node-freeagent2
Version:
Node.js OAuth2 REST Library for use with the FreeAgent v2 API, with Passport Authentication Strategy
222 lines (192 loc) • 7.35 kB
JavaScript
// Generated by CoffeeScript 1.7.1
(function() {
var FreeAgent, crypto, proxyUrl, qs, request, _;
request = require('request');
crypto = require('crypto');
qs = require('querystring');
_ = require('underscore');
proxyUrl = process.env.HTTPS_PROXY || process.env.https_proxy;
FreeAgent = (function() {
function FreeAgent(access_token, sandboxMode) {
this.access_token = access_token;
if (sandboxMode) {
this.baseUri = 'https://api.sandbox.freeagent.com/v2/';
} else {
this.baseUri = 'https://api.freeagent.com/v2/';
}
}
FreeAgent.prototype._prepareHeaders = function(access_token, options) {
if (!options) {
options = {};
}
return _.extend(options, {
proxy: proxyUrl,
headers: {
'Accept': 'application/json',
'User-Agent': 'node-freeagent2',
'Authorization': "Bearer " + access_token
}
});
};
FreeAgent.prototype._getRequest = function(url, options, callback) {
var requestUri;
requestUri = this.baseUri + url;
if (options) {
requestUri += '?' + qs.stringify(options);
}
return request.get(this._prepareHeaders(this.access_token, {
uri: requestUri,
json: true
}), function(error, response, body) {
if (!error) {
if (response.statusCode < 400) {
return callback(null, body);
} else {
return callback(new Error("" + response.statusCode + " : " + body.errors.error.message));
}
} else {
return callback(error);
}
});
};
FreeAgent.prototype._postRequest = function(url, data, callback) {
var requestUri;
requestUri = this.baseUri + url;
return request.post(this._prepareHeaders(this.access_token, {
uri: requestUri,
body: data,
json: true
}), function(error, response, body) {
if (!error) {
if (response.statusCode < 400) {
return callback(null, body);
} else {
return callback(new Error("" + response.statusCode + " : " + body.errors.error.message));
}
} else {
return callback(error);
}
});
};
FreeAgent.prototype._processParams = function(optionsOrCallback, callback) {
if (typeof optionsOrCallback === 'function') {
return {
options: null,
callback: optionsOrCallback
};
} else {
if (callback) {
return {
options: optionsOrCallback,
callback: callback
};
} else {
throw new Error('No callback defined!');
}
}
};
FreeAgent.prototype.refreshToken = function(refresh_token, client_id, client_secret, callback) {
return request.post({
url: this.baseUri + 'token_endpoint',
headers: {
'Accept': 'application/json',
'User-Agent': 'node-freeagent2',
'Authorization': 'Basic ' + new Buffer("" + client_id + ":" + client_secret).toString('base64')
},
json: {
grant_type: 'refresh_token',
refresh_token: refresh_token
}
}, function(error, response, body) {
if (!error && response && body.access_token) {
this.access_token = body.access_token;
return callback(null, body.access_token);
} else {
return callback(error);
}
});
};
FreeAgent.prototype.getCompany = function(optionsOrCallback, callback) {
var params;
params = this._processParams(optionsOrCallback, callback);
return this._getRequest('company', params.options, function(error, data) {
if (!error && data && data.company) {
return params.callback(null, data.company);
} else {
return params.callback(error);
}
});
};
FreeAgent.prototype.getProjects = function(optionsOrCallback, callback) {
var params;
params = this._processParams(optionsOrCallback, callback);
return this._getRequest('projects', params.options, params.callback);
};
FreeAgent.prototype.getProjectWithId = function(projectUri, optionsOrCallback, callback) {
var params;
params = this._processParams(optionsOrCallback, callback);
return this._getRequest('projects/' + projectUri, params.options, params.callback);
};
FreeAgent.prototype.getTasksForProject = function(projectUri, optionsOrCallback, callback) {
var params;
params = this._processParams(optionsOrCallback, callback);
return this._getRequest('tasks/' + projectUri, params.options, params.callback);
};
FreeAgent.prototype.getUsers = function(optionsOrCallback, callback) {
var params;
params = this._processParams(optionsOrCallback, callback);
return this._getRequest('users', params.options, params.callback);
};
FreeAgent.prototype.getTimeslips = function(optionsOrCallback, callback) {
var params;
params = this._processParams(optionsOrCallback, callback);
return this._getRequest('timeslips', params.options, params.callback);
};
FreeAgent.prototype.getInvoices = function(optionsOrCallback, callback) {
var params;
params = this._processParams(optionsOrCallback, callback);
return this._getRequest('invoices', params.options, params.callback);
};
FreeAgent.prototype.getInvoicesForProject = function(projectUri, optionsOrCallback, callback) {
var params;
params = this._processParams(optionsOrCallback, callback);
return this._getRequest('invoices', _.extend(params.options, {
project: projectUri
}), params.callback);
};
FreeAgent.prototype.getExpenses = function(optionsOrCallback, callback) {
var params;
params = this._processParams(optionsOrCallback, callback);
return this._getRequest('expenses', params.options, params.callback);
};
FreeAgent.prototype.createExpense = function(optionsOrCallback, callback) {
var params;
params = this._processParams(optionsOrCallback, callback);
return this._postRequest('expenses', params.options, params.callback);
};
FreeAgent.prototype.getCurrentUser = function(optionsOrCallback, callback) {
var params;
params = this._processParams(optionsOrCallback, callback);
return this._getRequest('users/me', params.options, params.callback);
};
FreeAgent.prototype.getOpenBills = function(optionsOrCallback, callback) {
var params;
params = this._processParams(optionsOrCallback, callback);
return this._getRequest('bills', {
view: 'open'
}, params.callback);
};
FreeAgent.prototype.getContacts = function(optionsOrCallback, callback) {
var params;
params = this._processParams(optionsOrCallback, callback);
return this._getRequest('contacts', params.options, params.callback);
};
FreeAgent.prototype.getCategories = function(optionsOrCallback, callback) {
var params;
params = this._processParams(optionsOrCallback, callback);
return this._getRequest('categories', params.options, params.callback);
};
return FreeAgent;
})();
module.exports = FreeAgent;
}).call(this);