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)
131 lines (130 loc) • 13.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
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
};
}
/**
* Custom event emitter implementation for use
*/ let EventEmitter = class EventEmitter {
/**
* Subscribes a listener to event
* @param event Event to subscribe to
* @param callback Listener function to subscribe
*/ on(event, callback) {
if (!event) {
throw new Error("Event name is empty or undefined");
}
this._listeners[event] = this._listeners[event] || new Set();
this._listeners[event].add(callback);
}
/**
* Unsubscribes a listener from event
* @param event Event to unsubscribe from
* @param callback Callback to unsubscribe
*/ off(event, callback) {
if (this._listeners[event]) {
this._listeners[event].delete(callback);
if (!this._listeners[event].size) {
delete this._listeners[event];
}
}
}
/**
* Subscribes a listener to event once
* @param event Event to subscribe to
* @param callback Listener function to subscribe
* @param options Additional options
*/ once(event, callback, options) {
let listener = (...args)=>{
if (!(options === null || options === void 0 ? void 0 : options.ifArgs) || (options === null || options === void 0 ? void 0 : options.ifArgs(...args))) {
this.off(event, listener);
return callback(...args);
}
};
this.on(event, listener);
}
/**
* Emits an event
* @param event Event to emit
* @param data Event payload
* @returns Promise resolving when all listeners calls completed. Usually async version is useful if listeners may
* return promises and the call should wait for them. If one of listener rejects or throws an error, it will be
* logged. Async listeners called all at once
*/ async emit(event, ...args) {
var _this__listeners_event;
if (!((_this__listeners_event = this._listeners[event]) === null || _this__listeners_event === void 0 ? void 0 : _this__listeners_event.size)) {
return;
}
let results = [];
for (let listener of this._listeners[event]){
results.push(this._callListener(event, listener, args));
}
return Promise.all(results);
}
/**
* Returns subscribed events
* @returns subscribed events
*/ getSubscriptions() {
return Object.keys(this._listeners);
}
/**
* Returns subscribed event listeners
* @param event Event
* @returns Listeners
*/ getListeners(event) {
var _this__listeners_event;
if (!((_this__listeners_event = this._listeners[event]) === null || _this__listeners_event === void 0 ? void 0 : _this__listeners_event.size)) {
return [];
}
return [
...this._listeners[event].values()
];
}
/**
* Returns whether has listeners on specific event
* @param event Event
* @returns Whether has listeners
*/ hasListeners(event) {
return !!this._listeners[event];
}
async _callListener(event, listener, args) {
try {
await listener(...args);
} catch (err) {
this._eventEmitterLogger.error(`${event}: listener failed with error`, err);
}
}
/**
* Constructs instance
*/ constructor(){
_define_property(this, "_listeners", void 0);
_define_property(this, "_eventEmitterLogger", _logger.default.getLogger("EventEmitter"));
this._listeners = {};
}
};
const _default = EventEmitter;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjxhbm9uPiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBMb2dnZXJNYW5hZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5cbi8qKlxuICogQ3VzdG9tIGV2ZW50IGVtaXR0ZXIgaW1wbGVtZW50YXRpb24gZm9yIHVzZVxuICovXG5jbGFzcyBFdmVudEVtaXR0ZXI8TCBleHRlbmRzIExpc3RlbmVyU2lnbmF0dXJlPEw+ID0gRGVmYXVsdExpc3RlbmVyPiB7XG5cbiAgcHJpdmF0ZSBfbGlzdGVuZXJzOiB7W0UgaW4ga2V5b2YgTF0/OiBTZXQ8TFtFXT59O1xuICBwcml2YXRlIF9ldmVudEVtaXR0ZXJMb2dnZXIgPSBMb2dnZXJNYW5hZ2VyLmdldExvZ2dlcignRXZlbnRFbWl0dGVyJyk7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgYSBsaXN0ZW5lciB0byBldmVudFxuICAgKiBAcGFyYW0gZXZlbnQgRXZlbnQgdG8gc3Vic2NyaWJlIHRvXG4gICAqIEBwYXJhbSBjYWxsYmFjayBMaXN0ZW5lciBmdW5jdGlvbiB0byBzdWJzY3JpYmVcbiAgICovXG4gIG9uPFUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIuRXZlbnQ8TD4+KGV2ZW50OiBVLCBjYWxsYmFjazogTFtVXSkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXZlbnQgbmFtZSBpcyBlbXB0eSBvciB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgdGhpcy5fbGlzdGVuZXJzW2V2ZW50XSA9IHRoaXMuX2xpc3RlbmVyc1tldmVudF0gfHwgbmV3IFNldCgpO1xuICAgIHRoaXMuX2xpc3RlbmVyc1tldmVudF0uYWRkKGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZXMgYSBsaXN0ZW5lciBmcm9tIGV2ZW50XG4gICAqIEBwYXJhbSBldmVudCBFdmVudCB0byB1bnN1YnNjcmliZSBmcm9tXG4gICAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFjayB0byB1bnN1YnNjcmliZVxuICAgKi9cbiAgb2ZmPFUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIuRXZlbnQ8TD4+KGV2ZW50OiBVLCBjYWxsYmFjazogTFtVXSkge1xuICAgIGlmICh0aGlzLl9saXN0ZW5lcnNbZXZlbnRdKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnNbZXZlbnRdLmRlbGV0ZShjYWxsYmFjayk7XG4gICAgICBpZiAoIXRoaXMuX2xpc3RlbmVyc1tldmVudF0uc2l6ZSkge1xuICAgICAgICBkZWxldGUgdGhpcy5fbGlzdGVuZXJzW2V2ZW50XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyBhIGxpc3RlbmVyIHRvIGV2ZW50IG9uY2VcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50IHRvIHN1YnNjcmliZSB0b1xuICAgKiBAcGFyYW0gY2FsbGJhY2sgTGlzdGVuZXIgZnVuY3Rpb24gdG8gc3Vic2NyaWJlXG4gICAqIEBwYXJhbSBvcHRpb25zIEFkZGl0aW9uYWwgb3B0aW9uc1xuICAgKi9cbiAgb25jZTxVIGV4dGVuZHMgRXZlbnRFbWl0dGVyLkV2ZW50PEw+PihldmVudDogVSwgY2FsbGJhY2s6IExbVV0sIG9wdGlvbnM/OiBFdmVudEVtaXR0ZXIuT25jZU9wdGlvbnM8TFtVXT4pIHtcbiAgICBsZXQgbGlzdGVuZXI6IGFueSA9ICgoLi4uYXJnczogUGFyYW1ldGVyczxMW1VdPikgPT4ge1xuICAgICAgaWYgKCFvcHRpb25zPy5pZkFyZ3MgfHwgb3B0aW9ucz8uaWZBcmdzKC4uLmFyZ3MpKSB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayguLi5hcmdzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm9uKGV2ZW50LCBsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYW4gZXZlbnRcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50IHRvIGVtaXRcbiAgICogQHBhcmFtIGRhdGEgRXZlbnQgcGF5bG9hZFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB3aGVuIGFsbCBsaXN0ZW5lcnMgY2FsbHMgY29tcGxldGVkLiBVc3VhbGx5IGFzeW5jIHZlcnNpb24gaXMgdXNlZnVsIGlmIGxpc3RlbmVycyBtYXlcbiAgICogcmV0dXJuIHByb21pc2VzIGFuZCB0aGUgY2FsbCBzaG91bGQgd2FpdCBmb3IgdGhlbS4gSWYgb25lIG9mIGxpc3RlbmVyIHJlamVjdHMgb3IgdGhyb3dzIGFuIGVycm9yLCBpdCB3aWxsIGJlXG4gICAqIGxvZ2dlZC4gQXN5bmMgbGlzdGVuZXJzIGNhbGxlZCBhbGwgYXQgb25jZVxuICAgKi9cbiAgYXN5bmMgZW1pdDxVIGV4dGVuZHMgRXZlbnRFbWl0dGVyLkV2ZW50PEw+PihldmVudDogVSwgLi4uYXJnczogUGFyYW1ldGVyczxMW1VdPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzW2V2ZW50XT8uc2l6ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcmVzdWx0cyA9IFtdO1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMuX2xpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9jYWxsTGlzdGVuZXIoZXZlbnQgYXMgc3RyaW5nLCBsaXN0ZW5lciwgYXJncykpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVzdWx0cykgYXMgYW55O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgc3Vic2NyaWJlZCBldmVudHNcbiAgICogQHJldHVybnMgc3Vic2NyaWJlZCBldmVudHNcbiAgICovXG4gIGdldFN1YnNjcmlwdGlvbnMoKTogRXZlbnRFbWl0dGVyLkV2ZW50PEw+W10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9saXN0ZW5lcnMpIGFzIEV2ZW50RW1pdHRlci5FdmVudDxMPltdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgc3Vic2NyaWJlZCBldmVudCBsaXN0ZW5lcnNcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50XG4gICAqIEByZXR1cm5zIExpc3RlbmVyc1xuICAgKi9cbiAgZ2V0TGlzdGVuZXJzPFUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIuRXZlbnQ8TD4+KGV2ZW50OiBVKTogTFtVXVtdIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVyc1tldmVudF0/LnNpemUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi50aGlzLl9saXN0ZW5lcnNbZXZlbnRdLnZhbHVlcygpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgaGFzIGxpc3RlbmVycyBvbiBzcGVjaWZpYyBldmVudFxuICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRcbiAgICogQHJldHVybnMgV2hldGhlciBoYXMgbGlzdGVuZXJzXG4gICAqL1xuICBoYXNMaXN0ZW5lcnM8VSBleHRlbmRzIEV2ZW50RW1pdHRlci5FdmVudDxMPj4oZXZlbnQ6IFUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLl9saXN0ZW5lcnNbZXZlbnRdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfY2FsbExpc3RlbmVyKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55KSA9PiBhbnksIGFyZ3M6IGFueVtdKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGxpc3RlbmVyKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5fZXZlbnRFbWl0dGVyTG9nZ2VyLmVycm9yKGAke2V2ZW50fTogbGlzdGVuZXIgZmFpbGVkIHdpdGggZXJyb3JgLCBlcnIpO1xuICAgIH1cbiAgfVxufVxuXG5uYW1lc3BhY2UgRXZlbnRFbWl0dGVyIHtcblxuICAvKiogTWV0aG9kIG9wdGlvbnMgKi9cbiAgZXhwb3J0IHR5cGUgT25jZU9wdGlvbnM8TGlzdGVuZXIgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueT4gPSB7XG4gICAgLyoqXG4gICAgICogSWYgc3BlY2lmaWVkLCB0aGUgbGlzdGVuZXIgd2lsbCBiZSBjYWxsZWQgb25seSBpZiB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLiBPdGhlcndpc2UsIHRoZSBsaXN0ZW5lciB3aWxsIHdhaXRcbiAgICAgKiBmb3IgdGhlIG5leHQgbWF0Y2hpbmcgY2FsbFxuICAgICAqL1xuICAgIGlmQXJncz86ICguLi5hcmdzOiBQYXJhbWV0ZXJzPExpc3RlbmVyPikgPT4gYm9vbGVhbjtcbiAgfTtcblxuICAvKiogSW5mZXJzIGV2ZW50IHR5cGUgb2YgYSBsaXN0ZW5lciAqL1xuICBleHBvcnQgdHlwZSBFdmVudDxMIGV4dGVuZHMgTGlzdGVuZXJTaWduYXR1cmU8TD4+ID0gRXh0cmFjdDxrZXlvZiBMLCBzdHJpbmc+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBFdmVudEVtaXR0ZXI7XG5cbi8qKlxuICogRXZlbnQgZW1pdHRlciBsaXN0ZW5lciB0eXBlXG4gKi9cbmV4cG9ydCB0eXBlIExpc3RlbmVyU2lnbmF0dXJlPExpc3RlbmVycz4gPSB7XG4gIFtFdmVudE5hbWUgaW4ga2V5b2YgTGlzdGVuZXJzXTogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG59O1xuXG4vKipcbiAqIERlZmF1bHQgZXZlbnQgZW1pdHRlciBsaXN0ZW5lciB0eXBlXG4gKi9cbmV4cG9ydCB0eXBlIERlZmF1bHRMaXN0ZW5lciA9IHtcbiAgW2s6IHN0cmluZ106ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xufTtcbiJdLCJuYW1lcyI6WyJFdmVudEVtaXR0ZXIiLCJvbiIsImV2ZW50IiwiY2FsbGJhY2siLCJFcnJvciIsIl9saXN0ZW5lcnMiLCJTZXQiLCJhZGQiLCJvZmYiLCJkZWxldGUiLCJzaXplIiwib25jZSIsIm9wdGlvbnMiLCJsaXN0ZW5lciIsImFyZ3MiLCJpZkFyZ3MiLCJlbWl0IiwicmVzdWx0cyIsInB1c2giLCJfY2FsbExpc3RlbmVyIiwiUHJvbWlzZSIsImFsbCIsImdldFN1YnNjcmlwdGlvbnMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0TGlzdGVuZXJzIiwidmFsdWVzIiwiaGFzTGlzdGVuZXJzIiwiZXJyIiwiX2V2ZW50RW1pdHRlckxvZ2dlciIsImVycm9yIiwiY29uc3RydWN0b3IiLCJMb2dnZXJNYW5hZ2VyIiwiZ2V0TG9nZ2VyIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFzSUE7OztlQUFBOzs7K0RBcEkwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUxQjs7Q0FFQyxHQUNELElBQUEsQUFBTUEsZUFBTixNQUFNQTtJQVlKOzs7O0dBSUMsR0FDREMsR0FBb0NDLEtBQVEsRUFBRUMsUUFBYyxFQUFFO1FBQzVELElBQUksQ0FBQ0QsT0FBTztZQUNWLE1BQU0sSUFBSUUsTUFBTTtRQUNsQjtRQUNBLElBQUksQ0FBQ0MsVUFBVSxDQUFDSCxNQUFNLEdBQUcsSUFBSSxDQUFDRyxVQUFVLENBQUNILE1BQU0sSUFBSSxJQUFJSTtRQUN2RCxJQUFJLENBQUNELFVBQVUsQ0FBQ0gsTUFBTSxDQUFDSyxHQUFHLENBQUNKO0lBQzdCO0lBRUE7Ozs7R0FJQyxHQUNESyxJQUFxQ04sS0FBUSxFQUFFQyxRQUFjLEVBQUU7UUFDN0QsSUFBSSxJQUFJLENBQUNFLFVBQVUsQ0FBQ0gsTUFBTSxFQUFFO1lBQzFCLElBQUksQ0FBQ0csVUFBVSxDQUFDSCxNQUFNLENBQUNPLE1BQU0sQ0FBQ047WUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQ0UsVUFBVSxDQUFDSCxNQUFNLENBQUNRLElBQUksRUFBRTtnQkFDaEMsT0FBTyxJQUFJLENBQUNMLFVBQVUsQ0FBQ0gsTUFBTTtZQUMvQjtRQUNGO0lBQ0Y7SUFFQTs7Ozs7R0FLQyxHQUNEUyxLQUFzQ1QsS0FBUSxFQUFFQyxRQUFjLEVBQUVTLE9BQXdDLEVBQUU7UUFDeEcsSUFBSUMsV0FBaUIsQ0FBQyxHQUFHQztZQUN2QixJQUFJLEVBQUNGLG9CQUFBQSw4QkFBQUEsUUFBU0csTUFBTSxNQUFJSCxvQkFBQUEsOEJBQUFBLFFBQVNHLE1BQU0sSUFBSUQsUUFBTztnQkFDaEQsSUFBSSxDQUFDTixHQUFHLENBQUNOLE9BQU9XO2dCQUNoQixPQUFPVixZQUFZVztZQUNyQjtRQUNGO1FBQ0EsSUFBSSxDQUFDYixFQUFFLENBQUNDLE9BQU9XO0lBQ2pCO0lBRUE7Ozs7Ozs7R0FPQyxHQUNELE1BQU1HLEtBQXNDZCxLQUFRLEVBQUUsR0FBR1ksSUFBc0IsRUFBaUI7WUFDekY7UUFBTCxJQUFJLEdBQUMseUJBQUEsSUFBSSxDQUFDVCxVQUFVLENBQUNILE1BQU0sY0FBdEIsNkNBQUEsdUJBQXdCUSxJQUFJLEdBQUU7WUFDakM7UUFDRjtRQUNBLElBQUlPLFVBQVUsRUFBRTtRQUNoQixLQUFLLElBQUlKLFlBQVksSUFBSSxDQUFDUixVQUFVLENBQUNILE1BQU0sQ0FBRTtZQUMzQ2UsUUFBUUMsSUFBSSxDQUFDLElBQUksQ0FBQ0MsYUFBYSxDQUFDakIsT0FBaUJXLFVBQVVDO1FBQzdEO1FBQ0EsT0FBT00sUUFBUUMsR0FBRyxDQUFDSjtJQUNyQjtJQUVBOzs7R0FHQyxHQUNESyxtQkFBNEM7UUFDMUMsT0FBT0MsT0FBT0MsSUFBSSxDQUFDLElBQUksQ0FBQ25CLFVBQVU7SUFDcEM7SUFFQTs7OztHQUlDLEdBQ0RvQixhQUE4Q3ZCLEtBQVEsRUFBVTtZQUN6RDtRQUFMLElBQUksR0FBQyx5QkFBQSxJQUFJLENBQUNHLFVBQVUsQ0FBQ0gsTUFBTSxjQUF0Qiw2Q0FBQSx1QkFBd0JRLElBQUksR0FBRTtZQUNqQyxPQUFPLEVBQUU7UUFDWDtRQUNBLE9BQU87ZUFBSSxJQUFJLENBQUNMLFVBQVUsQ0FBQ0gsTUFBTSxDQUFDd0IsTUFBTTtTQUFHO0lBQzdDO0lBRUE7Ozs7R0FJQyxHQUNEQyxhQUE4Q3pCLEtBQVEsRUFBVztRQUMvRCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUNHLFVBQVUsQ0FBQ0gsTUFBTTtJQUNqQztJQUVBLE1BQWNpQixjQUFjakIsS0FBYSxFQUFFVyxRQUErQixFQUFFQyxJQUFXLEVBQUU7UUFDdkYsSUFBSTtZQUNGLE1BQU1ELFlBQVlDO1FBQ3BCLEVBQUUsT0FBT2MsS0FBSztZQUNaLElBQUksQ0FBQ0MsbUJBQW1CLENBQUNDLEtBQUssQ0FBQyxDQUFDLEVBQUU1QixNQUFNLDRCQUE0QixDQUFDLEVBQUUwQjtRQUN6RTtJQUNGO0lBeEdBOztHQUVDLEdBQ0RHLGFBQWM7UUFOZCx1QkFBUTFCLGNBQVIsS0FBQTtRQUNBLHVCQUFRd0IsdUJBQXNCRyxlQUFhLENBQUNDLFNBQVMsQ0FBQztRQU1wRCxJQUFJLENBQUM1QixVQUFVLEdBQUcsQ0FBQztJQUNyQjtBQW9HRjtNQWlCQSxXQUFlTCJ9