UNPKG

apeman-service-api

Version:
165 lines (123 loc) 8.86 kB
/** * Service * @class ApApiService * @param {Object} store - Redux store * @param {Object} options - Optional settings */ 'use strict'; 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