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
JavaScript
;
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+IHtcbiAgICAgICAgICByZXNvbHZlID0gcmVzLCByZWplY3QgPSByZWo7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgaXNDYWNoZVVwZGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUoIWlzQ2FjaGVVcGRhdGVkKSB7XG4gICAgICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgICAgIHVybDogYGh0dHBzOi8vbXQtcHJvdmlzaW9uaW5nLWFwaS12MS4ke3RoaXMuX2RvbWFpbn0vdXNlcnMvY3VycmVudC9zZXJ2ZXJzL210LWNsaWVudC1hcGlgLFxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ2F1dGgtdG9rZW4nOiB0aGlzLl90b2tlblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGpzb246IHRydWUsXG4gICAgICAgICAgfTtcbiAgXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVybFNldHRpbmdzID0gYXdhaXQgdGhpcy5faHR0cENsaWVudC5yZXF1ZXN0KG9wdHMsICdfdXBkYXRlRG9tYWluJyk7XG4gICAgICAgICAgICB0aGlzLl91cmxDYWNoZSA9IHtcbiAgICAgICAgICAgICAgZG9tYWluOiB1cmxTZXR0aW5ncy5kb21haW4sXG4gICAgICAgICAgICAgIGhvc3RuYW1lOiB1cmxTZXR0aW5ncy5ob3N0bmFtZSxcbiAgICAgICAgICAgICAgcmVxdWVzdFByb21pc2U6IG51bGwsXG4gICAgICAgICAgICAgIGxhc3RVcGRhdGVkOiBEYXRlLm5vdygpXG4gICAgICAgICAgICB9OyBcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIGlzQ2FjaGVVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3JldHJ5SW50ZXJ2YWxJblNlY29uZHMgPSAxO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIGRvbWFpbiBzZXR0aW5ncyBjYWNoZScsIGVycik7XG4gICAgICAgICAgICB0aGlzLl9yZXRyeUludGVydmFsSW5TZWNvbmRzID0gTWF0aC5taW4odGhpcy5fcmV0cnlJbnRlcnZhbEluU2Vjb25kcyAqIDIsIDMwMCk7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gc2V0VGltZW91dChyZXMsIHRoaXMuX3JldHJ5SW50ZXJ2YWxJblNlY29uZHMgKiAxMDAwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRG9tYWluIHNldHRpbmdzXG4gKi9cbmV4cG9ydCBkZWNsYXJlIHR5cGUgRG9tYWluU2V0dGluZ3MgPSB7XG4gIC8qKiBjbGllbnQgYXBpIGhvc3QgbmFtZSAqL1xuICBob3N0bmFtZTogc3RyaW5nLFxuICAvKiogY2xpZW50IGFwaSBkb21haW4gZm9yIHJlZ2lvbnMgKi9cbiAgZG9tYWluOiBzdHJpbmdcbn07XG4iXSwibmFtZXMiOlsiTG9nZ2VyTWFuYWdlciIsIkRvbWFpbkNsaWVudCIsImRvbWFpbiIsIl9kb21haW4iLCJ0b2tlbiIsIl90b2tlbiIsImdldFVybCIsImhvc3QiLCJyZWdpb24iLCJfdXBkYXRlRG9tYWluIiwiX3VybENhY2hlIiwiZ2V0U2V0dGluZ3MiLCJob3N0bmFtZSIsImxhc3RVcGRhdGVkIiwiRGF0ZSIsIm5vdyIsInJlcXVlc3RQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIlByb21pc2UiLCJyZXMiLCJyZWoiLCJpc0NhY2hlVXBkYXRlZCIsIm9wdHMiLCJ1cmwiLCJtZXRob2QiLCJoZWFkZXJzIiwianNvbiIsInVybFNldHRpbmdzIiwiX2h0dHBDbGllbnQiLCJyZXF1ZXN0IiwiX3JldHJ5SW50ZXJ2YWxJblNlY29uZHMiLCJlcnIiLCJfbG9nZ2VyIiwiZXJyb3IiLCJNYXRoIiwibWluIiwic2V0VGltZW91dCIsImNvbnN0cnVjdG9yIiwiaHR0cENsaWVudCIsImdldExvZ2dlciJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxPQUFPQSxtQkFBNkIsWUFBWTtBQU1qQyxJQUFBLEFBQU1DLGVBQU4sTUFBTUE7SUE2Qm5COzs7R0FHQyxHQUNELElBQUlDLFNBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDQyxPQUFPO0lBQ3JCO0lBRUE7OztHQUdDLEdBQ0QsSUFBSUMsUUFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUNDLE1BQU07SUFDcEI7SUFFQTs7Ozs7R0FLQyxHQUNELEFBQU1DLE9BQU9DLElBQVksRUFBRUMsTUFBYzs7ZUFBekMsb0JBQUE7WUFDRSxNQUFNLE1BQUtDLGFBQWE7WUFDeEIsT0FBTyxDQUFDLEVBQUVGLEtBQUssQ0FBQyxFQUFFQyxPQUFPLENBQUMsRUFBRSxNQUFLRSxTQUFTLENBQUNSLE1BQU0sQ0FB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