UNPKG

balanc

Version:

Modern accounting (receipts, billings, pdf storage ...) toolchain and managed service

220 lines (173 loc) 6.62 kB
'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();