UNPKG

xo-lib

Version:
89 lines (69 loc) 2.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.XoError = void 0; var _trimEnd = _interopRequireDefault(require("lodash/trimEnd")); var _makeError = require("make-error"); var _jsonrpcWebsocketClient = require("jsonrpc-websocket-client"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const noop = () => {}; class XoError extends _makeError.BaseError {} exports.XoError = XoError; class Xo extends _jsonrpcWebsocketClient.JsonRpcWebSocketClient { constructor() { let { credentials, url = '.', ...opts } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; opts.url = `${(0, _trimEnd.default)(url, '/')}/api/`; super(opts); this._credentials = credentials; this._user = null; this.on(_jsonrpcWebsocketClient.OPEN, () => { if (this._credentials) { this._signIn(this._credentials).catch(noop); } }); this.on(_jsonrpcWebsocketClient.CLOSED, () => { this._user = null; }); } get user() { return this._user; } call(method, args, i) { if (method.startsWith('session.')) { return Promise.reject(new XoError('session.*() methods are disabled from this interface')); } const promise = super.call(method, args); promise.retry = predicate => promise.catch(error => { i = (i || 0) + 1; if (predicate(error, i)) { return this.call(method, args, i); } }); return promise; } refreshUser() { return super.call('session.getUser').then(user => { return this._user = user; }); } signIn(credentials) { this._credentials = credentials; return this._signIn(credentials); } _signIn(credentials) { return super.call('session.signIn', credentials).then(user => { this._user = user; this.emit('authenticated'); }, error => { this.emit('authenticationFailure', error); throw error; }); } } exports.default = Xo; //# sourceMappingURL=index.js.map