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)

174 lines (173 loc) 15.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { ApiError: function() { return ApiError; }, ConflictError: function() { return ConflictError; }, ForbiddenError: function() { return ForbiddenError; }, InternalError: function() { return InternalError; }, NotFoundError: function() { return NotFoundError; }, TooManyRequestsError: function() { return TooManyRequestsError; }, UnauthorizedError: function() { return UnauthorizedError; }, ValidationError: function() { return ValidationError; } }); 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; } /** * Base class for API errors. Contains indication of HTTP status. */ const isNode = typeof process !== "undefined" && process.release && process.release.name === "node"; let ApiError = class ApiError extends Error { /** * Sets error code, used for i18n * @param {string} code error code for i18n */ set code(code) { this._code = code; } /** * Returns error code used for i18n * @return {string} error code */ get code() { return this._code; } /** * Set message arguments for i18n * @param {Array<Object>} args arguments for i18n */ set arguments(args) { this._args = args; } /** * Returns message arguments for i18n * @return {Array<Object>} message arguments for i18n */ get arguments() { return this._args; } /** * ApiError constructor * @param clazz error function * @param message error message * @param status HTTP status * @param url API request URL */ constructor(clazz, message, status, url){ super(url ? message + ". Request URL: " + url : message); /** HTTP status code */ _define_property(this, "status", void 0); /** API request URL */ _define_property(this, "url", void 0); _define_property(this, "_code", void 0); _define_property(this, "_args", void 0); this.name = "ApiError"; this.status = status; this.url = url; if (isNode && Error.captureStackTrace) { Error.captureStackTrace(this, clazz); } } }; let NotFoundError = class NotFoundError extends ApiError { /** * Represents NotFoundError. * @param {string} message error message * @param {string} url API request URL */ constructor(message, url){ super(NotFoundError, message, 404, url); this.name = "NotFoundError"; } }; let ForbiddenError = class ForbiddenError extends ApiError { /** * Constructs forbidden error. * @param {string} message error message * @param {string} url API request URL */ constructor(message, url){ super(ForbiddenError, message, 403, url); this.name = "ForbiddenError"; } }; let UnauthorizedError = class UnauthorizedError extends ApiError { /** * Constructs unauthorized error. * @param {string} message error message * @param {string} url API request URL */ constructor(message, url){ super(UnauthorizedError, message, 401, url); this.name = "UnauthorizedError"; } }; let ValidationError = class ValidationError extends ApiError { /** * Constructs validation error. * @param {string} message error message * @param {Object} details error data * @param {string} url API request URL */ constructor(message, details, url){ super(ValidationError, message, 400, url); /** Validation error details */ _define_property(this, "details", void 0); this.name = "ValidationError"; this.details = details; } }; let InternalError = class InternalError extends ApiError { /** * Constructs unexpected error. * @param {string} message error message * @param {string} url API request URL */ constructor(message, url){ super(InternalError, message, 500, url); this.name = "InternalError"; } }; let ConflictError = class ConflictError extends ApiError { /** * Constructs conflict error. * @param {string} message error message * @param {string} url API request URL */ constructor(message, url){ super(ConflictError, message, 409, url); this.name = "ConflictError"; } }; let TooManyRequestsError = class TooManyRequestsError extends ApiError { /** * Constructs too many requests error. * @param {string} message error message * @param {TooManyRequestsErrorMetadata} metadata error metadata */ constructor(message, metadata, url){ super(TooManyRequestsError, message, 429, url); /** error metadata */ _define_property(this, "metadata", void 0); this.name = "TooManyRequestsError"; this.metadata = metadata; } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjxhbm9uPiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgQVBJIGVycm9ycy4gQ29udGFpbnMgaW5kaWNhdGlvbiBvZiBIVFRQIHN0YXR1cy5cbiAqL1xuXG5jb25zdCBpc05vZGUgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5yZWxlYXNlICYmIHByb2Nlc3MucmVsZWFzZS5uYW1lID09PSAnbm9kZSc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgQVBJIGVycm9ycy4gQ29udGFpbnMgaW5kaWNhdGlvbiBvZiBIVFRQIHN0YXR1cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBcbiAgLyoqIEhUVFAgc3RhdHVzIGNvZGUgKi9cbiAgcHVibGljIHN0YXR1czogbnVtYmVyO1xuICAvKiogQVBJIHJlcXVlc3QgVVJMICovXG4gIHB1YmxpYyB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSBfY29kZTogYW55O1xuICBwcml2YXRlIF9hcmdzOiBhbnk7XG5cbiAgLyoqXG4gICAqIEFwaUVycm9yIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBjbGF6eiBlcnJvciBmdW5jdGlvblxuICAgKiBAcGFyYW0gbWVzc2FnZSBlcnJvciBtZXNzYWdlXG4gICAqIEBwYXJhbSBzdGF0dXMgSFRUUCBzdGF0dXNcbiAgICogQHBhcmFtIHVybCBBUEkgcmVxdWVzdCBVUkxcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNsYXp6OiBGdW5jdGlvbiwgbWVzc2FnZTogc3RyaW5nLCBzdGF0dXM6IG51bWJlciwgdXJsPzogc3RyaW5nKSB7XG4gICAgc3VwZXIodXJsID8gbWVzc2FnZSArICcuIFJlcXVlc3QgVVJMOiAnICsgdXJsIDogbWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0FwaUVycm9yJztcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICB0aGlzLnVybCA9IHVybDtcblxuICAgIGlmIChpc05vZGUgJiYgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIGNsYXp6KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBlcnJvciBjb2RlLCB1c2VkIGZvciBpMThuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIGVycm9yIGNvZGUgZm9yIGkxOG5cbiAgICovXG4gIHNldCBjb2RlKGNvZGU6IHN0cmluZykge1xuICAgIHRoaXMuX2NvZGUgPSBjb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZXJyb3IgY29kZSB1c2VkIGZvciBpMThuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gZXJyb3IgY29kZVxuICAgKi9cbiAgZ2V0IGNvZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY29kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbWVzc2FnZSBhcmd1bWVudHMgZm9yIGkxOG5cbiAgICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBhcmdzIGFyZ3VtZW50cyBmb3IgaTE4blxuICAgKi9cbiAgc2V0IGFyZ3VtZW50cyhhcmdzOiBBcnJheTxPYmplY3Q+KSB7XG4gICAgdGhpcy5fYXJncyA9IGFyZ3M7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBtZXNzYWdlIGFyZ3VtZW50cyBmb3IgaTE4blxuICAgKiBAcmV0dXJuIHtBcnJheTxPYmplY3Q+fSBtZXNzYWdlIGFyZ3VtZW50cyBmb3IgaTE4blxuICAgKi9cbiAgZ2V0IGFyZ3VtZW50cygpOiBBcnJheTxPYmplY3Q+IHtcbiAgICByZXR1cm4gdGhpcy5fYXJncztcbiAgfVxufVxuXG4vKipcbiAqIFRocm93aW5nIHRoaXMgZXJyb3IgcmVzdWx0cyBpbiA0MDQgKE5vdCBGb3VuZCkgSFRUUCByZXNwb25zZSBjb2RlLlxuICovXG5leHBvcnQgY2xhc3MgTm90Rm91bmRFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBOb3RGb3VuZEVycm9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBlcnJvciBtZXNzYWdlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgQVBJIHJlcXVlc3QgVVJMXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHVybD86IHN0cmluZykge1xuICAgIHN1cGVyKE5vdEZvdW5kRXJyb3IsIG1lc3NhZ2UsIDQwNCwgdXJsKTtcbiAgICB0aGlzLm5hbWUgPSAnTm90Rm91bmRFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd2luZyB0aGlzIGVycm9yIHJlc3VsdHMgaW4gNDAzIChGb3JiaWRkZW4pIEhUVFAgcmVzcG9uc2UgY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZvcmJpZGRlbkVycm9yIGV4dGVuZHMgQXBpRXJyb3Ige1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGZvcmJpZGRlbiBlcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIEFQSSByZXF1ZXN0IFVSTFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCB1cmw/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihGb3JiaWRkZW5FcnJvciwgbWVzc2FnZSwgNDAzLCB1cmwpO1xuICAgIHRoaXMubmFtZSA9ICdGb3JiaWRkZW5FcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd2luZyB0aGlzIGVycm9yIHJlc3VsdHMgaW4gNDAxIChVbmF1dGhvcml6ZWQpIEhUVFAgcmVzcG9uc2UgY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFVuYXV0aG9yaXplZEVycm9yIGV4dGVuZHMgQXBpRXJyb3Ige1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHVuYXV0aG9yaXplZCBlcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIEFQSSByZXF1ZXN0IFVSTFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCB1cmw/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihVbmF1dGhvcml6ZWRFcnJvciwgbWVzc2FnZSwgNDAxLCB1cmwpO1xuICAgIHRoaXMubmFtZSA9ICdVbmF1dGhvcml6ZWRFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHZhbGlkYXRpb24gZXJyb3IuIFRocm93aW5nIHRoaXMgZXJyb3IgcmVzdWx0cyBpbiA0MDAgKEJhZCBSZXF1ZXN0KSBIVFRQIHJlc3BvbnNlIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG4gIFxuICAvKiogVmFsaWRhdGlvbiBlcnJvciBkZXRhaWxzICovXG4gIHB1YmxpYyBkZXRhaWxzOiBvYmplY3Q7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdmFsaWRhdGlvbiBlcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge09iamVjdH0gZGV0YWlscyBlcnJvciBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgQVBJIHJlcXVlc3QgVVJMXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIGRldGFpbHM/OiBPYmplY3QsIHVybD86IHN0cmluZykge1xuICAgIHN1cGVyKFZhbGlkYXRpb25FcnJvciwgbWVzc2FnZSwgNDAwLCB1cmwpO1xuICAgIHRoaXMubmFtZSA9ICdWYWxpZGF0aW9uRXJyb3InO1xuICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHVuZXhwZWN0ZWQgZXJyb3IuIFRocm93aW5nIHRoaXMgZXJyb3IgcmVzdWx0cyBpbiA1MDAgKEludGVybmFsIEVycm9yKSBIVFRQIHJlc3BvbnNlIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlcm5hbEVycm9yIGV4dGVuZHMgQXBpRXJyb3Ige1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHVuZXhwZWN0ZWQgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIGVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBBUEkgcmVxdWVzdCBVUkxcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgdXJsPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoSW50ZXJuYWxFcnJvciwgbWVzc2FnZSwgNTAwLCB1cmwpO1xuICAgIHRoaXMubmFtZSA9ICdJbnRlcm5hbEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgY29uZmxpY3QgZXJyb3IuIFRocm93aW5nIHRoaXMgZXJyb3IgcmVzdWx0cyBpbiA0MDkgKENvbmZsaWN0KSBIVFRQIHJlc3BvbnNlIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25mbGljdEVycm9yIGV4dGVuZHMgQXBpRXJyb3Ige1xuICAvKipcbiAgICogQ29uc3RydWN0cyBjb25mbGljdCBlcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIEFQSSByZXF1ZXN0IFVSTFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCB1cmw/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihDb25mbGljdEVycm9yLCBtZXNzYWdlLCA0MDksIHVybCk7XG4gICAgdGhpcy5uYW1lID0gJ0NvbmZsaWN0RXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogbWV0YWRhdGEgZm9yIHRvbyBtYW55IHJlcXVlc3RzIGVycm9yXG4gKi9cbmV4cG9ydCB0eXBlIFRvb01hbnlSZXF1ZXN0c0Vycm9yTWV0YWRhdGEgPSB7XG4gIC8qKiB0aHJvdHRsaW5nIHBlcmlvZCBpbiBtaW51dGVzICovXG4gIHBlcmlvZEluTWludXRlcz86IG51bWJlcixcbiAgLyoqIGF2YWlsYWJsZSByZXF1ZXN0cyBmb3IgcGVyaW9kSW5NaW51dGVzICovXG4gIHJlcXVlc3RzUGVyUGVyaW9kQWxsb3dlZD86IG51bWJlcixcbiAgLyoqIHJlY29tbWVuZGVkIGRhdGUgdG8gcmV0cnkgcmVxdWVzdCAqL1xuICByZWNvbW1lbmRlZFJldHJ5VGltZTogRGF0ZSB8IHN0cmluZyxcbiAgLyoqIGVycm9yIHR5cGUgKi9cbiAgdHlwZT86IHN0cmluZ1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdG9vIG1hbnkgcmVxdWVzdHMgZXJyb3IuIFRocm93aW5nIHRoaXMgZXJyb3IgcmVzdWx0cyBpbiA0MjkgKFRvbyBNYW55IFJlcXVlc3RzKSBIVFRQIHJlc3BvbnNlIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBUb29NYW55UmVxdWVzdHNFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgXG4gIC8qKiBlcnJvciBtZXRhZGF0YSAqL1xuICBwdWJsaWMgbWV0YWRhdGE6IFRvb01hbnlSZXF1ZXN0c0Vycm9yTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdG9vIG1hbnkgcmVxdWVzdHMgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIGVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtUb29NYW55UmVxdWVzdHNFcnJvck1ldGFkYXRhfSBtZXRhZGF0YSBlcnJvciBtZXRhZGF0YVxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBtZXRhZGF0YTogVG9vTWFueVJlcXVlc3RzRXJyb3JNZXRhZGF0YSwgdXJsPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoVG9vTWFueVJlcXVlc3RzRXJyb3IsIG1lc3NhZ2UsIDQyOSwgdXJsKTtcbiAgICB0aGlzLm5hbWUgPSAnVG9vTWFueVJlcXVlc3RzRXJyb3InO1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkFwaUVycm9yIiwiQ29uZmxpY3RFcnJvciIsIkZvcmJpZGRlbkVycm9yIiwiSW50ZXJuYWxFcnJvciIsIk5vdEZvdW5kRXJyb3IiLCJUb29NYW55UmVxdWVzdHNFcnJvciIsIlVuYXV0aG9yaXplZEVycm9yIiwiVmFsaWRhdGlvbkVycm9yIiwiaXNOb2RlIiwicHJvY2VzcyIsInJlbGVhc2UiLCJuYW1lIiwiRXJyb3IiLCJjb2RlIiwiX2NvZGUiLCJhcmd1bWVudHMiLCJhcmdzIiwiX2FyZ3MiLCJjb25zdHJ1Y3RvciIsImNsYXp6IiwibWVzc2FnZSIsInN0YXR1cyIsInVybCIsImNhcHR1cmVTdGFja1RyYWNlIiwiZGV0YWlscyIsIm1ldGFkYXRhIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFXYUEsUUFBUTtlQUFSQTs7SUFvSkFDLGFBQWE7ZUFBYkE7O0lBckVBQyxjQUFjO2VBQWRBOztJQXFEQUMsYUFBYTtlQUFiQTs7SUFyRUFDLGFBQWE7ZUFBYkE7O0lBa0hBQyxvQkFBb0I7ZUFBcEJBOztJQWxGQUMsaUJBQWlCO2VBQWpCQTs7SUFnQkFDLGVBQWU7ZUFBZkE7Ozs7Ozs7Ozs7Ozs7Ozs7QUF4SGI7O0NBRUMsR0FFRCxNQUFNQyxTQUFTLE9BQU9DLFlBQVksZUFBZUEsUUFBUUMsT0FBTyxJQUFJRCxRQUFRQyxPQUFPLENBQUNDLElBQUksS0FBSztBQUt0RixJQUFBLEFBQU1YLFdBQU4sTUFBTUEsaUJBQWlCWTtJQTJCNUI7OztHQUdDLEdBQ0QsSUFBSUMsS0FBS0EsSUFBWSxFQUFFO1FBQ3JCLElBQUksQ0FBQ0MsS0FBSyxHQUFHRDtJQUNmO0lBRUE7OztHQUdDLEdBQ0QsSUFBSUEsT0FBZTtRQUNqQixPQUFPLElBQUksQ0FBQ0MsS0FBSztJQUNuQjtJQUVBOzs7R0FHQyxHQUNELElBQUlDLFVBQVVDLElBQW1CLEVBQUU7UUFDakMsSUFBSSxDQUFDQyxLQUFLLEdBQUdEO0lBQ2Y7SUFFQTs7O0dBR0MsR0FDRCxJQUFJRCxZQUEyQjtRQUM3QixPQUFPLElBQUksQ0FBQ0UsS0FB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