xo-lib
Version:
Library to connect to XO-Server
89 lines (69 loc) • 2.09 kB
JavaScript
;
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