UNPKG

metaapi.cloud-sdk

Version:

SDK for MetaApi, a professional cloud forex API which includes MetaTrader REST API and MetaTrader websocket API. Supports both MetaTrader 5 (MT5) and MetaTrader 4 (MT4). CopyFactory copy trading API included. (https://metaapi.cloud)

149 lines (148 loc) 13.3 kB
'use strict'; function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _async_to_generator(fn) { return function() { var self = this, args = arguments; return new Promise(function(resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } let DomainClient = class DomainClient { /** * Returns domain client domain * @returns {String} client domain */ get domain() { return this._domain; } /** * Returns domain client token * @returns {String} client token */ get token() { return this._token; } /** * Sends an authorized json API request * @param {Object} opts options request options * @param {Boolean} [isExtendedTimeout] whether to run the request with an extended timeout * @returns {Promise<Object|String|any>} request result */ requestApi(opts, isExtendedTimeout = false) { var _this = this; return _async_to_generator(function*() { yield _this._updateHost(); try { return yield _this._httpClient.request(Object.assign({}, opts, { headers: opts.headers || { 'auth-token': _this._token }, url: _this._urlCache.url + opts.url, json: true }), isExtendedTimeout); } catch (err) { if (![ 'ConflictError', 'InternalError', 'ApiError', 'TimeoutError' ].includes(err.name)) { throw err; } else { if (_this._regionCache.length === _this._regionIndex + 1) { _this._regionIndex = 0; throw err; } else { _this._regionIndex++; return _this.requestApi(opts); } } } })(); } /** * Sends an http request * @param {Object} opts options request options * @returns {Promise<Object|String|any>} request result */ request(opts) { return this._httpClient.request(opts); } _updateHost() { var _this = this; return _async_to_generator(function*() { if (!_this._urlCache || _this._urlCache.lastUpdated < Date.now() - 1000 * 60 * 10) { yield _this._updateRegions(); const urlSettings = yield _this._httpClient.request({ url: `https://mt-provisioning-api-v1.${_this._domain}/users/current/servers/mt-client-api`, method: 'GET', headers: { 'auth-token': _this._token }, json: true }); _this._urlCache = { url: `https://${_this._apiPath}.${_this._regionCache[_this._regionIndex]}.${urlSettings.domain}`, domain: urlSettings.domain, lastUpdated: Date.now() }; } else { _this._urlCache = { url: `https://${_this._apiPath}.${_this._regionCache[_this._regionIndex]}.${_this._urlCache.domain}`, domain: _this._urlCache.domain, lastUpdated: Date.now() }; } })(); } _updateRegions() { var _this = this; return _async_to_generator(function*() { _this._regionIndex = 0; _this._regionCache = yield _this._httpClient.request({ url: `https://mt-provisioning-api-v1.${_this._domain}/users/current/regions`, method: 'GET', headers: { 'auth-token': _this._token }, json: true }); })(); } /** * Constructs domain client instance * @param {HttpClient} httpClient HTTP client * @param {String} token authorization token * @param {String} apiPath api url part * @param {String} domain domain to connect to, default is agiliumtrade.agiliumtrade.ai */ constructor(httpClient, token, apiPath, domain = 'agiliumtrade.agiliumtrade.ai'){ this._httpClient = httpClient; this._apiPath = apiPath; this._domain = domain; this._token = token; this._urlCache = null; this._regionCache = []; this._regionIndex = 0; } }; /** * Connection URL and request managing client */ export { DomainClient as default }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjxhbm9uPiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29ubmVjdGlvbiBVUkwgYW5kIHJlcXVlc3QgbWFuYWdpbmcgY2xpZW50XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpbkNsaWVudCB7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgZG9tYWluIGNsaWVudCBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge0h0dHBDbGllbnR9IGh0dHBDbGllbnQgSFRUUCBjbGllbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IHRva2VuIGF1dGhvcml6YXRpb24gdG9rZW5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGFwaVBhdGggYXBpIHVybCBwYXJ0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gZG9tYWluIHRvIGNvbm5lY3QgdG8sIGRlZmF1bHQgaXMgYWdpbGl1bXRyYWRlLmFnaWxpdW10cmFkZS5haVxuICAgKi9cbiAgY29uc3RydWN0b3IoaHR0cENsaWVudCwgdG9rZW4sIGFwaVBhdGgsIGRvbWFpbiA9ICdhZ2lsaXVtdHJhZGUuYWdpbGl1bXRyYWRlLmFpJykge1xuICAgIHRoaXMuX2h0dHBDbGllbnQgPSBodHRwQ2xpZW50O1xuICAgIHRoaXMuX2FwaVBhdGggPSBhcGlQYXRoO1xuICAgIHRoaXMuX2RvbWFpbiA9IGRvbWFpbjtcbiAgICB0aGlzLl90b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuX3VybENhY2hlID0gbnVsbDtcbiAgICB0aGlzLl9yZWdpb25DYWNoZSA9IFtdO1xuICAgIHRoaXMuX3JlZ2lvbkluZGV4ID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGRvbWFpbiBjbGllbnQgZG9tYWluXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IGNsaWVudCBkb21haW5cbiAgICovXG4gIGdldCBkb21haW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RvbWFpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGRvbWFpbiBjbGllbnQgdG9rZW5cbiAgICogQHJldHVybnMge1N0cmluZ30gY2xpZW50IHRva2VuXG4gICAqL1xuICBnZXQgdG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGFuIGF1dGhvcml6ZWQganNvbiBBUEkgcmVxdWVzdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyBvcHRpb25zIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtpc0V4dGVuZGVkVGltZW91dF0gd2hldGhlciB0byBydW4gdGhlIHJlcXVlc3Qgd2l0aCBhbiBleHRlbmRlZCB0aW1lb3V0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdHxTdHJpbmd8YW55Pn0gcmVxdWVzdCByZXN1bHRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3RBcGkob3B0cywgaXNFeHRlbmRlZFRpbWVvdXQgPSBmYWxzZSkge1xuICAgIGF3YWl0IHRoaXMuX3VwZGF0ZUhvc3QoKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHBDbGllbnQucmVxdWVzdChPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7XG4gICAgICAgIGhlYWRlcnM6IG9wdHMuaGVhZGVycyB8fCB7J2F1dGgtdG9rZW4nOiB0aGlzLl90b2tlbn0sXG4gICAgICAgIHVybDogdGhpcy5fdXJsQ2FjaGUudXJsICsgb3B0cy51cmwsXG4gICAgICAgIGpzb246IHRydWVcbiAgICAgIH0pLCBpc0V4dGVuZGVkVGltZW91dCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoIVsnQ29uZmxpY3RFcnJvcicsICdJbnRlcm5hbEVycm9yJywgJ0FwaUVycm9yJywgJ1RpbWVvdXRFcnJvciddLmluY2x1ZGVzKGVyci5uYW1lKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5fcmVnaW9uQ2FjaGUubGVuZ3RoID09PSB0aGlzLl9yZWdpb25JbmRleCArIDEpIHtcbiAgICAgICAgICB0aGlzLl9yZWdpb25JbmRleCA9IDA7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3JlZ2lvbkluZGV4Kys7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEFwaShvcHRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGFuIGh0dHAgcmVxdWVzdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyBvcHRpb25zIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3R8U3RyaW5nfGFueT59IHJlcXVlc3QgcmVzdWx0XG4gICAqL1xuICByZXF1ZXN0KG9wdHMpIHtcbiAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5yZXF1ZXN0KG9wdHMpO1xuICB9XG5cbiAgYXN5bmMgX3VwZGF0ZUhvc3QoKSB7XG4gICAgaWYgKCF0aGlzLl91cmxDYWNoZSB8fCB0aGlzLl91cmxDYWNoZS5sYXN0VXBkYXRlZCA8IERhdGUubm93KCkgLSAxMDAwICogNjAgKiAxMCkge1xuICAgICAgYXdhaXQgdGhpcy5fdXBkYXRlUmVnaW9ucygpO1xuICAgICAgY29uc3QgdXJsU2V0dGluZ3MgPSBhd2FpdCB0aGlzLl9odHRwQ2xpZW50LnJlcXVlc3Qoe1xuICAgICAgICB1cmw6IGBodHRwczovL210LXByb3Zpc2lvbmluZy1hcGktdjEuJHt0aGlzLl9kb21haW59L3VzZXJzL2N1cnJlbnQvc2VydmVycy9tdC1jbGllbnQtYXBpYCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdhdXRoLXRva2VuJzogdGhpcy5fdG9rZW5cbiAgICAgICAgfSxcbiAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fdXJsQ2FjaGUgPSB7XG4gICAgICAgIHVybDogYGh0dHBzOi8vJHt0aGlzLl9hcGlQYXRofS4ke3RoaXMuX3JlZ2lvbkNhY2hlW3RoaXMuX3JlZ2lvbkluZGV4XX0uJHt1cmxTZXR0aW5ncy5kb21haW59YCxcbiAgICAgICAgZG9tYWluOiB1cmxTZXR0aW5ncy5kb21haW4sXG4gICAgICAgIGxhc3RVcGRhdGVkOiBEYXRlLm5vdygpXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl91cmxDYWNoZSA9IHtcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly8ke3RoaXMuX2FwaVBhdGh9LiR7dGhpcy5fcmVnaW9uQ2FjaGVbdGhpcy5fcmVnaW9uSW5kZXhdfS4ke3RoaXMuX3VybENhY2hlLmRvbWFpbn1gLFxuICAgICAgICBkb21haW46IHRoaXMuX3VybENhY2hlLmRvbWFpbixcbiAgICAgICAgbGFzdFVwZGF0ZWQ6IERhdGUubm93KClcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX3VwZGF0ZVJlZ2lvbnMoKSB7XG4gICAgdGhpcy5fcmVnaW9uSW5kZXggPSAwO1xuICAgIHRoaXMuX3JlZ2lvbkNhY2hlID0gYXdhaXQgdGhpcy5faHR0cENsaWVudC5yZXF1ZXN0KHtcbiAgICAgIHVybDogYGh0dHBzOi8vbXQtcHJvdmlzaW9uaW5nLWFwaS12MS4ke3RoaXMuX2RvbWFpbn0vdXNlcnMvY3VycmVudC9yZWdpb25zYCxcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdhdXRoLXRva2VuJzogdGhpcy5fdG9rZW5cbiAgICAgIH0sXG4gICAgICBqc29uOiB0cnVlLFxuICAgIH0pO1xuICB9XG59Il0sIm5hbWVzIjpbIkRvbWFpbkNsaWVudCIsImRvbWFpbiIsIl9kb21haW4iLCJ0b2tlbiIsIl90b2tlbiIsInJlcXVlc3RBcGkiLCJvcHRzIiwiaXNFeHRlbmRlZFRpbWVvdXQiLCJfdXBkYXRlSG9zdCIsIl9odHRwQ2xpZW50IiwicmVxdWVzdCIsIk9iamVjdCIsImFzc2lnbiIsImhlYWRlcnMiLCJ1cmwiLCJfdXJsQ2FjaGUiLCJqc29uIiwiZXJyIiwiaW5jbHVkZXMiLCJuYW1lIiwiX3JlZ2lvbkNhY2hlIiwibGVuZ3RoIiwiX3JlZ2lvbkluZGV4IiwibGFzdFVwZGF0ZWQiLCJEYXRlIiwibm93IiwiX3VwZGF0ZVJlZ2lvbnMiLCJ1cmxTZXR0aW5ncyIsIm1ldGhvZCIsIl9hcGlQYXRoIiwiY29uc3RydWN0b3IiLCJodHRwQ2xpZW50IiwiYXBpUGF0aCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUtlLElBQUEsQUFBTUEsZUFBTixNQUFNQTtJQW1CbkI7OztHQUdDLEdBQ0QsSUFBSUMsU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDQyxPQUFPO0lBQ3JCO0lBRUE7OztHQUdDLEdBQ0QsSUFBSUMsUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDQyxNQUFNO0lBQ3BCO0lBRUE7Ozs7O0dBS0MsR0FDRCxBQUFNQyxXQUFXQyxJQUFJLEVBQUVDLG9CQUFvQixLQUFLOztlQUFoRCxvQkFBQTtZQUNFLE1BQU0sTUFBS0MsV0FBVztZQUN0QixJQUFJO2dCQUNGLE9BQU8sTUFBTSxNQUFLQyxXQUFXLENBQUNDLE9BQU8sQ0FBQ0MsT0FBT0MsTUFBTSxDQUFDLENBQUMsR0FBR04sTUFBTTtvQkFDNURPLFNBQVNQLEtBQUtPLE9BQU8sSUFBSTt3QkFBQyxjQUFjLE1BQUtULE1BQU07b0JBQUE7b0JBQ25EVSxLQUFLLE1BQUtDLFNBQVMsQ0FBQ0QsR0FBRyxHQUFHUixLQUFLUSxHQUFHO29CQUNsQ0UsTUFBTTtnQkFDUixJQUFJVDtZQUNOLEVBQUUsT0FBT1UsS0FBSztnQkFDWixJQUFJLENBQUM7b0JBQUM7b0JBQWlCO29CQUFpQjtvQkFBWTtpQkFBZSxDQUFDQyxRQUFRLENBQUNELElBQUlFLElBQUksR0FBRztvQkFDdEYsTUFBTUY7Z0JBQ1IsT0FBTztvQkFDTCxJQUFJLE1BQUtHLFlBQVksQ0FBQ0MsTUFBTSxLQUFLLE1BQUtDLFlBQVksR0FBRyxH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