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)
149 lines (148 loc) • 13.3 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);
});
};
}
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
*/ requestApi(opts, isExtendedTimeout = false) {
var _this = this;
return _async_to_generator(function*() {
yield _this._updateHost();
try {
return yield _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);
}
_updateHost() {
var _this = this;
return _async_to_generator(function*() {
if (!_this._urlCache || _this._urlCache.lastUpdated < Date.now() - 1000 * 60 * 10) {
yield _this._updateRegions();
const urlSettings = yield _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()
};
}
})();
}
_updateRegions() {
var _this = this;
return _async_to_generator(function*() {
_this._regionIndex = 0;
_this._regionCache = yield _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;
}
};
/**
* Connection URL and request managing client
*/ export { DomainClient as default };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjxhbm9uPiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29ubmVjdGlvbiBVUkwgYW5kIHJlcXVlc3QgbWFuYWdpbmcgY2xpZW50XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpbkNsaWVudCB7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgZG9tYWluIGNsaWVudCBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge0h0dHBDbGllbnR9IGh0dHBDbGllbnQgSFRUUCBjbGllbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IHRva2VuIGF1dGhvcml6YXRpb24gdG9rZW5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGFwaVBhdGggYXBpIHVybCBwYXJ0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gZG9tYWluIHRvIGNvbm5lY3QgdG8sIGRlZmF1bHQgaXMgYWdpbGl1bXRyYWRlLmFnaWxpdW10cmFkZS5haVxuICAgKi9cbiAgY29uc3RydWN0b3IoaHR0cENsaWVudCwgdG9rZW4sIGFwaVBhdGgsIGRvbWFpbiA9ICdhZ2lsaXVtdHJhZGUuYWdpbGl1bXRyYWRlLmFpJykge1xuICAgIHRoaXMuX2h0dHBDbGllbnQgPSBodHRwQ2xpZW50O1xuICAgIHRoaXMuX2FwaVBhdGggPSBhcGlQYXRoO1xuICAgIHRoaXMuX2RvbWFpbiA9IGRvbWFpbjtcbiAgICB0aGlzLl90b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuX3VybENhY2hlID0gbnVsbDtcbiAgICB0aGlzLl9yZWdpb25DYWNoZSA9IFtdO1xuICAgIHRoaXMuX3JlZ2lvbkluZGV4ID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGRvbWFpbiBjbGllbnQgZG9tYWluXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IGNsaWVudCBkb21haW5cbiAgICovXG4gIGdldCBkb21haW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RvbWFpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGRvbWFpbiBjbGllbnQgdG9rZW5cbiAgICogQHJldHVybnMge1N0cmluZ30gY2xpZW50IHRva2VuXG4gICAqL1xuICBnZXQgdG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGFuIGF1dGhvcml6ZWQganNvbiBBUEkgcmVxdWVzdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyBvcHRpb25zIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtpc0V4dGVuZGVkVGltZW91dF0gd2hldGhlciB0byBydW4gdGhlIHJlcXVlc3Qgd2l0aCBhbiBleHRlbmRlZCB0aW1lb3V0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdHxTdHJpbmd8YW55Pn0gcmVxdWVzdCByZXN1bHRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3RBcGkob3B0cywgaXNFeHRlbmRlZFRpbWVvdXQgPSBmYWxzZSkge1xuICAgIGF3YWl0IHRoaXMuX3VwZGF0ZUhvc3QoKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHBDbGllbnQucmVxdWVzdChPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7XG4gICAgICAgIGhlYWRlcnM6IG9wdHMuaGVhZGVycyB8fCB7J2F1dGgtdG9rZW4nOiB0aGlzLl90b2tlbn0sXG4gICAgICAgIHVybDogdGhpcy5fdXJsQ2FjaGUudXJsICsgb3B0cy51cmwsXG4gICAgICAgIGpzb246IHRydWVcbiAgICAgIH0pLCBpc0V4dGVuZGVkVGltZW91dCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoIVsnQ29uZmxpY3RFcnJvcicsICdJbnRlcm5hbEVycm9yJywgJ0FwaUVycm9yJywgJ1RpbWVvdXRFcnJvciddLmluY2x1ZGVzKGVyci5uYW1lKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5fcmVnaW9uQ2FjaGUubGVuZ3RoID09PSB0aGlzLl9yZWdpb25JbmRleCArIDEpIHtcbiAgICAgICAgICB0aGlzLl9yZWdpb25JbmRleCA9IDA7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3JlZ2lvbkluZGV4Kys7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEFwaShvcHRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGFuIGh0dHAgcmVxdWVzdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyBvcHRpb25zIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3R8U3RyaW5nfGFueT59IHJlcXVlc3QgcmVzdWx0XG4gICAqL1xuICByZXF1ZXN0KG9wdHMpIHtcbiAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5yZXF1ZXN0KG9wdHMpO1xuICB9XG5cbiAgYXN5bmMgX3VwZGF0ZUhvc3QoKSB7XG4gICAgaWYgKCF0aGlzLl91cmxDYWNoZSB8fCB0aGlzLl91cmxDYWNoZS5sYXN0VXBkYXRlZCA8IERhdGUubm93KCkgLSAxMDAwICogNjAgKiAxMCkge1xuICAgICAgYXdhaXQgdGhpcy5fdXBkYXRlUmVnaW9ucygpO1xuICAgICAgY29uc3QgdXJsU2V0dGluZ3MgPSBhd2FpdCB0aGlzLl9odHRwQ2xpZW50LnJlcXVlc3Qoe1xuICAgICAgICB1cmw6IGBodHRwczovL210LXByb3Zpc2lvbmluZy1hcGktdjEuJHt0aGlzLl9kb21haW59L3VzZXJzL2N1cnJlbnQvc2VydmVycy9tdC1jbGllbnQtYXBpYCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdhdXRoLXRva2VuJzogdGhpcy5fdG9rZW5cbiAgICAgICAgfSxcbiAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fdXJsQ2FjaGUgPSB7XG4gICAgICAgIHVybDogYGh0dHBzOi8vJHt0aGlzLl9hcGlQYXRofS4ke3RoaXMuX3JlZ2lvbkNhY2hlW3RoaXMuX3JlZ2lvbkluZGV4XX0uJHt1cmxTZXR0aW5ncy5kb21haW59YCxcbiAgICAgICAgZG9tYWluOiB1cmxTZXR0aW5ncy5kb21haW4sXG4gICAgICAgIGxhc3RVcGRhdGVkOiBEYXRlLm5vdygpXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl91cmxDYWNoZSA9IHtcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly8ke3RoaXMuX2FwaVBhdGh9LiR7dGhpcy5fcmVnaW9uQ2FjaGVbdGhpcy5fcmVnaW9uSW5kZXhdfS4ke3RoaXMuX3VybENhY2hlLmRvbWFpbn1gLFxuICAgICAgICBkb21haW46IHRoaXMuX3VybENhY2hlLmRvbWFpbixcbiAgICAgICAgbGFzdFVwZGF0ZWQ6IERhdGUubm93KClcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX3VwZGF0ZVJlZ2lvbnMoKSB7XG4gICAgdGhpcy5fcmVnaW9uSW5kZXggPSAwO1xuICAgIHRoaXMuX3JlZ2lvbkNhY2hlID0gYXdhaXQgdGhpcy5faHR0cENsaWVudC5yZXF1ZXN0KHtcbiAgICAgIHVybDogYGh0dHBzOi8vbXQtcHJvdmlzaW9uaW5nLWFwaS12MS4ke3RoaXMuX2RvbWFpbn0vdXNlcnMvY3VycmVudC9yZWdpb25zYCxcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdhdXRoLXRva2VuJzogdGhpcy5fdG9rZW5cbiAgICAgIH0sXG4gICAgICBqc29uOiB0cnVlLFxuICAgIH0pO1xuICB9XG59Il0sIm5hbWVzIjpbIkRvbWFpbkNsaWVudCIsImRvbWFpbiIsIl9kb21haW4iLCJ0b2tlbiIsIl90b2tlbiIsInJlcXVlc3RBcGkiLCJvcHRzIiwiaXNFeHRlbmRlZFRpbWVvdXQiLCJfdXBkYXRlSG9zdCIsIl9odHRwQ2xpZW50IiwicmVxdWVzdCIsIk9iamVjdCIsImFzc2lnbiIsImhlYWRlcnMiLCJ1cmwiLCJfdXJsQ2FjaGUiLCJqc29uIiwiZXJyIiwiaW5jbHVkZXMiLCJuYW1lIiwiX3JlZ2lvbkNhY2hlIiwibGVuZ3RoIiwiX3JlZ2lvbkluZGV4IiwibGFzdFVwZGF0ZWQiLCJEYXRlIiwibm93IiwiX3VwZGF0ZVJlZ2lvbnMiLCJ1cmxTZXR0aW5ncyIsIm1ldGhvZCIsIl9hcGlQYXRoIiwiY29uc3RydWN0b3IiLCJodHRwQ2xpZW50IiwiYXBpUGF0aCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUtlLElBQUEsQUFBTUEsZUFBTixNQUFNQTtJQW1CbkI7OztHQUdDLEdBQ0QsSUFBSUMsU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDQyxPQUFPO0lBQ3JCO0lBRUE7OztHQUdDLEdBQ0QsSUFBSUMsUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDQyxNQUFNO0lBQ3BCO0lBRUE7Ozs7O0dBS0MsR0FDRCxBQUFNQyxXQUFXQyxJQUFJLEVBQUVDLG9CQUFvQixLQUFLOztlQUFoRCxvQkFBQTtZQUNFLE1BQU0sTUFBS0MsV0FBVztZQUN0QixJQUFJO2dCQUNGLE9BQU8sTUFBTSxNQUFLQyxXQUFXLENBQUNDLE9BQU8sQ0FBQ0MsT0FBT0MsTUFBTSxDQUFDLENBQUMsR0FBR04sTUFBTTtvQkFDNURPLFNBQVNQLEtBQUtPLE9BQU8sSUFBSTt3QkFBQyxjQUFjLE1BQUtULE1BQU07b0JBQUE7b0JBQ25EVSxLQUFLLE1BQUtDLFNBQVMsQ0FBQ0QsR0FBRyxHQUFHUixLQUFLUSxHQUFHO29CQUNsQ0UsTUFBTTtnQkFDUixJQUFJVDtZQUNOLEVBQUUsT0FBT1UsS0FBSztnQkFDWixJQUFJLENBQUM7b0JBQUM7b0JBQWlCO29CQUFpQjtvQkFBWTtpQkFBZSxDQUFDQyxRQUFRLENBQUNELElBQUlFLElBQUksR0FBRztvQkFDdEYsTUFBTUY7Z0JBQ1IsT0FBTztvQkFDTCxJQUFJLE1BQUtHLFlBQVksQ0FBQ0MsTUFBTSxLQUFLLE1BQUtDLFlBQVksR0FBRyxH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