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
JavaScript
"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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