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)

127 lines (126 loc) 12.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return DomainClient; } }); const _logger = /*#__PURE__*/ _interop_require_default(require("../logger")); 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; } function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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 */ async getUrl(host, region) { await this._updateDomain(); return `${host}.${region}.${this._urlCache.domain}`; } /** * Returns domain settings * @returns {DomainSettings} domain settings */ async getSettings() { await this._updateDomain(); return { domain: this._urlCache.domain, hostname: this._urlCache.hostname }; } async _updateDomain() { if (!this._urlCache.domain || this._urlCache.lastUpdated < Date.now() - 1000 * 60 * 10) { if (this._urlCache.requestPromise) { await 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 = await 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); await 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 = _logger.default.getLogger("DomainClient"); } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjxhbm9uPiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBMb2dnZXJNYW5hZ2VyLCB7TG9nZ2VyfSBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IEh0dHBDbGllbnQgZnJvbSAnLi9odHRwQ2xpZW50JztcblxuLyoqXG4gKiBDb25uZWN0aW9uIFVSTCBtYW5hZ2luZyBjbGllbnRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluQ2xpZW50IHtcbiAgXG4gIHByaXZhdGUgX2h0dHBDbGllbnQ6IGFueTtcbiAgcHJpdmF0ZSBfZG9tYWluOiBzdHJpbmc7XG4gIHByaXZhdGUgX3Rva2VuOiBhbnk7XG4gIHByaXZhdGUgX3VybENhY2hlOiBhbnk7XG4gIHByaXZhdGUgX3JldHJ5SW50ZXJ2YWxJblNlY29uZHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBMb2dnZXI7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgZG9tYWluIGNsaWVudCBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge0h0dHBDbGllbnR9IGh0dHBDbGllbnQgSFRUUCBjbGllbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IHRva2VuIGF1dGhvcml6YXRpb24gdG9rZW5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBkb21haW4gdG8gY29ubmVjdCB0bywgZGVmYXVsdCBpcyBhZ2lsaXVtdHJhZGUuYWdpbGl1bXRyYWRlLmFpXG4gICAqL1xuICBjb25zdHJ1Y3RvcihodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCB0b2tlbjogc3RyaW5nLCBkb21haW4gPSAnYWdpbGl1bXRyYWRlLmFnaWxpdW10cmFkZS5haScpIHtcbiAgICB0aGlzLl9odHRwQ2xpZW50ID0gaHR0cENsaWVudDtcbiAgICB0aGlzLl9kb21haW4gPSBkb21haW47XG4gICAgdGhpcy5fdG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLl91cmxDYWNoZSA9IHtcbiAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgIGhvc3RuYW1lOiBudWxsLFxuICAgICAgcmVxdWVzdFByb21pc2U6IG51bGwsXG4gICAgICBsYXN0VXBkYXRlZDogMFxuICAgIH07XG4gICAgdGhpcy5fcmV0cnlJbnRlcnZhbEluU2Vjb25kcyA9IDE7XG4gICAgdGhpcy5fbG9nZ2VyID0gTG9nZ2VyTWFuYWdlci5nZXRMb2dnZXIoJ0RvbWFpbkNsaWVudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZG9tYWluIGNsaWVudCBkb21haW5cbiAgICogQHJldHVybnMge1N0cmluZ30gY2xpZW50IGRvbWFpblxuICAgKi9cbiAgZ2V0IGRvbWFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kb21haW47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBkb21haW4gY2xpZW50IHRva2VuXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IGNsaWVudCB0b2tlblxuICAgKi9cbiAgZ2V0IHRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIEFQSSBVUkxcbiAgICogQHBhcmFtIHtTdHJpbmd9IGhvc3QgUkVTVCBBUEkgaG9zdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcmVnaW9uIGhvc3QgcmVnaW9uXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IEFQSSBVUkxcbiAgICovXG4gIGFzeW5jIGdldFVybChob3N0OiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLl91cGRhdGVEb21haW4oKTtcbiAgICByZXR1cm4gYCR7aG9zdH0uJHtyZWdpb259LiR7dGhpcy5fdXJsQ2FjaGUuZG9tYWlufWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBkb21haW4gc2V0dGluZ3NcbiAgICogQHJldHVybnMge0RvbWFpblNldHRpbmdzfSBkb21haW4gc2V0dGluZ3NcbiAgICovXG4gIGFzeW5jIGdldFNldHRpbmdzKCk6IFByb21pc2U8RG9tYWluU2V0dGluZ3M+IHtcbiAgICBhd2FpdCB0aGlzLl91cGRhdGVEb21haW4oKTtcbiAgICByZXR1cm4ge2RvbWFpbjogdGhpcy5fdXJsQ2FjaGUuZG9tYWluLCBob3N0bmFtZTogdGhpcy5fdXJsQ2FjaGUuaG9zdG5hbWV9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfdXBkYXRlRG9tYWluKCkge1xuICAgIGlmKCF0aGlzLl91cmxDYWNoZS5kb21haW4gfHwgdGhpcy5fdXJsQ2FjaGUubGFzdFVwZGF0ZWQgPCBEYXRlLm5vdygpIC0gMTAwMCAqIDYwICogMTApIHtcbiAgICAgIGlmKHRoaXMuX3VybENhY2hlLnJlcXVlc3RQcm9taXNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3VybENhY2hlLnJlcXVlc3RQcm9taXNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHJlc29sdmUsIHJlamVjdDtcbiAgICAgICAgdGhpcy5fdXJsQ2FjaGUucmVxdWVzdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICByZXNvbHZlID0gcmVzLCByZWplY3QgPSByZWo7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgaXNDYWNoZVVwZGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUoIWlzQ2FjaGVVcGRhdGVkKSB7XG4gICAgICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgICAgIHVybDogYGh0dHBzOi8vbXQtcHJvdmlzaW9uaW5nLWFwaS12MS4ke3RoaXMuX2RvbWFpbn0vdXNlcnMvY3VycmVudC9zZXJ2ZXJzL210LWNsaWVudC1hcGlgLFxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ2F1dGgtdG9rZW4nOiB0aGlzLl90b2tlblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGpzb246IHRydWUsXG4gICAgICAgICAgfTtcbiAgXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVybFNldHRpbmdzID0gYXdhaXQgdGhpcy5faHR0cENsaWVudC5yZXF1ZXN0KG9wdHMsICdfdXBkYXRlRG9tYWluJyk7XG4gICAgICAgICAgICB0aGlzLl91cmxDYWNoZSA9IHtcbiAgICAgICAgICAgICAgZG9tYWluOiB1cmxTZXR0aW5ncy5kb21haW4sXG4gICAgICAgICAgICAgIGhvc3RuYW1lOiB1cmxTZXR0aW5ncy5ob3N0bmFtZSxcbiAgICAgICAgICAgICAgcmVxdWVzdFByb21pc2U6IG51bGwsXG4gICAgICAgICAgICAgIGxhc3RVcGRhdGVkOiBEYXRlLm5vdygpXG4gICAgICAgICAgICB9OyBcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIGlzQ2FjaGVVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3JldHJ5SW50ZXJ2YWxJblNlY29uZHMgPSAxO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIGRvbWFpbiBzZXR0aW5ncyBjYWNoZScsIGVycik7XG4gICAgICAgICAgICB0aGlzLl9yZXRyeUludGVydmFsSW5TZWNvbmRzID0gTWF0aC5taW4odGhpcy5fcmV0cnlJbnRlcnZhbEluU2Vjb25kcyAqIDIsIDMwMCk7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gc2V0VGltZW91dChyZXMsIHRoaXMuX3JldHJ5SW50ZXJ2YWxJblNlY29uZHMgKiAxMDAwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRG9tYWluIHNldHRpbmdzXG4gKi9cbmV4cG9ydCBkZWNsYXJlIHR5cGUgRG9tYWluU2V0dGluZ3MgPSB7XG4gIC8qKiBjbGllbnQgYXBpIGhvc3QgbmFtZSAqL1xuICBob3N0bmFtZTogc3RyaW5nLFxuICAvKiogY2xpZW50IGFwaSBkb21haW4gZm9yIHJlZ2lvbnMgKi9cbiAgZG9tYWluOiBzdHJpbmdcbn07XG4iXSwibmFtZXMiOlsiRG9tYWluQ2xpZW50IiwiZG9tYWluIiwiX2RvbWFpbiIsInRva2VuIiwiX3Rva2VuIiwiZ2V0VXJsIiwiaG9zdCIsInJlZ2lvbiIsIl91cGRhdGVEb21haW4iLCJfdXJsQ2FjaGUiLCJnZXRTZXR0aW5ncyIsImhvc3RuYW1lIiwibGFzdFVwZGF0ZWQiLCJEYXRlIiwibm93IiwicmVxdWVzdFByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiUHJvbWlzZSIsInJlcyIsInJlaiIsImlzQ2FjaGVVcGRhdGVkIiwib3B0cyIsInVybCIsIm1ldGhvZCIsImhlYWRlcnMiLCJqc29uIiwidXJsU2V0dGluZ3MiLCJfaHR0cENsaWVudCIsInJlcXVlc3QiLCJfcmV0cnlJbnRlcnZhbEluU2Vjb25kcyIsImVyciIsIl9sb2dnZXIiLCJlcnJvciIsIk1hdGgiLCJtaW4iLCJzZXRUaW1lb3V0IiwiY29uc3RydWN0b3IiLCJodHRwQ2xpZW50IiwiTG9nZ2VyTWFuYWdlciIsImdldExvZ2dlciJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFRcUJBOzs7K0RBTmU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNckIsSUFBQSxBQUFNQSxlQUFOLE1BQU1BO0lBNkJuQjs7O0dBR0MsR0FDRCxJQUFJQyxTQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQ0MsT0FBTztJQUNyQjtJQUVBOzs7R0FHQyxHQUNELElBQUlDLFFBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDQyxNQUFNO0lBQ3BCO0lBRUE7Ozs7O0dBS0MsR0FDRCxNQUFNQyxPQUFPQyxJQUFZLEVBQUVDLE1BQWMsRUFBbUI7UUFDMUQsTUFBTSxJQUFJLENBQUNDLGFBQWE7UUFDeEIsT0FBTyxDQUFDLEVBQUVGLEtBQUssQ0FBQyxFQUFFQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUNFLFNBQVMsQ0FBQ1IsTUFBTSxDQUFDLENBQUM7SUFDckQ7SUFFQTs7O0dB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