UNPKG

@ellcrys/spell

Version:

The official JavaScript library for Ellcrys

173 lines 9.29 kB
"use strict"; /** * @module RPCClient */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var jwt = require("jsonwebtoken"); var moment = require("moment"); var request_1 = __importDefault(require("request")); var v4_1 = __importDefault(require("uuid/v4")); var errors_1 = __importDefault(require("./errors")); /** * RPCClient connects to given host and port * of an Ellcrys node. * * @export * @class RPCClient */ var RPCClient = /** @class */ (function () { /** * Creates an instance of RPCClient. * * @param {Client} [client] The underlying JSON-RPC 2.0 client * @memberof RPCClient */ function RPCClient(client) { this.client = client; } /** * Call a RPC method * * @param {string} method The RPC method full name * @param {*} params The method's parameters * @returns {Promise} * @memberof RPCClient */ RPCClient.prototype.call = function (method, params) { var _this = this; return new Promise(function (resolve, reject) { // We can't make any call if client has not been initiated if (!_this.client) { return reject(errors_1.default.ClientNotInitialized); } // Add bearer token to the client option if available if (_this.token && _this.clientOpts) { // Decode the token to check whether it has expired. // If expired, return SessionTokenExpired error var decoded = jwt.decode(_this.token, { complete: true }); var expUtc = moment.unix(decoded.payload.exp); if (expUtc.isBefore(moment().utc())) { return reject(errors_1.default.SessionTokenExpired); } } // prettier-ignore _this.client.bearerToken = _this.token; _this.client.call(method, params, function (err, res) { if (err) { if (err.statusCode === 401) { return reject(errors_1.default.AuthRequired); } return reject(err); } return resolve(res); }); }); }; /** * Set the session token * * @param {string} token * @memberof RPCClient */ RPCClient.prototype.setToken = function (token) { this.token = token; }; return RPCClient; }()); exports.default = RPCClient; /** * Client handles connection, authentication and * invocation of methods of an RPC service * * @export * @class Client */ var Client = /** @class */ (function () { function Client() { /** * Bearer token to use * * @type {string} * @memberof Client */ this.bearerToken = ""; } /** * Create a Client from the given options * * @static * @param {ConnectOptions} opts * @returns {Client} * @memberof Client */ Client.fromOptions = function (opts) { var c = new Client(); c.opts = opts; return c; }; /** * Call an RPC method * * @param {string} method The method to be called * @param {any} params The parameter to pass to the method * @param {(err: any, result: any) => void} cb Callback to be invoked on success/failure * @memberof Client */ Client.prototype.call = function (method, params, cb) { var id = v4_1.default(); var obj = this.makeRequest(method, id, params); var opts = { uri: { hostname: this.opts.host, port: this.opts.port.toString(), protocol: this.opts.https ? "https:" : "http:", path: this.opts.path, }, timeout: 15000, json: obj, }; // Use bearer token if provided if (this.bearerToken) { opts.auth = { bearer: this.bearerToken, }; } // prettier-ignore request_1.default.post(opts, function (err, resp, body) { if (err) { return cb(err, null); } else if (resp.statusCode !== 200) { var msg = JSON.stringify(resp.body); var customErr = new Error(msg); customErr.data = msg; customErr.statusCode = resp.statusCode; return cb(customErr, null); } return cb(null, body.result); }); }; /** * Create JSON-RPC 2.0 request * * @private * @param {string} method * @param {string} id * @param {*} params * @memberof Client */ Client.prototype.makeRequest = function (method, id, params) { return { jsonrpc: "2.0", id: id ? id : v4_1.default(), method: method, params: params, }; }; return Client; }()); exports.Client = Client; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnBjY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xpYi9ycGNjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7OztBQUVILGtDQUFxQztBQUNyQywrQkFBa0M7QUFDbEMsb0RBQThCO0FBQzlCLCtDQUE2QjtBQUU3QixvREFBOEI7QUFFOUI7Ozs7OztHQU1HO0FBQ0g7SUE2QkM7Ozs7O09BS0c7SUFDSCxtQkFBWSxNQUFnQjtRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLHdCQUFJLEdBQVgsVUFBWSxNQUFjLEVBQUUsTUFBVztRQUF2QyxpQkFrQ0M7UUFqQ0EsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU8sRUFBRSxNQUFNO1lBQ2xDLDBEQUEwRDtZQUMxRCxJQUFJLENBQUMsS0FBSSxDQUFDLE1BQU0sRUFBRTtnQkFDakIsT0FBTyxNQUFNLENBQUMsZ0JBQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2FBQzNDO1lBRUQscURBQXFEO1lBQ3JELElBQUksS0FBSSxDQUFDLEtBQUssSUFBSSxLQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNsQyxvREFBb0Q7Z0JBQ3BELCtDQUErQztnQkFDL0MsSUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzNELElBQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUUsT0FBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7b0JBQ3BDLE9BQU8sTUFBTSxDQUFDLGdCQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztpQkFDMUM7YUFD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