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)
117 lines (116 loc) • 12.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return DomainClient;
}
});
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
*/ async requestApi(opts, isExtendedTimeout = false) {
await this._updateHost();
try {
return await 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);
}
async _updateHost() {
if (!this._urlCache || this._urlCache.lastUpdated < Date.now() - 1000 * 60 * 10) {
await this._updateRegions();
const urlSettings = await 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()
};
}
}
async _updateRegions() {
this._regionIndex = 0;
this._regionCache = await 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;
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjxhbm9uPiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29ubmVjdGlvbiBVUkwgYW5kIHJlcXVlc3QgbWFuYWdpbmcgY2xpZW50XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpbkNsaWVudCB7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgZG9tYWluIGNsaWVudCBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge0h0dHBDbGllbnR9IGh0dHBDbGllbnQgSFRUUCBjbGllbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IHRva2VuIGF1dGhvcml6YXRpb24gdG9rZW5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGFwaVBhdGggYXBpIHVybCBwYXJ0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gZG9tYWluIHRvIGNvbm5lY3QgdG8sIGRlZmF1bHQgaXMgYWdpbGl1bXRyYWRlLmFnaWxpdW10cmFkZS5haVxuICAgKi9cbiAgY29uc3RydWN0b3IoaHR0cENsaWVudCwgdG9rZW4sIGFwaVBhdGgsIGRvbWFpbiA9ICdhZ2lsaXVtdHJhZGUuYWdpbGl1bXRyYWRlLmFpJykge1xuICAgIHRoaXMuX2h0dHBDbGllbnQgPSBodHRwQ2xpZW50O1xuICAgIHRoaXMuX2FwaVBhdGggPSBhcGlQYXRoO1xuICAgIHRoaXMuX2RvbWFpbiA9IGRvbWFpbjtcbiAgICB0aGlzLl90b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuX3VybENhY2hlID0gbnVsbDtcbiAgICB0aGlzLl9yZWdpb25DYWNoZSA9IFtdO1xuICAgIHRoaXMuX3JlZ2lvbkluZGV4ID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGRvbWFpbiBjbGllbnQgZG9tYWluXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IGNsaWVudCBkb21haW5cbiAgICovXG4gIGdldCBkb21haW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RvbWFpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGRvbWFpbiBjbGllbnQgdG9rZW5cbiAgICogQHJldHVybnMge1N0cmluZ30gY2xpZW50IHRva2VuXG4gICAqL1xuICBnZXQgdG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGFuIGF1dGhvcml6ZWQganNvbiBBUEkgcmVxdWVzdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyBvcHRpb25zIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtpc0V4dGVuZGVkVGltZW91dF0gd2hldGhlciB0byBydW4gdGhlIHJlcXVlc3Qgd2l0aCBhbiBleHRlbmRlZCB0aW1lb3V0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdHxTdHJpbmd8YW55Pn0gcmVxdWVzdCByZXN1bHRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3RBcGkob3B0cywgaXNFeHRlbmRlZFRpbWVvdXQgPSBmYWxzZSkge1xuICAgIGF3YWl0IHRoaXMuX3VwZGF0ZUhvc3QoKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHBDbGllbnQucmVxdWVzdChPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7XG4gICAgICAgIGhlYWRlcnM6IG9wdHMuaGVhZGVycyB8fCB7J2F1dGgtdG9rZW4nOiB0aGlzLl90b2tlbn0sXG4gICAgICAgIHVybDogdGhpcy5fdXJsQ2FjaGUudXJsICsgb3B0cy51cmwsXG4gICAgICAgIGpzb246IHRydWVcbiAgICAgIH0pLCBpc0V4dGVuZGVkVGltZW91dCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoIVsnQ29uZmxpY3RFcnJvcicsICdJbnRlcm5hbEVycm9yJywgJ0FwaUVycm9yJywgJ1RpbWVvdXRFcnJvciddLmluY2x1ZGVzKGVyci5uYW1lKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5fcmVnaW9uQ2FjaGUubGVuZ3RoID09PSB0aGlzLl9yZWdpb25JbmRleCArIDEpIHtcbiAgICAgICAgICB0aGlzLl9yZWdpb25JbmRleCA9IDA7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3JlZ2lvbkluZGV4Kys7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEFwaShvcHRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGFuIGh0dHAgcmVxdWVzdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyBvcHRpb25zIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3R8U3RyaW5nfGFueT59IHJlcXVlc3QgcmVzdWx0XG4gICAqL1xuICByZXF1ZXN0KG9wdHMpIHtcbiAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5yZXF1ZXN0KG9wdHMpO1xuICB9XG5cbiAgYXN5bmMgX3VwZGF0ZUhvc3QoKSB7XG4gICAgaWYgKCF0aGlzLl91cmxDYWNoZSB8fCB0aGlzLl91cmxDYWNoZS5sYXN0VXBkYXRlZCA8IERhdGUubm93KCkgLSAxMDAwICogNjAgKiAxMCkge1xuICAgICAgYXdhaXQgdGhpcy5fdXBkYXRlUmVnaW9ucygpO1xuICAgICAgY29uc3QgdXJsU2V0dGluZ3MgPSBhd2FpdCB0aGlzLl9odHRwQ2xpZW50LnJlcXVlc3Qoe1xuICAgICAgICB1cmw6IGBodHRwczovL210LXByb3Zpc2lvbmluZy1hcGktdjEuJHt0aGlzLl9kb21haW59L3VzZXJzL2N1cnJlbnQvc2VydmVycy9tdC1jbGllbnQtYXBpYCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdhdXRoLXRva2VuJzogdGhpcy5fdG9rZW5cbiAgICAgICAgfSxcbiAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fdXJsQ2FjaGUgPSB7XG4gICAgICAgIHVybDogYGh0dHBzOi8vJHt0aGlzLl9hcGlQYXRofS4ke3RoaXMuX3JlZ2lvbkNhY2hlW3RoaXMuX3JlZ2lvbkluZGV4XX0uJHt1cmxTZXR0aW5ncy5kb21haW59YCxcbiAgICAgICAgZG9tYWluOiB1cmxTZXR0aW5ncy5kb21haW4sXG4gICAgICAgIGxhc3RVcGRhdGVkOiBEYXRlLm5vdygpXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl91cmxDYWNoZSA9IHtcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly8ke3RoaXMuX2FwaVBhdGh9LiR7dGhpcy5fcmVnaW9uQ2FjaGVbdGhpcy5fcmVnaW9uSW5kZXhdfS4ke3RoaXMuX3VybENhY2hlLmRvbWFpbn1gLFxuICAgICAgICBkb21haW46IHRoaXMuX3VybENhY2hlLmRvbWFpbixcbiAgICAgICAgbGFzdFVwZGF0ZWQ6IERhdGUubm93KClcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX3VwZGF0ZVJlZ2lvbnMoKSB7XG4gICAgdGhpcy5fcmVnaW9uSW5kZXggPSAwO1xuICAgIHRoaXMuX3JlZ2lvbkNhY2hlID0gYXdhaXQgdGhpcy5faHR0cENsaWVudC5yZXF1ZXN0KHtcbiAgICAgIHVybDogYGh0dHBzOi8vbXQtcHJvdmlzaW9uaW5nLWFwaS12MS4ke3RoaXMuX2RvbWFpbn0vdXNlcnMvY3VycmVudC9yZWdpb25zYCxcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdhdXRoLXRva2VuJzogdGhpcy5fdG9rZW5cbiAgICAgIH0sXG4gICAgICBqc29uOiB0cnVlLFxuICAgIH0pO1xuICB9XG59Il0sIm5hbWVzIjpbIkRvbWFpbkNsaWVudCIsImRvbWFpbiIsIl9kb21haW4iLCJ0b2tlbiIsIl90b2tlbiIsInJlcXVlc3RBcGkiLCJvcHRzIiwiaXNFeHRlbmRlZFRpbWVvdXQiLCJfdXBkYXRlSG9zdCIsIl9odHRwQ2xpZW50IiwicmVxdWVzdCIsIk9iamVjdCIsImFzc2lnbiIsImhlYWRlcnMiLCJ1cmwiLCJfdXJsQ2FjaGUiLCJqc29uIiwiZXJyIiwiaW5jbHVkZXMiLCJuYW1lIiwiX3JlZ2lvbkNhY2hlIiwibGVuZ3RoIiwiX3JlZ2lvbkluZGV4IiwibGFzdFVwZGF0ZWQiLCJEYXRlIiwibm93IiwiX3VwZGF0ZVJlZ2lvbnMiLCJ1cmxTZXR0aW5ncyIsIm1ldGhvZCIsIl9hcGlQYXRoIiwiY29uc3RydWN0b3IiLCJodHRwQ2xpZW50IiwiYXBpUGF0aCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFLcUJBOzs7QUFBTixJQUFBLEFBQU1BLGVBQU4sTUFBTUE7SUFtQm5COzs7R0FHQyxHQUNELElBQUlDLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQ0MsT0FBTztJQUNyQjtJQUVBOzs7R0FHQyxHQUNELElBQUlDLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQ0MsTUFBTTtJQUNwQjtJQUVBOzs7OztHQUtDLEdBQ0QsTUFBTUMsV0FBV0MsSUFBSSxFQUFFQyxvQkFBb0IsS0FBSyxFQUFFO1FBQ2hELE1BQU0sSUFBSSxDQUFDQyxXQUFXO1FBQ3RCLElBQUk7WUFDRixPQUFPLE1BQU0sSUFBSSxDQUFDQyxXQUFXLENBQUNDLE9BQU8sQ0FBQ0MsT0FBT0MsTUFBTSxDQUFDLENBQUMsR0FBR04sTUFBTTtnQkFDNURPLFNBQVNQLEtBQUtPLE9BQU8sSUFBSTtvQkFBQyxjQUFjLElBQUksQ0FBQ1QsTUFBTTtnQkFBQTtnQkFDbkRVLEtBQUssSUFBSSxDQUFDQyxTQUFTLENBQUNELEdBQUcsR0FBR1IsS0FBS1EsR0FBRztnQkFDbENFLE1BQU07WUFDUixJQUFJVDtRQUNOLEVBQUUsT0FBT1UsS0FBSztZQUNaLElBQUksQ0FBQztnQkFBQztnQkFBaUI7Z0JBQWlCO2dCQUFZO2FBQWUsQ0FBQ0MsUUFBUSxDQUFDRCxJQUFJRSxJQUFJLEdBQUc7Z0JBQ3RGLE1BQU1GO1lBQ1IsT0FBTztnQkFDTCxJQUFJLElBQUksQ0FBQ0csWUFBWSxDQUFDQyxNQUFNLEtBQUssSUFBSSxDQUFDQyxZQUFZLEdB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