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)

131 lines (130 loc) 13.1 kB
"use strict"; 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