apeman-service-api
Version:
Apeman service for API access.
165 lines (123 loc) • 8.86 kB
JavaScript
/**
* Service
* @class ApApiService
* @param {Object} store - Redux store
* @param {Object} options - Optional settings
*/
;
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _require = require('apeman-service-base'),
ApService = _require.ApService;
var apemanApiClient = require('apeman-api-client');
var _require2 = require('bwindow'),
get = _require2.get;
var co = require('co');
var abind = require('abind');
/** @lends ApApiService */
var ApApiService = function (_ApService) {
(0, _inherits3.default)(ApApiService, _ApService);
function ApApiService(store) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
(0, _classCallCheck3.default)(this, ApApiService);
var _this = (0, _possibleConstructorReturn3.default)(this, (ApApiService.__proto__ || (0, _getPrototypeOf2.default)(ApApiService)).call(this, store));
var s = _this;
abind(s, { proto: ApApiService.prototype });
abind(s);
var _options$pathname = options.pathname,
pathname = _options$pathname === undefined ? '/api' : _options$pathname;
s.api = apemanApiClient(s.url(pathname));
s.cache = {};
return _this;
}
/**
* Configure api
* @param {string} url
*/
(0, _createClass3.default)(ApApiService, [{
key: 'configure',
value: function configure(_ref) {
var url = _ref.url;
var s = this;
s.api = apemanApiClient(url);
}
/**
* Test reachability of the API
* @param args
* @returns {*}
*/
}, {
key: 'reach',
value: function reach() {
var _s$api;
var s = this;
return (_s$api = s.api).reach.apply(_s$api, arguments);
}
/**
* Use api
* @param {string} name - Name of API
* @returns {*}
*/
}, {
key: 'use',
value: function use(name) {
var s = this;
return co(_regenerator2.default.mark(function _callee() {
var cache, connected;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
cache = s.cache[name];
if (!cache) {
_context.next = 3;
break;
}
return _context.abrupt('return', cache);
case 3:
_context.next = 5;
return s.api.connect(name);
case 5:
connected = _context.sent;
s.cache[name] = connected;
return _context.abrupt('return', connected);
case 8:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
}
/**
* Get url
* @param {string} pathname - Url path name
* @returns {string} - Url
*/
}, {
key: 'url',
value: function url(pathname) {
var location = get('location');
if (!location) {
return '' + pathname;
}
var protocol = location.protocol,
host = location.host;
return protocol + '//' + host + pathname;
}
}]);
return ApApiService;
}(ApService);
module.exports = ApApiService;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwX2FwaV9zZXJ2aWNlLmpzIl0sIm5hbWVzIjpbInJlcXVpcmUiLCJBcFNlcnZpY2UiLCJhcGVtYW5BcGlDbGllbnQiLCJnZXQiLCJjbyIsImFiaW5kIiwiQXBBcGlTZXJ2aWNlIiwic3RvcmUiLCJvcHRpb25zIiwicyIsInByb3RvIiwicHJvdG90eXBlIiwicGF0aG5hbWUiLCJhcGkiLCJ1cmwiLCJjYWNoZSIsInJlYWNoIiwibmFtZSIsImNvbm5lY3QiLCJjb25uZWN0ZWQiLCJsb2NhdGlvbiIsInByb3RvY29sIiwiaG9zdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7QUFNQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztlQUVzQkEsUUFBUSxxQkFBUixDO0lBQWRDLFMsWUFBQUEsUzs7QUFDUixJQUFNQyxrQkFBa0JGLFFBQVEsbUJBQVIsQ0FBeEI7O2dCQUNnQkEsUUFBUSxTQUFSLEM7SUFBUkcsRyxhQUFBQSxHOztBQUNSLElBQU1DLEtBQUtKLFFBQVEsSUFBUixDQUFYO0FBQ0EsSUFBTUssUUFBUUwsUUFBUSxPQUFSLENBQWQ7O0FBRUE7O0lBQ01NLFk7OztBQUNKLHdCQUFhQyxLQUFiLEVBQWtDO0FBQUEsUUFBZEMsT0FBYyx1RUFBSixFQUFJO0FBQUE7O0FBQUEsa0pBQzFCRCxLQUQwQjs7QUFFaEMsUUFBTUUsU0FBTjtBQUNBSixVQUFNSSxDQUFOLEVBQVMsRUFBRUMsT0FBT0osYUFBYUssU0FBdEIsRUFBVDtBQUNBTixVQUFNSSxDQUFOO0FBSmdDLDRCQU81QkQsT0FQNEIsQ0FNOUJJLFFBTjhCO0FBQUEsUUFNOUJBLFFBTjhCLHFDQU1uQixNQU5tQjs7QUFRaENILE1BQUVJLEdBQUYsR0FBUVgsZ0JBQWdCTyxFQUFFSyxHQUFGLENBQU1GLFFBQU4sQ0FBaEIsQ0FBUjtBQUNBSCxNQUFFTSxLQUFGLEdBQVUsRUFBVjtBQVRnQztBQVVqQzs7QUFFRDs7Ozs7Ozs7b0NBSW9CO0FBQUEsVUFBUEQsR0FBTyxRQUFQQSxHQUFPOztBQUNsQixVQUFNTCxJQUFJLElBQVY7QUFDQUEsUUFBRUksR0FBRixHQUFRWCxnQkFBZ0JZLEdBQWhCLENBQVI7QUFDRDs7QUFFRDs7Ozs7Ozs7NEJBS2dCO0FBQUE7O0FBQ2QsVUFBTUwsSUFBSSxJQUFWO0FBQ0EsYUFBTyxZQUFFSSxHQUFGLEVBQU1HLEtBQU4seUJBQVA7QUFDRDs7QUFFRDs7Ozs7Ozs7d0JBS0tDLEksRUFBTTtBQUNULFVBQU1SLElBQUksSUFBVjtBQUNBLGFBQU9MLDhCQUFHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNKVyxxQkFESSxHQUNJTixFQUFFTSxLQUFGLENBQVNFLElBQVQsQ0FESjs7QUFBQSxxQkFFSkYsS0FGSTtBQUFBO0FBQUE7QUFBQTs7QUFBQSxpREFHQ0EsS0FIRDs7QUFBQTtBQUFBO0FBQUEsdUJBS2NOLEVBQUVJLEdBQUYsQ0FBTUssT0FBTixDQUFjRCxJQUFkLENBTGQ7O0FBQUE7QUFLSkUseUJBTEk7O0FBTVJWLGtCQUFFTSxLQUFGLENBQVNFLElBQVQsSUFBa0JFLFNBQWxCO0FBTlEsaURBT0RBLFNBUEM7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBSCxFQUFQO0FBU0Q7O0FBRUQ7Ozs7Ozs7O3dCQUtLUCxRLEVBQVU7QUFDYixVQUFNUSxXQUFXakIsSUFBSSxVQUFKLENBQWpCO0FBQ0EsVUFBSSxDQUFDaUIsUUFBTCxFQUFlO0FBQ2Isb0JBQVVSLFFBQVY7QUFDRDtBQUpZLFVBS0xTLFFBTEssR0FLY0QsUUFMZCxDQUtMQyxRQUxLO0FBQUEsVUFLS0MsSUFMTCxHQUtjRixRQUxkLENBS0tFLElBTEw7O0FBTWIsYUFBVUQsUUFBVixVQUF1QkMsSUFBdkIsR0FBOEJWLFFBQTlCO0FBQ0Q7OztFQTlEd0JYLFM7O0FBaUUzQnNCLE9BQU9DLE9BQVAsR0FBaUJsQixZQUFqQiIsImZpbGUiOiJhcF9hcGlfc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJsaWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlcnZpY2VcbiAqIEBjbGFzcyBBcEFwaVNlcnZpY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdG9yZSAtIFJlZHV4IHN0b3JlXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzXG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFwU2VydmljZSB9ID0gcmVxdWlyZSgnYXBlbWFuLXNlcnZpY2UtYmFzZScpXG5jb25zdCBhcGVtYW5BcGlDbGllbnQgPSByZXF1aXJlKCdhcGVtYW4tYXBpLWNsaWVudCcpXG5jb25zdCB7IGdldCB9ID0gcmVxdWlyZSgnYndpbmRvdycpXG5jb25zdCBjbyA9IHJlcXVpcmUoJ2NvJylcbmNvbnN0IGFiaW5kID0gcmVxdWlyZSgnYWJpbmQnKVxuXG4vKiogQGxlbmRzIEFwQXBpU2VydmljZSAqL1xuY2xhc3MgQXBBcGlTZXJ2aWNlIGV4dGVuZHMgQXBTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IgKHN0b3JlLCBvcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihzdG9yZSlcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGFiaW5kKHMsIHsgcHJvdG86IEFwQXBpU2VydmljZS5wcm90b3R5cGUgfSlcbiAgICBhYmluZChzKVxuICAgIGxldCB7XG4gICAgICBwYXRobmFtZSA9ICcvYXBpJ1xuICAgIH0gPSBvcHRpb25zXG4gICAgcy5hcGkgPSBhcGVtYW5BcGlDbGllbnQocy51cmwocGF0aG5hbWUpKVxuICAgIHMuY2FjaGUgPSB7fVxuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBhcGlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKi9cbiAgY29uZmlndXJlICh7IHVybCB9KSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBzLmFwaSA9IGFwZW1hbkFwaUNsaWVudCh1cmwpXG4gIH1cblxuICAvKipcbiAgICogVGVzdCByZWFjaGFiaWxpdHkgb2YgdGhlIEFQSVxuICAgKiBAcGFyYW0gYXJnc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIHJlYWNoICguLi5hcmdzKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICByZXR1cm4gcy5hcGkucmVhY2goLi4uYXJncylcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgYXBpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiBBUElcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICB1c2UgKG5hbWUpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIHJldHVybiBjbyhmdW5jdGlvbiAqICgpIHtcbiAgICAgIGxldCBjYWNoZSA9IHMuY2FjaGVbIG5hbWUgXVxuICAgICAgaWYgKGNhY2hlKSB7XG4gICAgICAgIHJldHVybiBjYWNoZVxuICAgICAgfVxuICAgICAgbGV0IGNvbm5lY3RlZCA9IHlpZWxkIHMuYXBpLmNvbm5lY3QobmFtZSlcbiAgICAgIHMuY2FjaGVbIG5hbWUgXSA9IGNvbm5lY3RlZFxuICAgICAgcmV0dXJuIGNvbm5lY3RlZFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHVybFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aG5hbWUgLSBVcmwgcGF0aCBuYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXJsXG4gICAqL1xuICB1cmwgKHBhdGhuYW1lKSB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBnZXQoJ2xvY2F0aW9uJylcbiAgICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gYCR7cGF0aG5hbWV9YFxuICAgIH1cbiAgICBjb25zdCB7IHByb3RvY29sLCBob3N0IH0gPSBsb2NhdGlvblxuICAgIHJldHVybiBgJHtwcm90b2NvbH0vLyR7aG9zdH0ke3BhdGhuYW1lfWBcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFwQXBpU2VydmljZVxuIl19