UNPKG

acelga-bus

Version:

An extensible typescript message bus with support for middlewares

77 lines 3.12 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); class EventstoreClient { constructor(client, errorLogger, backoffStrategy, streamName, startPosition = 0) { this.startPosition = 0; this.messagesToGet = 100; this.handler = null; this.client = client; this.backoffStrategy = backoffStrategy; this.streamName = streamName; this.startPosition = startPosition; this.logError = errorLogger; this.declareConsumers(); } setHandler(handler) { this.handler = handler; } publish(eventType, event) { return __awaiter(this, void 0, void 0, function* () { return this.client.writeEvent(this.streamName, eventType, event); }); } declareConsumers() { this.backoffStrategy.on('backoff', (number, delay) => { return this.client.getEvents(this.streamName, this.startPosition, this.messagesToGet) .then((events) => { return this.processConsumedAnswer(events); }) .catch((error) => { return this.backoffStrategy.backoff(error); }); }); this.backoffStrategy.on('fail', (error) => { this.logError(error); }); } processConsumedAnswer(events) { return __awaiter(this, void 0, void 0, function* () { if (events.length === 0) { return this.backoffStrategy.backoff(); } yield this.processEvents(events); this.startPosition += events.length; this.backoffStrategy.reset(); this.backoffStrategy.backoff(); }); } processEvents(events) { return __awaiter(this, void 0, void 0, function* () { if (!this.handler) { return this.logError(new NoHanlderToProcessEvents(events)); } for (const event of events) { yield this.handler(event); } }); } } exports.EventstoreClient = EventstoreClient; class NoHanlderToProcessEvents extends Error { constructor(events) { super(); this.stack = (new Error()).stack; this.events = events; this.message = 'The handler for processing events is still not set. The non-processed events are stored in attribute "events" of this error object'; } } exports.NoHanlderToProcessEvents = NoHanlderToProcessEvents; //# sourceMappingURL=eventstoreConsumer.js.map