balanc
Version:
Modern accounting (receipts, billings, pdf storage ...) toolchain and managed service
220 lines (173 loc) • 6.62 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Balanc = undefined;
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _querystring = require('querystring');
var _querystring2 = _interopRequireDefault(_querystring);
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _isomorphicFetch = require('isomorphic-fetch');
var _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch);
var _package2 = require('../package.json');
var _package3 = _interopRequireDefault(_package2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var test = process.env.NODE_ENV === 'test';
var defaultConfig = {
apiUrl: process.env.BALANC_API || 'https://eddyy.com/v1',
_ver: _package3.default.version,
domain: typeof window !== 'undefined' ? window.location.hostname : undefined,
domainEmail: '' };
var ctxFields = (0, _keys2.default)(defaultConfig);
var Balanc = exports.Balanc = function () {
function Balanc(config) {
(0, _classCallCheck3.default)(this, Balanc);
this.conf = defaultConfig;
this.config(config);
}
// Exchange Level
(0, _createClass3.default)(Balanc, [{
key: 'createDeal',
value: function createDeal(body) {
return this.fetch({ method: 'POST', url: 'deal', body: body });
}
}, {
key: 'markArrive',
value: function markArrive(dealKey, itemKeys) {
return this.fetch({ method: 'POST', url: 'deal/' + dealKey + '/markArrive', body: { itemKeys: itemKeys } });
}
}, {
key: 'receiptUrl',
value: function receiptUrl(_ref) {
var _key = _ref._key;
var _conf = this.conf;
var apiUrl = _conf.apiUrl;
var domain = _conf.domain;
var domainKey = _conf.domainKey;
var filename = encodeURIComponent(domain) + '/' + encodeURIComponent(_key) + '.pdf';
return apiUrl + '/receipt/' + filename + '?' + _querystring2.default.stringify(_lodash2.default.pickBy({ domainKey: domainKey, test: test }));
}
// Payment Reminder
}, {
key: 'getReceivables',
value: function getReceivables(_ref2) {
var from = _ref2.from;
var to = _ref2.to;
return this.fetch({ url: 'receivable', body: { from: from, to: to } });
}
}, {
key: 'billUrl',
value: function billUrl(_ref3) {
var from = _ref3.from;
var to = _ref3.to;
var _conf2 = this.conf;
var apiUrl = _conf2.apiUrl;
var domain = _conf2.domain;
var domainKey = _conf2.domainKey;
var filename = encodeURIComponent(domain) + '/' + encodeURIComponent(from) + '/' + encodeURIComponent(to);
return apiUrl + '/bill/' + filename + '.pdf?' + _querystring2.default.stringify(_lodash2.default.pickBy({ domainKey: domainKey, test: test }));
}
// Account Level
}, {
key: 'getDeals',
value: function getDeals(_ref4) {
var from = _ref4.from;
var to = _ref4.to;
return this.fetch({ url: 'deal', body: { from: from, to: to } });
}
}, {
key: 'getAccount',
value: function getAccount(_ref5) {
var user = _ref5.user;
var account = _ref5.account;
var field = _ref5.field;
return this.fetch({ url: 'account', body: { user: user, account: account, field: field } });
}
}, {
key: 'accountExcelUrl',
value: function accountExcelUrl(_ref6) {
var user = _ref6.user;
var account = _ref6.account;
var field = _ref6.field;
var _conf3 = this.conf;
var apiUrl = _conf3.apiUrl;
var domain = _conf3.domain;
var domainKey = _conf3.domainKey;
var filename = encodeURIComponent(domain) + '/' + encodeURIComponent(user) + '/' + encodeURIComponent(account);
if (field) {
filename += '/' + encodeURIComponent(field);
}
return apiUrl + '/bill/' + filename + '.xlsx?' + _querystring2.default.stringify(_lodash2.default.pickBy({ domainKey: domainKey, test: test }));
}
// util
}, {
key: 'config',
value: function config(conf) {
if (!conf) return this.conf;
_lodash2.default.assign(this.conf, _lodash2.default.pick(conf, ctxFields));
return this;
}
}, {
key: 'mixinConfig',
value: function mixinConfig(ctx) {
var method = ctx.method = ctx.method ? ctx.method.toUpperCase() : 'GET';
var _conf4 = this.conf;
var apiUrl = _conf4.apiUrl;
var conf = (0, _objectWithoutProperties3.default)(_conf4, ['apiUrl']);
var body = (0, _extends3.default)({}, conf, ctx.body);
if (method === 'GET') {
ctx.url = apiUrl + '/' + ctx.url + '?' + _querystring2.default.stringify(body);
} else {
ctx.url = apiUrl + '/' + ctx.url;
ctx.body = body;
}
return ctx;
}
}, {
key: 'fetch',
value: function fetch(ctx) {
this.mixinConfig(ctx);
if (ctx.method === 'GET') {
// delete body
delete ctx.body;
} else {
// headers
ctx.headers = (0, _extends3.default)({
'Content-Type': 'application/json',
'Accept': 'application/json',
'x-ver': ctx.body._ver
}, ctx.headers);
if (test) {
ctx.headers['x-test'] = test;
}
delete ctx.body._ver;
// body
ctx.body = (0, _stringify2.default)(ctx.body);
}
return (0, _isomorphicFetch2.default)(ctx.url, ctx).then(function (response) {
if (response.status >= 200 && response.status < 400) {
var contentType = response.headers.get('Content-Type');
return _lodash2.default.startsWith(contentType, 'application/json') ? response.json() : response;
} else {
var error = new Error(response.statusText);
error.response = response;
throw error;
}
});
}
}]);
return Balanc;
}();
exports.default = new Balanc();