UNPKG

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
// 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);