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)

154 lines (153 loc) 13.6 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); }); }; } function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } import LoggerManager from '../logger'; 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; } /** * Returns the API URL * @param {String} host REST API host * @param {String} region host region * @returns {String} API URL */ getUrl(host, region) { var _this = this; return _async_to_generator(function*() { yield _this._updateDomain(); return `${host}.${region}.${_this._urlCache.domain}`; })(); } /** * Returns domain settings * @returns {DomainSettings} domain settings */ getSettings() { var _this = this; return _async_to_generator(function*() { yield _this._updateDomain(); return { domain: _this._urlCache.domain, hostname: _this._urlCache.hostname }; })(); } _updateDomain() { var _this = this; return _async_to_generator(function*() { if (!_this._urlCache.domain || _this._urlCache.lastUpdated < Date.now() - 1000 * 60 * 10) { if (_this._urlCache.requestPromise) { yield _this._urlCache.requestPromise; } else { let resolve, reject; _this._urlCache.requestPromise = new Promise((res, rej)=>{ resolve = res, reject = rej; }); let isCacheUpdated = false; while(!isCacheUpdated){ const opts = { url: `https://mt-provisioning-api-v1.${_this._domain}/users/current/servers/mt-client-api`, method: 'GET', headers: { 'auth-token': _this._token }, json: true }; try { const urlSettings = yield _this._httpClient.request(opts, '_updateDomain'); _this._urlCache = { domain: urlSettings.domain, hostname: urlSettings.hostname, requestPromise: null, lastUpdated: Date.now() }; resolve(); isCacheUpdated = true; _this._retryIntervalInSeconds = 1; } catch (err) { _this._logger.error('Failed to update domain settings cache', err); _this._retryIntervalInSeconds = Math.min(_this._retryIntervalInSeconds * 2, 300); yield new Promise((res)=>setTimeout(res, _this._retryIntervalInSeconds * 1000)); } } } } })(); } /** * Constructs domain client instance * @param {HttpClient} httpClient HTTP client * @param {String} token authorization token * @param {String} domain domain to connect to, default is agiliumtrade.agiliumtrade.ai */ constructor(httpClient, token, domain = 'agiliumtrade.agiliumtrade.ai'){ _define_property(this, "_httpClient", void 0); _define_property(this, "_domain", void 0); _define_property(this, "_token", void 0); _define_property(this, "_urlCache", void 0); _define_property(this, "_retryIntervalInSeconds", void 0); _define_property(this, "_logger", void 0); this._httpClient = httpClient; this._domain = domain; this._token = token; this._urlCache = { domain: null, hostname: null, requestPromise: null, lastUpdated: 0 }; this._retryIntervalInSeconds = 1; this._logger = LoggerManager.getLogger('DomainClient'); } }; /** * Connection URL managing client */ export { DomainClient as default }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjxhbm9uPiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBMb2dnZXJNYW5hZ2VyLCB7TG9nZ2VyfSBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IEh0dHBDbGllbnQgZnJvbSAnLi9odHRwQ2xpZW50JztcblxuLyoqXG4gKiBDb25uZWN0aW9uIFVSTCBtYW5hZ2luZyBjbGllbnRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluQ2xpZW50IHtcbiAgXG4gIHByaXZhdGUgX2h0dHBDbGllbnQ6IGFueTtcbiAgcHJpdmF0ZSBfZG9tYWluOiBzdHJpbmc7XG4gIHByaXZhdGUgX3Rva2VuOiBhbnk7XG4gIHByaXZhdGUgX3VybENhY2hlOiBhbnk7XG4gIHByaXZhdGUgX3JldHJ5SW50ZXJ2YWxJblNlY29uZHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBMb2dnZXI7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgZG9tYWluIGNsaWVudCBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge0h0dHBDbGllbnR9IGh0dHBDbGllbnQgSFRUUCBjbGllbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IHRva2VuIGF1dGhvcml6YXRpb24gdG9rZW5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBkb21haW4gdG8gY29ubmVjdCB0bywgZGVmYXVsdCBpcyBhZ2lsaXVtdHJhZGUuYWdpbGl1bXRyYWRlLmFpXG4gICAqL1xuICBjb25zdHJ1Y3RvcihodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCB0b2tlbjogc3RyaW5nLCBkb21haW4gPSAnYWdpbGl1bXRyYWRlLmFnaWxpdW10cmFkZS5haScpIHtcbiAgICB0aGlzLl9odHRwQ2xpZW50ID0gaHR0cENsaWVudDtcbiAgICB0aGlzLl9kb21haW4gPSBkb21haW47XG4gICAgdGhpcy5fdG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLl91cmxDYWNoZSA9IHtcbiAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgIGhvc3RuYW1lOiBudWxsLFxuICAgICAgcmVxdWVzdFByb21pc2U6IG51bGwsXG4gICAgICBsYXN0VXBkYXRlZDogMFxuICAgIH07XG4gICAgdGhpcy5fcmV0cnlJbnRlcnZhbEluU2Vjb25kcyA9IDE7XG4gICAgdGhpcy5fbG9nZ2VyID0gTG9nZ2VyTWFuYWdlci5nZXRMb2dnZXIoJ0RvbWFpbkNsaWVudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZG9tYWluIGNsaWVudCBkb21haW5cbiAgICogQHJldHVybnMge1N0cmluZ30gY2xpZW50IGRvbWFpblxuICAgKi9cbiAgZ2V0IGRvbWFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kb21haW47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBkb21haW4gY2xpZW50IHRva2VuXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IGNsaWVudCB0b2tlblxuICAgKi9cbiAgZ2V0IHRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIEFQSSBVUkxcbiAgICogQHBhcmFtIHtTdHJpbmd9IGhvc3QgUkVTVCBBUEkgaG9zdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcmVnaW9uIGhvc3QgcmVnaW9uXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IEFQSSBVUkxcbiAgICovXG4gIGFzeW5jIGdldFVybChob3N0OiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLl91cGRhdGVEb21haW4oKTtcbiAgICByZXR1cm4gYCR7aG9zdH0uJHtyZWdpb259LiR7dGhpcy5fdXJsQ2FjaGUuZG9tYWlufWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBkb21haW4gc2V0dGluZ3NcbiAgICogQHJldHVybnMge0RvbWFpblNldHRpbmdzfSBkb21haW4gc2V0dGluZ3NcbiAgICovXG4gIGFzeW5jIGdldFNldHRpbmdzKCk6IFByb21pc2U8RG9tYWluU2V0dGluZ3M+IHtcbiAgICBhd2FpdCB0aGlzLl91cGRhdGVEb21haW4oKTtcbiAgICByZXR1cm4ge2RvbWFpbjogdGhpcy5fdXJsQ2FjaGUuZG9tYWluLCBob3N0bmFtZTogdGhpcy5fdXJsQ2FjaGUuaG9zdG5hbWV9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfdXBkYXRlRG9tYWluKCkge1xuICAgIGlmKCF0aGlzLl91cmxDYWNoZS5kb21haW4gfHwgdGhpcy5fdXJsQ2FjaGUubGFzdFVwZGF0ZWQgPCBEYXRlLm5vdygpIC0gMTAwMCAqIDYwICogMTApIHtcbiAgICAgIGlmKHRoaXMuX3VybENhY2hlLnJlcXVlc3RQcm9taXNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3VybENhY2hlLnJlcXVlc3RQcm9taXNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHJlc29sdmUsIHJlamVjdDtcbiAgICAgICAgdGhpcy5fdXJsQ2FjaGUucmVxdWVzdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICByZXNvbHZlID0gcmVzLCByZWplY3QgPSByZWo7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgaXNDYWNoZVVwZGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUoIWlzQ2FjaGVVcGRhdGVkKSB7XG4gICAgICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgICAgIHVybDogYGh0dHBzOi8vbXQtcHJvdmlzaW9uaW5nLWFwaS12MS4ke3RoaXMuX2RvbWFpbn0vdXNlcnMvY3VycmVudC9zZXJ2ZXJzL210LWNsaWVudC1hcGlgLFxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ2F1dGgtdG9rZW4nOiB0aGlzLl90b2tlblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGpzb246IHRydWUsXG4gICAgICAgICAgfTtcbiAgXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVybFNldHRpbmdzID0gYXdhaXQgdGhpcy5faHR0cENsaWVudC5yZXF1ZXN0KG9wdHMsICdfdXBkYXRlRG9tYWluJyk7XG4gICAgICAgICAgICB0aGlzLl91cmxDYWNoZSA9IHtcbiAgICAgICAgICAgICAgZG9tYWluOiB1cmxTZXR0aW5ncy5kb21haW4sXG4gICAgICAgICAgICAgIGhvc3RuYW1lOiB1cmxTZXR0aW5ncy5ob3N0bmFtZSxcbiAgICAgICAgICAgICAgcmVxdWVzdFByb21pc2U6IG51bGwsXG4gICAgICAgICAgICAgIGxhc3RVcGRhdGVkOiBEYXRlLm5vdygpXG4gICAgICAgICAgICB9OyBcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIGlzQ2FjaGVVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3JldHJ5SW50ZXJ2YWxJblNlY29uZHMgPSAxO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIGRvbWFpbiBzZXR0aW5ncyBjYWNoZScsIGVycik7XG4gICAgICAgICAgICB0aGlzLl9yZXRyeUludGVydmFsSW5TZWNvbmRzID0gTWF0aC5taW4odGhpcy5fcmV0cnlJbnRlcnZhbEluU2Vjb25kcyAqIDIsIDMwMCk7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gc2V0VGltZW91dChyZXMsIHRoaXMuX3JldHJ5SW50ZXJ2YWxJblNlY29uZHMgKiAxMDAwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRG9tYWluIHNldHRpbmdzXG4gKi9cbmV4cG9ydCBkZWNsYXJlIHR5cGUgRG9tYWluU2V0dGluZ3MgPSB7XG4gIC8qKiBjbGllbnQgYXBpIGhvc3QgbmFtZSAqL1xuICBob3N0bmFtZTogc3RyaW5nLFxuICAvKiogY2xpZW50IGFwaSBkb21haW4gZm9yIHJlZ2lvbnMgKi9cbiAgZG9tYWluOiBzdHJpbmdcbn07XG4iXSwibmFtZXMiOlsiTG9nZ2VyTWFuYWdlciIsIkRvbWFpbkNsaWVudCIsImRvbWFpbiIsIl9kb21haW4iLCJ0b2tlbiIsIl90b2tlbiIsImdldFVybCIsImhvc3QiLCJyZWdpb24iLCJfdXBkYXRlRG9tYWluIiwiX3VybENhY2hlIiwiZ2V0U2V0dGluZ3MiLCJob3N0bmFtZSIsImxhc3RVcGRhdGVkIiwiRGF0ZSIsIm5vdyIsInJlcXVlc3RQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIlByb21pc2UiLCJyZXMiLCJyZWoiLCJpc0NhY2hlVXBkYXRlZCIsIm9wdHMiLCJ1cmwiLCJtZXRob2QiLCJoZWFkZXJzIiwianNvbiIsInVybFNldHRpbmdzIiwiX2h0dHBDbGllbnQiLCJyZXF1ZXN0IiwiX3JldHJ5SW50ZXJ2YWxJblNlY29uZHMiLCJlcnIiLCJfbG9nZ2VyIiwiZXJyb3IiLCJNYXRoIiwibWluIiwic2V0VGltZW91dCIsImNvbnN0cnVjdG9yIiwiaHR0cENsaWVudCIsImdldExvZ2dlciJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxPQUFPQSxtQkFBNkIsWUFBWTtBQU1qQyxJQUFBLEFBQU1DLGVBQU4sTUFBTUE7SUE2Qm5COzs7R0FHQyxHQUNELElBQUlDLFNBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDQyxPQUFPO0lBQ3JCO0lBRUE7OztHQUdDLEdBQ0QsSUFBSUMsUUFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUNDLE1BQU07SUFDcEI7SUFFQTs7Ozs7R0FLQyxHQUNELEFBQU1DLE9BQU9DLElBQVksRUFBRUMsTUFBYzs7ZUFBekMsb0JBQUE7WUFDRSxNQUFNLE1BQUtDLGFBQWE7WUFDeEIsT0FBTyxDQUFDLEVBQUVGLEtBQUssQ0FBQyxFQUFFQyxPQUFPLENBQUMsRUFBRSxNQUFLRSxTQUFTLENBQUNSLE1BQU0sQ0FBQyxDQUFDO1FBQ3JEOztJQUVBOzs7R0FHQyxHQUNELEFBQU1TOztlQUFOLG9CQUFBO1lBQ0UsTUFBTSxNQUFLRixhQUFhO1lBQ3hCLE9BQU87Z0JBQUNQLFFBQVEsTUFBS1EsU0FBUyxDQUFDUixNQUFNO2dCQUFFVSxVQUFVLE1BQUtGLFNBQVMsQ0FBQ0UsUUFBUTtZQUFBO1FBQzFFOztJQUVjSDs7ZUFBZCxvQkFBQTtZQUNFLElBQUcsQ0FBQyxNQUFLQyxTQUFTLENBQUNSLE1BQU0sSUFBSSxNQUFLUSxTQUFTLENBQUNHLFdBQVcsR0FBR0MsS0FBS0MsR0FBRyxLQUFLLE9BQU8sS0FBSyxJQUFJO2dCQUNyRixJQUFHLE1BQUtMLFNBQVMsQ0FBQ00sY0FBYyxFQUFFO29CQUNoQyxNQUFNLE1BQUtOLFNBQVMsQ0FBQ00sY0FBYztnQkFDckMsT0FBTztvQkFDTCxJQUFJQyxTQUFTQztvQkFDYixNQUFLUixTQUFTLENBQUNNLGNBQWMsR0FBRyxJQUFJRyxRQUFRLENBQUNDLEtBQUtDO3dCQUNoREosVUFBVUcsS0FBS0YsU0FBU0c7b0JBQzFCO29CQUNBLElBQUlDLGlCQUFpQjtvQkFDckIsTUFBTSxDQUFDQSxlQUFnQjt3QkFDckIsTUFBTUMsT0FBTzs0QkFDWEMsS0FBSyxDQUFDLCtCQUErQixFQUFFLE1BQUtyQixPQUFPLENBQUMsb0NBQW9DLENBQUM7NEJBQ3pGc0IsUUFBUTs0QkFDUkMsU0FBUztnQ0FDUCxjQUFjLE1BQUtyQixNQUFNOzRCQUMzQjs0QkFDQXNCLE1BQU07d0JBQ1I7d0JBRUEsSUFBSTs0QkFDRixNQUFNQyxjQUFjLE1BQU0sTUFBS0MsV0FBVyxDQUFDQyxPQUFPLENBQUNQLE1BQU07NEJBQ3pELE1BQUtiLFNBQVMsR0FBRztnQ0FDZlIsUUFBUTBCLFlBQVkxQixNQUFNO2dDQUMxQlUsVUFBVWdCLFlBQVloQixRQUFRO2dDQUM5QkksZ0JBQWdCO2dDQUNoQkgsYUFBYUMsS0FBS0MsR0FBRzs0QkFDdkI7NEJBQ0FFOzRCQUNBSyxpQkFBaUI7NEJBQ2pCLE1BQUtTLHVCQUF1QixHQUFHO3dCQUNqQyxFQUFFLE9BQU9DLEtBQUs7NEJBQ1osTUFBS0MsT0FBTyxDQUFDQyxLQUFLLENBQUMsMENBQTBDRjs0QkFDN0QsTUFBS0QsdUJBQXVCLEdBQUdJLEtBQUtDLEdBQUcsQ0FBQyxNQUFLTCx1QkFBdUIsR0FBRyxHQUFHOzRCQUMxRSxNQUFNLElBQUlaLFFBQVFDLENBQUFBLE1BQU9pQixXQUFXakIsS0FBSyxNQUFLVyx1QkFBdUIsR0FBRzt3QkFDMUU7b0JBQ0Y7Z0JBQ0Y7WUFDRjtRQUNGOztJQS9GQTs7Ozs7R0FLQyxHQUNETyxZQUFZQyxVQUFzQixFQUFFbkMsS0FBYSxFQUFFRixTQUFTLDhCQUE4QixDQUFFO1FBYjVGLHVCQUFRMkIsZUFBUixLQUFBO1FBQ0EsdUJBQVExQixXQUFSLEtBQUE7UUFDQSx1QkFBUUUsVUFBUixLQUFBO1FBQ0EsdUJBQVFLLGFBQVIsS0FBQTtRQUNBLHVCQUFRcUIsMkJBQVIsS0FBQTtRQUNBLHVCQUFRRSxXQUFSLEtBQUE7UUFTRSxJQUFJLENBQUNKLFdBQVcsR0FBR1U7UUFDbkIsSUFBSSxDQUFDcEMsT0FBTyxHQUFHRDtRQUNmLElBQUksQ0FBQ0csTUFBTSxHQUFHRDtRQUNkLElBQUksQ0FBQ00sU0FBUyxHQUFHO1lBQ2ZSLFFBQVE7WUFDUlUsVUFBVTtZQUNWSSxnQkFBZ0I7WUFDaEJILGFBQWE7UUFDZjtRQUNBLElBQUksQ0FBQ2tCLHVCQUF1QixHQUFHO1FBQy9CLElBQUksQ0FBQ0UsT0FBTyxHQUFHakMsY0FBY3dDLFNBQVMsQ0FBQztJQUN6QztBQThFRjtBQTVHQTs7Q0FFQyxHQUNELFNBQXFCdkMsMEJBeUdwQiJ9