outbox-event-bus 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +146 -148
- package/dist/index.cjs +3 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -4
- package/dist/index.mjs.map +1 -1
- package/docs/API_REFERENCE.md +3 -19
- package/docs/PUBLISHING.md +6 -6
- package/package.json +2 -2
- package/src/bus/outbox-event-bus.ts +2 -4
- package/src/in-memory-outbox/in-memory-outbox.ts +1 -1
- package/src/outboxes/in-memory/in-memory-outbox.ts +1 -1
- package/src/utils/promise-utils.ts +1 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["event: FailedBusEvent","event: BusEvent","timer: ReturnType<typeof setTimeout>","cleanups: (() => void)[]","outbox: IOutbox<TTransaction>","ctx: EmitMiddlewareContext<TTransaction>","onceHandler: WrappedEventHandler<T, P>","ctx: HandlerMiddlewareContext<TTransaction>","config: PollingServiceConfig","failedEvents: BusEvent[]","failedEvent: FailedBusEvent","lastError: unknown","bus: IOutboxEventBus<TTransaction>","config?: PublisherConfig","chunks: BusEvent[][]"],"sources":["../src/errors/errors.ts","../src/utils/middleware-utils.ts","../src/utils/promise-utils.ts","../src/utils/time-utils.ts","../src/bus/outbox-event-bus.ts","../src/errors/error-reporting.ts","../src/errors/error-utils.ts","../src/services/polling-service.ts","../src/outboxes/in-memory/in-memory-outbox.ts","../src/utils/batcher.ts","../src/utils/retry.ts","../src/services/event-publisher.ts","../src/types/types.ts"],"sourcesContent":["import type { BusEvent, FailedBusEvent } from \"../types/types\"\n\nexport interface OutboxErrorContext {\n event?: BusEvent | FailedBusEvent\n cause?: unknown\n [key: string]: unknown\n}\n\nexport abstract class OutboxError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends Error {\n public context?: TContext | undefined\n\n constructor(message: string, name: string, context?: TContext) {\n super(message, { cause: context?.cause })\n this.name = name\n this.context = context\n\n if (\"captureStackTrace\" in Error) {\n Error.captureStackTrace(this, OutboxError)\n }\n\n // Restore prototype chain for proper instanceof checks\n Object.setPrototypeOf(this, new.target.prototype)\n }\n}\n\n// === Configuration Errors ===\n\nexport class ConfigurationError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(message: string, context?: TContext) {\n super(message, \"ConfigurationError\", context)\n }\n}\n\nexport class DuplicateListenerError extends ConfigurationError {\n constructor(eventType: string) {\n super(\n `Event type \"${eventType}\" already has a listener. You can only register one handler per event type.`,\n { eventType }\n )\n this.name = \"DuplicateListenerError\"\n }\n}\n\nexport class UnsupportedOperationError extends ConfigurationError {\n constructor(operation: string, adapterName = \"adapter\") {\n super(`Underlying outbox ${adapterName} does not support management operation: ${operation}`, {\n operation,\n adapterName,\n })\n this.name = \"UnsupportedOperationError\"\n }\n}\n\n// === Validation Errors ===\n\nexport class ValidationError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(message: string, context?: TContext) {\n super(message, \"ValidationError\", context)\n }\n}\n\nexport class BatchSizeLimitError extends ValidationError {\n constructor(limit: number, actual: number) {\n super(`Cannot publish ${actual} events because the batch size limit is ${limit}.`, {\n limit,\n actual,\n })\n this.name = \"BatchSizeLimitError\"\n }\n}\n\n// === Operational Errors ===\n\nexport class OperationalError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(message: string, context?: TContext) {\n super(message, \"OperationalError\", context)\n }\n}\n\nexport class TimeoutError extends OperationalError {\n constructor(operation: string, timeoutMs: number, context?: OutboxErrorContext) {\n super(`Timed out waiting for ${operation} after ${timeoutMs}ms`, {\n operation,\n timeoutMs,\n ...context,\n })\n this.name = \"TimeoutError\"\n }\n}\n\nexport class BackpressureError extends OperationalError {\n constructor(resource: string, context?: OutboxErrorContext) {\n super(`Failed to publish to ${resource}: buffer full (backpressure)`, { resource, ...context })\n this.name = \"BackpressureError\"\n }\n}\n\nexport class MaintenanceError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OperationalError<TContext> {\n constructor(cause: unknown, context?: TContext) {\n const message = cause instanceof Error ? cause.message : String(cause)\n const fullContext = { cause, ...context } as TContext\n super(`Maintenance operation failed: ${message}`, fullContext)\n this.name = \"MaintenanceError\"\n }\n}\n\n// Existing Error - Integrating into hierarchy\nexport class MaxRetriesExceededError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OperationalError<TContext> {\n public get retryCount(): number {\n return this.event.retryCount\n }\n\n constructor(\n cause: unknown,\n public readonly event: FailedBusEvent,\n context?: TContext\n ) {\n const fullContext = {\n cause,\n event,\n ...context,\n } as unknown as TContext\n\n super(`Max retries exceeded (${event.retryCount}). Event moved to DLQ.`, fullContext)\n this.name = \"MaxRetriesExceededError\"\n }\n}\n\nexport class HandlerError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(\n cause: unknown,\n public readonly event: BusEvent,\n context?: TContext\n ) {\n const message = cause instanceof Error ? cause.message : String(cause)\n const fullContext = { cause, event, ...context } as unknown as TContext\n super(`Event handler failed: ${message}`, \"HandlerError\", fullContext)\n }\n}\n","import type { Next } from \"../types/middleware\"\n\nexport async function executeMiddleware<TContext>(\n middlewares: ((ctx: TContext, next: Next) => Promise<void>)[],\n context: TContext\n): Promise<boolean> {\n let currentIndex = -1\n\n async function dispatch(index: number): Promise<boolean> {\n if (index <= currentIndex) {\n throw new Error(\"next() called multiple times\")\n }\n currentIndex = index\n if (index === middlewares.length) {\n return true\n }\n\n const fn = middlewares[index]\n if (!fn) {\n return dispatch(index + 1)\n }\n\n let nextCalled = false\n let dropEvent = false\n let isDownstreamComplete = false\n\n async function next(options?: { dropEvent?: boolean }): Promise<void> {\n if (dropEvent) return\n\n nextCalled = true\n\n if (options?.dropEvent) {\n dropEvent = true\n return\n }\n\n isDownstreamComplete = await dispatch(index + 1)\n }\n\n await fn(context, next)\n\n if (!nextCalled) {\n throw new Error(`Middleware at index ${index} must call next()`)\n }\n\n return !dropEvent && isDownstreamComplete\n }\n\n return dispatch(0)\n}\n","export async function promiseMap<T, R>(\n items: T[],\n mapper: (item: T, index: number) => Promise<R>,\n concurrency: number\n): Promise<R[]> {\n let cursor = 0\n const results = new Array<R>(items.length)\n\n const workers = Array.from({ length: concurrency }, async () => {\n while (cursor < items.length) {\n const index = cursor++\n if (index >= items.length) break\n results[index] = await mapper(items[index] as T, index)\n }\n })\n await Promise.all(workers)\n\n return results\n}\n","export function createTimedPromise<T>(timeoutMs: number, onTimeoutError: () => Error) {\n let timer: ReturnType<typeof setTimeout>\n const cleanups: (() => void)[] = []\n\n const { promise, resolve, reject } = Promise.withResolvers<T>()\n\n let completed = false\n let started = false\n\n function cleanup() {\n if (completed) return\n completed = true\n if (timer) clearTimeout(timer)\n for (const fn of cleanups) {\n fn()\n }\n }\n\n function safeAttempt(fn: () => void) {\n try {\n cleanup()\n fn()\n } catch (error) {\n reject(error)\n }\n }\n\n return {\n resolve: (value: T | PromiseLike<T>) => safeAttempt(() => resolve(value)),\n reject: (reason?: unknown) => safeAttempt(() => reject(reason)),\n addCleanup: (fn: () => void) => {\n cleanups.push(fn)\n },\n start: () => {\n if (started) return promise\n started = true\n\n if (completed) return promise\n\n timer = setTimeout(() => {\n safeAttempt(() => reject(onTimeoutError()))\n }, timeoutMs)\n\n return promise\n },\n }\n}\n","import { DuplicateListenerError, TimeoutError, UnsupportedOperationError } from \"../errors/errors\"\nimport type { IOutbox, IOutboxEventBus } from \"../types/interfaces\"\nimport type {\n EmitMiddleware,\n EmitMiddlewareContext,\n HandlerMiddleware,\n HandlerMiddlewareContext,\n Middleware,\n} from \"../types/middleware\"\nimport type {\n AnyListener,\n BusEvent,\n BusEventInput,\n ErrorHandler,\n EventHandler,\n FailedBusEvent,\n} from \"../types/types\"\nimport { executeMiddleware } from \"../utils/middleware-utils\"\nimport { promiseMap } from \"../utils/promise-utils\"\nimport { createTimedPromise } from \"../utils/time-utils\"\n\nconst DEFAULT_WAIT_TIMEOUT_MS = 5000\n\ntype WrappedEventHandler<T extends string = string, P = unknown> = EventHandler<T, P> & {\n _original?: EventHandler<T, P>\n}\n\nexport type OutboxBusConfig = {\n onError: ErrorHandler\n middlewareConcurrency?: number\n}\n\nexport class OutboxEventBus<TTransaction> implements IOutboxEventBus<TTransaction> {\n private readonly handlers = new Map<string, EventHandler<string, unknown>>()\n private readonly emitMiddlewares: EmitMiddleware<TTransaction>[] = []\n private readonly handlerMiddlewares: HandlerMiddleware<TTransaction>[] = []\n private readonly onError: ErrorHandler\n private readonly middlewareConcurrency: number\n\n constructor(\n private readonly outbox: IOutbox<TTransaction>,\n onErrorOrConfig: ErrorHandler | OutboxBusConfig\n ) {\n if (typeof onErrorOrConfig === \"function\") {\n this.onError = onErrorOrConfig\n this.middlewareConcurrency = 10\n } else {\n this.onError = onErrorOrConfig.onError\n this.middlewareConcurrency = Math.max(1, onErrorOrConfig.middlewareConcurrency ?? 10)\n }\n }\n\n addEmitMiddleware(...middlewares: EmitMiddleware<TTransaction>[]): this {\n this.emitMiddlewares.push(...middlewares)\n return this\n }\n\n addHandlerMiddleware(...middlewares: HandlerMiddleware<TTransaction>[]): this {\n this.handlerMiddlewares.push(...middlewares)\n return this\n }\n\n addMiddleware(...middlewares: Middleware<TTransaction>[]): this {\n this.emitMiddlewares.push(...(middlewares as EmitMiddleware<TTransaction>[]))\n this.handlerMiddlewares.push(...(middlewares as HandlerMiddleware<TTransaction>[]))\n return this\n }\n\n\n\n async emit<T extends string, P>(\n event: BusEventInput<T, P>,\n transaction?: TTransaction\n ): Promise<void> {\n await this.emitMany([event], transaction)\n }\n\n async emitMany<T extends string, P>(\n events: BusEventInput<T, P>[],\n transaction?: TTransaction\n ): Promise<void> {\n if (events.length === 0) return\n\n const eventsWithDefaults = this.prepareEvents(events)\n\n const middlewareSnapshot = [...this.emitMiddlewares]\n if (middlewareSnapshot.length === 0) {\n await this.outbox.publish(eventsWithDefaults, transaction)\n return\n }\n\n const results = await promiseMap(\n eventsWithDefaults,\n (event) => this.runEmitMiddleware(event, middlewareSnapshot, transaction),\n this.middlewareConcurrency\n )\n\n const eventsToPublish = results.filter((e): e is BusEvent => !!e)\n if (eventsToPublish.length > 0) {\n await this.outbox.publish(eventsToPublish, transaction)\n }\n }\n\n private prepareEvents<T extends string, P>(events: BusEventInput<T, P>[]): BusEvent[] {\n return events.map((event) => ({\n ...event,\n id: event.id ?? crypto.randomUUID(),\n occurredAt: event.occurredAt ?? new Date(),\n })) as BusEvent[]\n }\n\n private async runEmitMiddleware(\n event: BusEvent,\n middlewares: EmitMiddleware<TTransaction>[],\n transaction?: TTransaction\n ): Promise<BusEvent | null> {\n const ctx: EmitMiddlewareContext<TTransaction> = {\n event,\n phase: \"emit\",\n transaction,\n }\n\n const shouldPublish = await executeMiddleware(middlewares, ctx)\n\n return shouldPublish ? ctx.event : null\n }\n\n on<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n if (this.handlers.has(eventType)) {\n throw new DuplicateListenerError(eventType)\n }\n\n this.handlers.set(eventType, handler as EventHandler<string, unknown>)\n return this\n }\n\n addListener<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n return this.on(eventType, handler)\n }\n\n once<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n const onceHandler: WrappedEventHandler<T, P> = async (event) => {\n this.off(eventType, onceHandler)\n await handler(event)\n }\n\n onceHandler._original = handler\n return this.on(eventType, onceHandler)\n }\n\n off<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n const currentHandler = this.handlers.get(eventType) as\n | WrappedEventHandler<string, unknown>\n | undefined\n\n if (currentHandler === handler || currentHandler?._original === handler) {\n this.handlers.delete(eventType)\n }\n\n return this\n }\n\n removeListener<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n return this.off(eventType, handler)\n }\n\n removeAllListeners<T extends string>(eventType?: T): this {\n if (eventType) {\n this.handlers.delete(eventType)\n } else {\n this.handlers.clear()\n }\n return this\n }\n\n getListener(eventType: string): AnyListener | undefined {\n return this.handlers.get(eventType) as unknown as AnyListener | undefined\n }\n\n subscribe<T extends string, P = unknown>(eventTypes: T[], handler: EventHandler<T, P>): this {\n for (const type of eventTypes) {\n this.on(type, handler)\n }\n return this\n }\n\n async waitFor<T extends string, P = unknown>(\n eventType: T,\n timeoutMs = DEFAULT_WAIT_TIMEOUT_MS\n ): Promise<BusEvent<T, P>> {\n const timedPromise = createTimedPromise<BusEvent<T, P>>(\n timeoutMs,\n () => new TimeoutError(`event \"${eventType}\"`, timeoutMs, { eventType })\n )\n\n async function handler(event: BusEvent<T, P>) {\n timedPromise.resolve(event)\n }\n\n timedPromise.addCleanup(() => this.off(eventType, handler))\n this.on(eventType, handler)\n\n return timedPromise.start()\n }\n\n start(): void {\n this.outbox.start(this.processEvent, this.onError)\n }\n\n async stop(): Promise<void> {\n await this.outbox.stop()\n }\n\n getSubscriptionCount(): number {\n return this.handlers.size\n }\n\n listenerCount(eventType: string): number {\n return this.handlers.has(eventType) ? 1 : 0\n }\n\n eventNames(): string[] {\n return Array.from(this.handlers.keys())\n }\n\n async getFailedEvents(): Promise<FailedBusEvent[]> {\n if (!this.outbox.getFailedEvents) {\n throw new UnsupportedOperationError(\"getFailedEvents\")\n }\n return this.outbox.getFailedEvents()\n }\n\n async retryEvents(eventIds: string[]): Promise<void> {\n if (!this.outbox.retryEvents) {\n throw new UnsupportedOperationError(\"retryEvents\")\n }\n return this.outbox.retryEvents(eventIds)\n }\n\n private processEvent = async (event: BusEvent): Promise<void> => {\n const middlewareSnapshot = [...this.handlerMiddlewares]\n\n if (middlewareSnapshot.length === 0) {\n const handler = this.handlers.get(event.type)\n if (handler) {\n await handler(event)\n }\n return\n }\n\n const ctx: HandlerMiddlewareContext<TTransaction> = { event, phase: \"handler\" }\n const shouldProcess = await executeMiddleware(middlewareSnapshot, ctx)\n\n if (shouldProcess) {\n const handler = this.handlers.get(ctx.event.type)\n if (handler) {\n await handler(ctx.event)\n }\n }\n }\n}\n","import type { BusEvent, ErrorHandler, FailedBusEvent } from \"../types/types\"\n\nimport { HandlerError, MaxRetriesExceededError } from \"./errors\"\n\nexport function reportEventError(\n onError: ErrorHandler | undefined,\n error: unknown,\n event: BusEvent,\n retryCount: number,\n maxRetries: number\n): void {\n if (!onError) return\n\n if (retryCount > maxRetries) {\n const failedEvent: FailedBusEvent = { ...event, retryCount }\n onError(new MaxRetriesExceededError(error, failedEvent))\n } else {\n onError(new HandlerError(error, event))\n }\n}\n","export function formatErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n","import { MaintenanceError, OperationalError, OutboxError } from \"../errors/errors\"\nimport type { PollingServiceConfig } from \"../types/interfaces\"\nimport type { BusEvent, ErrorHandler } from \"../types/types\"\n\nexport class PollingService {\n private isPolling = false\n private pollTimer: NodeJS.Timeout | null = null\n private errorCount = 0\n private readonly maxErrorBackoffMs: number\n private activePollPromise: Promise<void> | null = null\n\n public onError?: ErrorHandler\n\n constructor(private readonly config: PollingServiceConfig) {\n this.maxErrorBackoffMs = config.maxErrorBackoffMs ?? 30000\n }\n\n start(handler: (event: BusEvent) => Promise<void>, onError: ErrorHandler): void {\n this.onError = onError\n if (this.isPolling) return\n this.isPolling = true\n void this.poll(handler)\n }\n\n async stop(): Promise<void> {\n this.isPolling = false\n if (this.pollTimer) {\n clearTimeout(this.pollTimer)\n this.pollTimer = null\n }\n if (this.activePollPromise) {\n await this.activePollPromise\n }\n }\n\n calculateBackoff(retryCount: number): number {\n const { baseBackoffMs } = this.config\n const backoff = baseBackoffMs * 2 ** (retryCount - 1)\n const jitter = (Math.random() * 0.2 - 0.1) * backoff // ±10% jitter\n return Math.floor(backoff + jitter)\n }\n\n private async poll(handler: (event: BusEvent) => Promise<void>) {\n if (!this.isPolling) return\n\n this.activePollPromise = this.executePoll(handler)\n\n try {\n await this.activePollPromise\n this.errorCount = 0\n } catch (error) {\n this.handlePollError(error)\n } finally {\n this.activePollPromise = null\n this.scheduleNextPoll(handler)\n }\n }\n\n private handlePollError(error: unknown): void {\n const errorToReport =\n error instanceof OutboxError\n ? (error as OutboxError)\n : new OperationalError(\"Polling cycle failed\", { cause: error })\n\n this.onError?.(errorToReport)\n this.errorCount++\n }\n\n private scheduleNextPoll(handler: (event: BusEvent) => Promise<void>): void {\n if (!this.isPolling) return\n\n const delay =\n this.errorCount > 0\n ? Math.min(this.calculateBackoff(this.errorCount + 1), this.maxErrorBackoffMs)\n : this.config.pollIntervalMs\n\n this.pollTimer = setTimeout(() => {\n void this.poll(handler)\n }, delay)\n }\n\n private async executePoll(handler: (event: BusEvent) => Promise<void>): Promise<void> {\n if (this.config.performMaintenance) {\n try {\n await this.config.performMaintenance()\n } catch (maintenanceError) {\n throw new MaintenanceError(maintenanceError)\n }\n }\n await this.config.processBatch(handler)\n }\n}\n","import { reportEventError } from \"../../errors/error-reporting\"\nimport { MaxRetriesExceededError } from \"../../errors/errors\"\nimport { PollingService } from \"../../services/polling-service\"\nimport type { IOutbox } from \"../../types/interfaces\"\nimport type { BusEvent, ErrorHandler, FailedBusEvent } from \"../../types/types\"\n\nconst IN_MEMORY_POLL_INTERVAL_MS = 10\nconst IN_MEMORY_BASE_BACKOFF_MS = 10\nconst IN_MEMORY_MAX_ERROR_BACKOFF_MS = 50\nconst IN_MEMORY_DEFAULT_MAX_RETRIES = 3\n\nexport interface InMemoryOutboxConfig {\n maxRetries?: number\n}\n\nexport class InMemoryOutbox implements IOutbox<unknown> {\n private events: BusEvent[] = []\n private deadLetterQueue: BusEvent[] = []\n private readonly poller: PollingService\n private handler: ((event: BusEvent) => Promise<void>) | null = null\n public onError?: ErrorHandler\n private readonly maxRetries?: number\n private retryCounts = new Map<string, number>()\n\n constructor(config: InMemoryOutboxConfig = {}) {\n this.maxRetries = config.maxRetries ?? IN_MEMORY_DEFAULT_MAX_RETRIES\n this.poller = new PollingService({\n pollIntervalMs: IN_MEMORY_POLL_INTERVAL_MS,\n baseBackoffMs: IN_MEMORY_BASE_BACKOFF_MS,\n maxErrorBackoffMs: IN_MEMORY_MAX_ERROR_BACKOFF_MS,\n processBatch: (handler) => this.processBatch(handler),\n })\n }\n\n async publish(events: BusEvent[]): Promise<void> {\n this.events.push(...events)\n }\n\n start(handler: (event: BusEvent) => Promise<void>, onError: ErrorHandler): void {\n this.handler = handler\n this.onError = onError\n this.poller.start(handler, onError)\n }\n\n async stop(): Promise<void> {\n await this.poller.stop()\n // Drain remaining events\n while (this.events.length > 0 && this.handler) {\n await this.processBatch(this.handler)\n }\n this.handler = null\n }\n\n async getFailedEvents(): Promise<FailedBusEvent[]> {\n return this.deadLetterQueue.map((event) => ({\n ...event,\n retryCount: this.retryCounts.get(event.id) ?? this.maxRetries ?? 0,\n error: \"Max retries exceeded\", // capture actual error if possible\n }))\n }\n\n async retryEvents(eventIds: string[]): Promise<void> {\n const eventsToRetry = this.deadLetterQueue.filter((event) => eventIds.includes(event.id))\n this.deadLetterQueue = this.deadLetterQueue.filter((event) => !eventIds.includes(event.id))\n\n for (const event of eventsToRetry) {\n this.retryCounts.set(event.id, 0)\n this.events.push(event)\n }\n }\n\n private async processBatch(handler: (event: BusEvent) => Promise<void>) {\n if (this.events.length === 0) return\n\n const batch = this.events\n this.events = []\n\n const failedEvents: BusEvent[] = []\n\n for (const event of batch) {\n try {\n await handler(event)\n if (event.id) {\n this.retryCounts.delete(event.id)\n }\n } catch (error) {\n const currentRetries = event.id ? (this.retryCounts.get(event.id) ?? 0) : 0\n const nextRetryCount = currentRetries + 1\n\n if (this.shouldRetry(event)) {\n failedEvents.push(event)\n if (this.maxRetries !== undefined) {\n reportEventError(this.onError, error, event, nextRetryCount, this.maxRetries)\n }\n } else {\n this.moveToDLQ(event, error)\n }\n }\n }\n\n if (failedEvents.length > 0) {\n this.events.unshift(...failedEvents)\n }\n }\n\n private shouldRetry(event: BusEvent): boolean {\n if (this.maxRetries === undefined || !event.id) return true\n\n const currentRetries = this.retryCounts.get(event.id) ?? 0\n if (currentRetries < this.maxRetries) {\n this.retryCounts.set(event.id, currentRetries + 1)\n return true\n }\n\n return false\n }\n\n private moveToDLQ(event: BusEvent, error: unknown): void {\n const retryCount = (event.id ? this.retryCounts.get(event.id) : 0) ?? 0\n if (event.id) {\n this.retryCounts.delete(event.id)\n }\n\n const failedEvent: FailedBusEvent = { ...event, retryCount: retryCount + 1 }\n this.onError?.(new MaxRetriesExceededError(error, failedEvent))\n this.deadLetterQueue.push(event)\n }\n}\n","export interface BatcherConfig<T> {\n batchSize: number\n batchTimeoutMs: number\n processBatch: (items: T[]) => Promise<void>\n}\n\ninterface QueuedItem<T> {\n item: T\n resolve: () => void\n reject: (error: unknown) => void\n}\n\nexport class Batcher<T> {\n private queue: QueuedItem<T>[] = []\n private timer: NodeJS.Timeout | null = null\n private readonly config: BatcherConfig<T>\n\n constructor(config: BatcherConfig<T>) {\n this.config = config\n }\n\n async add(item: T): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n this.queue.push({ item, resolve, reject })\n this.scheduleFlushIfNeeded()\n })\n }\n\n private scheduleFlushIfNeeded(): void {\n if (this.queue.length >= this.config.batchSize) {\n void this.flush()\n return\n }\n\n this.timer ??= setTimeout(() => {\n void this.flush()\n }, this.config.batchTimeoutMs)\n }\n\n private async flush(): Promise<void> {\n this.clearTimer()\n\n if (this.queue.length === 0) return\n\n const currentBatch = this.queue\n this.queue = []\n\n const items = currentBatch.map((qi) => qi.item)\n\n try {\n await this.config.processBatch(items)\n for (const qi of currentBatch) qi.resolve()\n } catch (error) {\n for (const qi of currentBatch) qi.reject(error)\n }\n }\n\n private clearTimer(): void {\n if (this.timer) {\n clearTimeout(this.timer)\n this.timer = null\n }\n }\n}\n","import type { RetryOptions } from \"../types/types\"\n\nexport async function withRetry<T>(\n operation: () => Promise<T>,\n options: Required<RetryOptions>\n): Promise<T> {\n let lastError: unknown\n let delay = options.initialDelayMs\n\n for (let attempt = 1; attempt <= options.maxAttempts; attempt++) {\n try {\n return await operation()\n } catch (error) {\n lastError = error\n if (attempt < options.maxAttempts) {\n await new Promise((resolve) => setTimeout(resolve, delay))\n delay = Math.min(delay * 2, options.maxDelayMs)\n }\n }\n }\n\n throw lastError\n}\n","import type { IOutboxEventBus } from \"../types/interfaces\"\nimport type { BusEvent, ProcessingOptions, PublisherConfig, RetryOptions } from \"../types/types\"\nimport { Batcher } from \"../utils/batcher\"\nimport { promiseMap } from \"../utils/promise-utils\"\nimport { withRetry } from \"../utils/retry\"\n\nexport class EventPublisher<TTransaction> {\n static readonly DEFAULT_BUFFER_SIZE = 50\n static readonly DEFAULT_BUFFER_TIMEOUT_MS = 100\n static readonly DEFAULT_CONCURRENCY = 5\n static readonly DEFAULT_RETRY_ATTEMPTS = 3\n static readonly DEFAULT_RETRY_DELAY_MS = 1000\n static readonly DEFAULT_RETRY_MAX_DELAY_MS = 10000\n\n private readonly retryOptions: Required<RetryOptions>\n\n constructor(\n private readonly bus: IOutboxEventBus<TTransaction>,\n private readonly config?: PublisherConfig\n ) {\n const { retryConfig } = config ?? {}\n this.retryOptions = {\n maxAttempts: retryConfig?.maxAttempts ?? EventPublisher.DEFAULT_RETRY_ATTEMPTS,\n initialDelayMs: retryConfig?.initialDelayMs ?? EventPublisher.DEFAULT_RETRY_DELAY_MS,\n maxDelayMs: retryConfig?.maxDelayMs ?? EventPublisher.DEFAULT_RETRY_MAX_DELAY_MS,\n }\n }\n\n static withOverrides(\n config: PublisherConfig,\n processingOverrides: Partial<ProcessingOptions>\n ): PublisherConfig {\n return {\n ...config,\n processingConfig: {\n ...config.processingConfig,\n ...processingOverrides,\n },\n }\n }\n\n subscribe(eventTypes: string[], handler: (events: BusEvent[]) => Promise<void>): void {\n const processingConfig = this.config?.processingConfig\n const batcher = new Batcher<BusEvent>({\n batchSize: processingConfig?.bufferSize ?? EventPublisher.DEFAULT_BUFFER_SIZE,\n batchTimeoutMs: processingConfig?.bufferTimeoutMs ?? EventPublisher.DEFAULT_BUFFER_TIMEOUT_MS,\n processBatch: (events) => this.handleBatch(events, handler),\n })\n\n this.bus.subscribe(eventTypes, (event) => batcher.add(event))\n }\n\n private async handleBatch(\n events: BusEvent[],\n handler: (events: BusEvent[]) => Promise<void>\n ): Promise<void> {\n const { maxBatchSize, concurrency = EventPublisher.DEFAULT_CONCURRENCY } =\n this.config?.processingConfig ?? {}\n\n if (!maxBatchSize || events.length <= maxBatchSize) {\n return withRetry(() => handler(events), this.retryOptions)\n }\n\n const chunks: BusEvent[][] = []\n for (let offset = 0; offset < events.length; offset += maxBatchSize) {\n chunks.push(events.slice(offset, offset + maxBatchSize))\n }\n\n await promiseMap(\n chunks,\n (chunk) => withRetry(() => handler(chunk), this.retryOptions),\n concurrency\n )\n }\n}\n","import type { OutboxError } from \"../errors/errors\"\n\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport type BusEvent<T extends string = string, P = unknown> = {\n id: string\n type: T\n payload: P\n occurredAt: Date\n metadata?: Record<string, unknown>\n}\n\nexport type FailedBusEvent<T extends string = string, P = unknown> = BusEvent<T, P> & {\n error?: string\n retryCount: number\n lastAttemptAt?: Date\n}\n\nexport type BusEventInput<T extends string = string, P = unknown> = PartialBy<\n BusEvent<T, P>,\n \"id\" | \"occurredAt\"\n>\n\nexport type EventHandler<T extends string = string, P = unknown> = (\n event: BusEvent<T, P>\n) => Promise<void>\n\nexport type AnyListener = (...args: unknown[]) => unknown\n\nexport type ErrorHandler = (error: OutboxError) => void\n\nexport type RetryOptions = {\n maxAttempts?: number\n initialDelayMs?: number\n maxDelayMs?: number\n}\n\nexport type ProcessingOptions = {\n bufferSize?: number\n bufferTimeoutMs?: number\n concurrency?: number\n maxBatchSize?: number\n}\n\nexport type PublisherConfig = {\n retryConfig?: RetryOptions\n processingConfig?: ProcessingOptions\n}\n\nexport const EventStatus = {\n CREATED: \"created\",\n ACTIVE: \"active\",\n FAILED: \"failed\",\n COMPLETED: \"completed\",\n} as const\n\nexport type EventStatus = (typeof EventStatus)[keyof typeof EventStatus]\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["event: FailedBusEvent","event: BusEvent","timer: ReturnType<typeof setTimeout>","cleanups: (() => void)[]","outbox: IOutbox<TTransaction>","ctx: EmitMiddlewareContext<TTransaction>","onceHandler: WrappedEventHandler<T, P>","ctx: HandlerMiddlewareContext<TTransaction>","config: PollingServiceConfig","failedEvents: BusEvent[]","failedEvent: FailedBusEvent","lastError: unknown","bus: IOutboxEventBus<TTransaction>","config?: PublisherConfig","chunks: BusEvent[][]"],"sources":["../src/errors/errors.ts","../src/utils/middleware-utils.ts","../src/utils/promise-utils.ts","../src/utils/time-utils.ts","../src/bus/outbox-event-bus.ts","../src/errors/error-reporting.ts","../src/errors/error-utils.ts","../src/services/polling-service.ts","../src/outboxes/in-memory/in-memory-outbox.ts","../src/utils/batcher.ts","../src/utils/retry.ts","../src/services/event-publisher.ts","../src/types/types.ts"],"sourcesContent":["import type { BusEvent, FailedBusEvent } from \"../types/types\"\n\nexport interface OutboxErrorContext {\n event?: BusEvent | FailedBusEvent\n cause?: unknown\n [key: string]: unknown\n}\n\nexport abstract class OutboxError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends Error {\n public context?: TContext | undefined\n\n constructor(message: string, name: string, context?: TContext) {\n super(message, { cause: context?.cause })\n this.name = name\n this.context = context\n\n if (\"captureStackTrace\" in Error) {\n Error.captureStackTrace(this, OutboxError)\n }\n\n // Restore prototype chain for proper instanceof checks\n Object.setPrototypeOf(this, new.target.prototype)\n }\n}\n\n// === Configuration Errors ===\n\nexport class ConfigurationError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(message: string, context?: TContext) {\n super(message, \"ConfigurationError\", context)\n }\n}\n\nexport class DuplicateListenerError extends ConfigurationError {\n constructor(eventType: string) {\n super(\n `Event type \"${eventType}\" already has a listener. You can only register one handler per event type.`,\n { eventType }\n )\n this.name = \"DuplicateListenerError\"\n }\n}\n\nexport class UnsupportedOperationError extends ConfigurationError {\n constructor(operation: string, adapterName = \"adapter\") {\n super(`Underlying outbox ${adapterName} does not support management operation: ${operation}`, {\n operation,\n adapterName,\n })\n this.name = \"UnsupportedOperationError\"\n }\n}\n\n// === Validation Errors ===\n\nexport class ValidationError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(message: string, context?: TContext) {\n super(message, \"ValidationError\", context)\n }\n}\n\nexport class BatchSizeLimitError extends ValidationError {\n constructor(limit: number, actual: number) {\n super(`Cannot publish ${actual} events because the batch size limit is ${limit}.`, {\n limit,\n actual,\n })\n this.name = \"BatchSizeLimitError\"\n }\n}\n\n// === Operational Errors ===\n\nexport class OperationalError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(message: string, context?: TContext) {\n super(message, \"OperationalError\", context)\n }\n}\n\nexport class TimeoutError extends OperationalError {\n constructor(operation: string, timeoutMs: number, context?: OutboxErrorContext) {\n super(`Timed out waiting for ${operation} after ${timeoutMs}ms`, {\n operation,\n timeoutMs,\n ...context,\n })\n this.name = \"TimeoutError\"\n }\n}\n\nexport class BackpressureError extends OperationalError {\n constructor(resource: string, context?: OutboxErrorContext) {\n super(`Failed to publish to ${resource}: buffer full (backpressure)`, { resource, ...context })\n this.name = \"BackpressureError\"\n }\n}\n\nexport class MaintenanceError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OperationalError<TContext> {\n constructor(cause: unknown, context?: TContext) {\n const message = cause instanceof Error ? cause.message : String(cause)\n const fullContext = { cause, ...context } as TContext\n super(`Maintenance operation failed: ${message}`, fullContext)\n this.name = \"MaintenanceError\"\n }\n}\n\n// Existing Error - Integrating into hierarchy\nexport class MaxRetriesExceededError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OperationalError<TContext> {\n public get retryCount(): number {\n return this.event.retryCount\n }\n\n constructor(\n cause: unknown,\n public readonly event: FailedBusEvent,\n context?: TContext\n ) {\n const fullContext = {\n cause,\n event,\n ...context,\n } as unknown as TContext\n\n super(`Max retries exceeded (${event.retryCount}). Event moved to DLQ.`, fullContext)\n this.name = \"MaxRetriesExceededError\"\n }\n}\n\nexport class HandlerError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(\n cause: unknown,\n public readonly event: BusEvent,\n context?: TContext\n ) {\n const message = cause instanceof Error ? cause.message : String(cause)\n const fullContext = { cause, event, ...context } as unknown as TContext\n super(`Event handler failed: ${message}`, \"HandlerError\", fullContext)\n }\n}\n","import type { Next } from \"../types/middleware\"\n\nexport async function executeMiddleware<TContext>(\n middlewares: ((ctx: TContext, next: Next) => Promise<void>)[],\n context: TContext\n): Promise<boolean> {\n let currentIndex = -1\n\n async function dispatch(index: number): Promise<boolean> {\n if (index <= currentIndex) {\n throw new Error(\"next() called multiple times\")\n }\n currentIndex = index\n if (index === middlewares.length) {\n return true\n }\n\n const fn = middlewares[index]\n if (!fn) {\n return dispatch(index + 1)\n }\n\n let nextCalled = false\n let dropEvent = false\n let isDownstreamComplete = false\n\n async function next(options?: { dropEvent?: boolean }): Promise<void> {\n if (dropEvent) return\n\n nextCalled = true\n\n if (options?.dropEvent) {\n dropEvent = true\n return\n }\n\n isDownstreamComplete = await dispatch(index + 1)\n }\n\n await fn(context, next)\n\n if (!nextCalled) {\n throw new Error(`Middleware at index ${index} must call next()`)\n }\n\n return !dropEvent && isDownstreamComplete\n }\n\n return dispatch(0)\n}\n","export async function promiseMap<T, R>(\n items: T[],\n mapper: (item: T, index: number) => Promise<R>,\n concurrency: number\n): Promise<R[]> {\n let cursor = 0\n const results = new Array<R>(items.length)\n\n const workers = Array.from({ length: Math.min(concurrency, items.length) }, async () => {\n while (cursor < items.length) {\n const index = cursor++\n results[index] = await mapper(items[index] as T, index)\n }\n })\n await Promise.all(workers)\n\n return results\n}\n","export function createTimedPromise<T>(timeoutMs: number, onTimeoutError: () => Error) {\n let timer: ReturnType<typeof setTimeout>\n const cleanups: (() => void)[] = []\n\n const { promise, resolve, reject } = Promise.withResolvers<T>()\n\n let completed = false\n let started = false\n\n function cleanup() {\n if (completed) return\n completed = true\n if (timer) clearTimeout(timer)\n for (const fn of cleanups) {\n fn()\n }\n }\n\n function safeAttempt(fn: () => void) {\n try {\n cleanup()\n fn()\n } catch (error) {\n reject(error)\n }\n }\n\n return {\n resolve: (value: T | PromiseLike<T>) => safeAttempt(() => resolve(value)),\n reject: (reason?: unknown) => safeAttempt(() => reject(reason)),\n addCleanup: (fn: () => void) => {\n cleanups.push(fn)\n },\n start: () => {\n if (started) return promise\n started = true\n\n if (completed) return promise\n\n timer = setTimeout(() => {\n safeAttempt(() => reject(onTimeoutError()))\n }, timeoutMs)\n\n return promise\n },\n }\n}\n","import { DuplicateListenerError, TimeoutError, UnsupportedOperationError } from \"../errors/errors\"\nimport type { IOutbox, IOutboxEventBus } from \"../types/interfaces\"\nimport type {\n EmitMiddleware,\n EmitMiddlewareContext,\n HandlerMiddleware,\n HandlerMiddlewareContext,\n Middleware,\n} from \"../types/middleware\"\nimport type {\n AnyListener,\n BusEvent,\n BusEventInput,\n ErrorHandler,\n EventHandler,\n FailedBusEvent,\n} from \"../types/types\"\nimport { executeMiddleware } from \"../utils/middleware-utils\"\nimport { promiseMap } from \"../utils/promise-utils\"\nimport { createTimedPromise } from \"../utils/time-utils\"\n\nconst DEFAULT_WAIT_TIMEOUT_MS = 5000\n\ntype WrappedEventHandler<T extends string = string, P = unknown> = EventHandler<T, P> & {\n _original?: EventHandler<T, P>\n}\n\nexport type OutboxBusConfig = {\n onError: ErrorHandler\n middlewareConcurrency?: number\n}\n\nexport class OutboxEventBus<TTransaction> implements IOutboxEventBus<TTransaction> {\n private readonly handlers = new Map<string, EventHandler<string, unknown>>()\n private readonly emitMiddlewares: EmitMiddleware<TTransaction>[] = []\n private readonly handlerMiddlewares: HandlerMiddleware<TTransaction>[] = []\n private readonly onError: ErrorHandler\n private readonly middlewareConcurrency: number\n\n constructor(\n private readonly outbox: IOutbox<TTransaction>,\n onErrorOrConfig: ErrorHandler | OutboxBusConfig\n ) {\n if (typeof onErrorOrConfig === \"function\") {\n this.onError = onErrorOrConfig\n this.middlewareConcurrency = 10\n } else {\n this.onError = onErrorOrConfig.onError\n this.middlewareConcurrency = Math.max(1, onErrorOrConfig.middlewareConcurrency ?? 10)\n }\n }\n\n addEmitMiddleware(...middlewares: EmitMiddleware<TTransaction>[]): this {\n this.emitMiddlewares.push(...middlewares)\n return this\n }\n\n addHandlerMiddleware(...middlewares: HandlerMiddleware<TTransaction>[]): this {\n this.handlerMiddlewares.push(...middlewares)\n return this\n }\n\n addMiddleware(...middlewares: Middleware<TTransaction>[]): this {\n this.addEmitMiddleware(...(middlewares as EmitMiddleware<TTransaction>[]))\n this.addHandlerMiddleware(...(middlewares as HandlerMiddleware<TTransaction>[]))\n return this\n }\n\n async emit<T extends string, P>(\n event: BusEventInput<T, P>,\n transaction?: TTransaction\n ): Promise<void> {\n await this.emitMany([event], transaction)\n }\n\n async emitMany<T extends string, P>(\n events: BusEventInput<T, P>[],\n transaction?: TTransaction\n ): Promise<void> {\n if (events.length === 0) return\n\n const eventsWithDefaults = this.prepareEvents(events)\n\n const middlewareSnapshot = [...this.emitMiddlewares]\n if (middlewareSnapshot.length === 0) {\n await this.outbox.publish(eventsWithDefaults, transaction)\n return\n }\n\n const results = await promiseMap(\n eventsWithDefaults,\n (event) => this.runEmitMiddleware(event, middlewareSnapshot, transaction),\n this.middlewareConcurrency\n )\n\n const eventsToPublish = results.filter((e): e is BusEvent => !!e)\n if (eventsToPublish.length > 0) {\n await this.outbox.publish(eventsToPublish, transaction)\n }\n }\n\n private prepareEvents<T extends string, P>(events: BusEventInput<T, P>[]): BusEvent[] {\n return events.map((event) => ({\n ...event,\n id: event.id ?? crypto.randomUUID(),\n occurredAt: event.occurredAt ?? new Date(),\n })) as BusEvent[]\n }\n\n private async runEmitMiddleware(\n event: BusEvent,\n middlewares: EmitMiddleware<TTransaction>[],\n transaction?: TTransaction\n ): Promise<BusEvent | null> {\n const ctx: EmitMiddlewareContext<TTransaction> = {\n event,\n phase: \"emit\",\n transaction,\n }\n\n const shouldPublish = await executeMiddleware(middlewares, ctx)\n\n return shouldPublish ? ctx.event : null\n }\n\n on<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n if (this.handlers.has(eventType)) {\n throw new DuplicateListenerError(eventType)\n }\n\n this.handlers.set(eventType, handler as EventHandler<string, unknown>)\n return this\n }\n\n addListener<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n return this.on(eventType, handler)\n }\n\n once<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n const onceHandler: WrappedEventHandler<T, P> = async (event) => {\n this.off(eventType, onceHandler)\n await handler(event)\n }\n\n onceHandler._original = handler\n return this.on(eventType, onceHandler)\n }\n\n off<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n const currentHandler = this.handlers.get(eventType) as\n | WrappedEventHandler<string, unknown>\n | undefined\n\n if (currentHandler === handler || currentHandler?._original === handler) {\n this.handlers.delete(eventType)\n }\n\n return this\n }\n\n removeListener<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n return this.off(eventType, handler)\n }\n\n removeAllListeners<T extends string>(eventType?: T): this {\n if (eventType) {\n this.handlers.delete(eventType)\n } else {\n this.handlers.clear()\n }\n return this\n }\n\n getListener(eventType: string): AnyListener | undefined {\n return this.handlers.get(eventType) as unknown as AnyListener | undefined\n }\n\n subscribe<T extends string, P = unknown>(eventTypes: T[], handler: EventHandler<T, P>): this {\n for (const type of eventTypes) {\n this.on(type, handler)\n }\n return this\n }\n\n async waitFor<T extends string, P = unknown>(\n eventType: T,\n timeoutMs = DEFAULT_WAIT_TIMEOUT_MS\n ): Promise<BusEvent<T, P>> {\n const timedPromise = createTimedPromise<BusEvent<T, P>>(\n timeoutMs,\n () => new TimeoutError(`event \"${eventType}\"`, timeoutMs, { eventType })\n )\n\n async function handler(event: BusEvent<T, P>) {\n timedPromise.resolve(event)\n }\n\n timedPromise.addCleanup(() => this.off(eventType, handler))\n this.on(eventType, handler)\n\n return timedPromise.start()\n }\n\n start(): void {\n this.outbox.start(this.processEvent, this.onError)\n }\n\n async stop(): Promise<void> {\n await this.outbox.stop()\n }\n\n getSubscriptionCount(): number {\n return this.handlers.size\n }\n\n listenerCount(eventType: string): number {\n return this.handlers.has(eventType) ? 1 : 0\n }\n\n eventNames(): string[] {\n return Array.from(this.handlers.keys())\n }\n\n async getFailedEvents(): Promise<FailedBusEvent[]> {\n if (!this.outbox.getFailedEvents) {\n throw new UnsupportedOperationError(\"getFailedEvents\")\n }\n return this.outbox.getFailedEvents()\n }\n\n async retryEvents(eventIds: string[]): Promise<void> {\n if (!this.outbox.retryEvents) {\n throw new UnsupportedOperationError(\"retryEvents\")\n }\n return this.outbox.retryEvents(eventIds)\n }\n\n private processEvent = async (event: BusEvent): Promise<void> => {\n const middlewareSnapshot = [...this.handlerMiddlewares]\n\n if (middlewareSnapshot.length === 0) {\n const handler = this.handlers.get(event.type)\n if (handler) {\n await handler(event)\n }\n return\n }\n\n const ctx: HandlerMiddlewareContext<TTransaction> = { event, phase: \"handler\" }\n const shouldProcess = await executeMiddleware(middlewareSnapshot, ctx)\n\n if (shouldProcess) {\n const handler = this.handlers.get(ctx.event.type)\n if (handler) {\n await handler(ctx.event)\n }\n }\n }\n}\n","import type { BusEvent, ErrorHandler, FailedBusEvent } from \"../types/types\"\n\nimport { HandlerError, MaxRetriesExceededError } from \"./errors\"\n\nexport function reportEventError(\n onError: ErrorHandler | undefined,\n error: unknown,\n event: BusEvent,\n retryCount: number,\n maxRetries: number\n): void {\n if (!onError) return\n\n if (retryCount > maxRetries) {\n const failedEvent: FailedBusEvent = { ...event, retryCount }\n onError(new MaxRetriesExceededError(error, failedEvent))\n } else {\n onError(new HandlerError(error, event))\n }\n}\n","export function formatErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n","import { MaintenanceError, OperationalError, OutboxError } from \"../errors/errors\"\nimport type { PollingServiceConfig } from \"../types/interfaces\"\nimport type { BusEvent, ErrorHandler } from \"../types/types\"\n\nexport class PollingService {\n private isPolling = false\n private pollTimer: NodeJS.Timeout | null = null\n private errorCount = 0\n private readonly maxErrorBackoffMs: number\n private activePollPromise: Promise<void> | null = null\n\n public onError?: ErrorHandler\n\n constructor(private readonly config: PollingServiceConfig) {\n this.maxErrorBackoffMs = config.maxErrorBackoffMs ?? 30000\n }\n\n start(handler: (event: BusEvent) => Promise<void>, onError: ErrorHandler): void {\n this.onError = onError\n if (this.isPolling) return\n this.isPolling = true\n void this.poll(handler)\n }\n\n async stop(): Promise<void> {\n this.isPolling = false\n if (this.pollTimer) {\n clearTimeout(this.pollTimer)\n this.pollTimer = null\n }\n if (this.activePollPromise) {\n await this.activePollPromise\n }\n }\n\n calculateBackoff(retryCount: number): number {\n const { baseBackoffMs } = this.config\n const backoff = baseBackoffMs * 2 ** (retryCount - 1)\n const jitter = (Math.random() * 0.2 - 0.1) * backoff // ±10% jitter\n return Math.floor(backoff + jitter)\n }\n\n private async poll(handler: (event: BusEvent) => Promise<void>) {\n if (!this.isPolling) return\n\n this.activePollPromise = this.executePoll(handler)\n\n try {\n await this.activePollPromise\n this.errorCount = 0\n } catch (error) {\n this.handlePollError(error)\n } finally {\n this.activePollPromise = null\n this.scheduleNextPoll(handler)\n }\n }\n\n private handlePollError(error: unknown): void {\n const errorToReport =\n error instanceof OutboxError\n ? (error as OutboxError)\n : new OperationalError(\"Polling cycle failed\", { cause: error })\n\n this.onError?.(errorToReport)\n this.errorCount++\n }\n\n private scheduleNextPoll(handler: (event: BusEvent) => Promise<void>): void {\n if (!this.isPolling) return\n\n const delay =\n this.errorCount > 0\n ? Math.min(this.calculateBackoff(this.errorCount + 1), this.maxErrorBackoffMs)\n : this.config.pollIntervalMs\n\n this.pollTimer = setTimeout(() => {\n void this.poll(handler)\n }, delay)\n }\n\n private async executePoll(handler: (event: BusEvent) => Promise<void>): Promise<void> {\n if (this.config.performMaintenance) {\n try {\n await this.config.performMaintenance()\n } catch (maintenanceError) {\n throw new MaintenanceError(maintenanceError)\n }\n }\n await this.config.processBatch(handler)\n }\n}\n","import { reportEventError } from \"../../errors/error-reporting\"\nimport { MaxRetriesExceededError } from \"../../errors/errors\"\nimport { PollingService } from \"../../services/polling-service\"\nimport type { IOutbox } from \"../../types/interfaces\"\nimport type { BusEvent, ErrorHandler, FailedBusEvent } from \"../../types/types\"\n\nconst IN_MEMORY_POLL_INTERVAL_MS = 10\nconst IN_MEMORY_BASE_BACKOFF_MS = 10\nconst IN_MEMORY_MAX_ERROR_BACKOFF_MS = 50\nconst IN_MEMORY_DEFAULT_MAX_RETRIES = 3\n\nexport type InMemoryOutboxConfig = {\n maxRetries?: number\n}\n\nexport class InMemoryOutbox implements IOutbox<unknown> {\n private events: BusEvent[] = []\n private deadLetterQueue: BusEvent[] = []\n private readonly poller: PollingService\n private handler: ((event: BusEvent) => Promise<void>) | null = null\n public onError?: ErrorHandler\n private readonly maxRetries?: number\n private retryCounts = new Map<string, number>()\n\n constructor(config: InMemoryOutboxConfig = {}) {\n this.maxRetries = config.maxRetries ?? IN_MEMORY_DEFAULT_MAX_RETRIES\n this.poller = new PollingService({\n pollIntervalMs: IN_MEMORY_POLL_INTERVAL_MS,\n baseBackoffMs: IN_MEMORY_BASE_BACKOFF_MS,\n maxErrorBackoffMs: IN_MEMORY_MAX_ERROR_BACKOFF_MS,\n processBatch: (handler) => this.processBatch(handler),\n })\n }\n\n async publish(events: BusEvent[]): Promise<void> {\n this.events.push(...events)\n }\n\n start(handler: (event: BusEvent) => Promise<void>, onError: ErrorHandler): void {\n this.handler = handler\n this.onError = onError\n this.poller.start(handler, onError)\n }\n\n async stop(): Promise<void> {\n await this.poller.stop()\n // Drain remaining events\n while (this.events.length > 0 && this.handler) {\n await this.processBatch(this.handler)\n }\n this.handler = null\n }\n\n async getFailedEvents(): Promise<FailedBusEvent[]> {\n return this.deadLetterQueue.map((event) => ({\n ...event,\n retryCount: this.retryCounts.get(event.id) ?? this.maxRetries ?? 0,\n error: \"Max retries exceeded\", // capture actual error if possible\n }))\n }\n\n async retryEvents(eventIds: string[]): Promise<void> {\n const eventsToRetry = this.deadLetterQueue.filter((event) => eventIds.includes(event.id))\n this.deadLetterQueue = this.deadLetterQueue.filter((event) => !eventIds.includes(event.id))\n\n for (const event of eventsToRetry) {\n this.retryCounts.set(event.id, 0)\n this.events.push(event)\n }\n }\n\n private async processBatch(handler: (event: BusEvent) => Promise<void>) {\n if (this.events.length === 0) return\n\n const batch = this.events\n this.events = []\n\n const failedEvents: BusEvent[] = []\n\n for (const event of batch) {\n try {\n await handler(event)\n if (event.id) {\n this.retryCounts.delete(event.id)\n }\n } catch (error) {\n const currentRetries = event.id ? (this.retryCounts.get(event.id) ?? 0) : 0\n const nextRetryCount = currentRetries + 1\n\n if (this.shouldRetry(event)) {\n failedEvents.push(event)\n if (this.maxRetries !== undefined) {\n reportEventError(this.onError, error, event, nextRetryCount, this.maxRetries)\n }\n } else {\n this.moveToDLQ(event, error)\n }\n }\n }\n\n if (failedEvents.length > 0) {\n this.events.unshift(...failedEvents)\n }\n }\n\n private shouldRetry(event: BusEvent): boolean {\n if (this.maxRetries === undefined || !event.id) return true\n\n const currentRetries = this.retryCounts.get(event.id) ?? 0\n if (currentRetries < this.maxRetries) {\n this.retryCounts.set(event.id, currentRetries + 1)\n return true\n }\n\n return false\n }\n\n private moveToDLQ(event: BusEvent, error: unknown): void {\n const retryCount = (event.id ? this.retryCounts.get(event.id) : 0) ?? 0\n if (event.id) {\n this.retryCounts.delete(event.id)\n }\n\n const failedEvent: FailedBusEvent = { ...event, retryCount: retryCount + 1 }\n this.onError?.(new MaxRetriesExceededError(error, failedEvent))\n this.deadLetterQueue.push(event)\n }\n}\n","export interface BatcherConfig<T> {\n batchSize: number\n batchTimeoutMs: number\n processBatch: (items: T[]) => Promise<void>\n}\n\ninterface QueuedItem<T> {\n item: T\n resolve: () => void\n reject: (error: unknown) => void\n}\n\nexport class Batcher<T> {\n private queue: QueuedItem<T>[] = []\n private timer: NodeJS.Timeout | null = null\n private readonly config: BatcherConfig<T>\n\n constructor(config: BatcherConfig<T>) {\n this.config = config\n }\n\n async add(item: T): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n this.queue.push({ item, resolve, reject })\n this.scheduleFlushIfNeeded()\n })\n }\n\n private scheduleFlushIfNeeded(): void {\n if (this.queue.length >= this.config.batchSize) {\n void this.flush()\n return\n }\n\n this.timer ??= setTimeout(() => {\n void this.flush()\n }, this.config.batchTimeoutMs)\n }\n\n private async flush(): Promise<void> {\n this.clearTimer()\n\n if (this.queue.length === 0) return\n\n const currentBatch = this.queue\n this.queue = []\n\n const items = currentBatch.map((qi) => qi.item)\n\n try {\n await this.config.processBatch(items)\n for (const qi of currentBatch) qi.resolve()\n } catch (error) {\n for (const qi of currentBatch) qi.reject(error)\n }\n }\n\n private clearTimer(): void {\n if (this.timer) {\n clearTimeout(this.timer)\n this.timer = null\n }\n }\n}\n","import type { RetryOptions } from \"../types/types\"\n\nexport async function withRetry<T>(\n operation: () => Promise<T>,\n options: Required<RetryOptions>\n): Promise<T> {\n let lastError: unknown\n let delay = options.initialDelayMs\n\n for (let attempt = 1; attempt <= options.maxAttempts; attempt++) {\n try {\n return await operation()\n } catch (error) {\n lastError = error\n if (attempt < options.maxAttempts) {\n await new Promise((resolve) => setTimeout(resolve, delay))\n delay = Math.min(delay * 2, options.maxDelayMs)\n }\n }\n }\n\n throw lastError\n}\n","import type { IOutboxEventBus } from \"../types/interfaces\"\nimport type { BusEvent, ProcessingOptions, PublisherConfig, RetryOptions } from \"../types/types\"\nimport { Batcher } from \"../utils/batcher\"\nimport { promiseMap } from \"../utils/promise-utils\"\nimport { withRetry } from \"../utils/retry\"\n\nexport class EventPublisher<TTransaction> {\n static readonly DEFAULT_BUFFER_SIZE = 50\n static readonly DEFAULT_BUFFER_TIMEOUT_MS = 100\n static readonly DEFAULT_CONCURRENCY = 5\n static readonly DEFAULT_RETRY_ATTEMPTS = 3\n static readonly DEFAULT_RETRY_DELAY_MS = 1000\n static readonly DEFAULT_RETRY_MAX_DELAY_MS = 10000\n\n private readonly retryOptions: Required<RetryOptions>\n\n constructor(\n private readonly bus: IOutboxEventBus<TTransaction>,\n private readonly config?: PublisherConfig\n ) {\n const { retryConfig } = config ?? {}\n this.retryOptions = {\n maxAttempts: retryConfig?.maxAttempts ?? EventPublisher.DEFAULT_RETRY_ATTEMPTS,\n initialDelayMs: retryConfig?.initialDelayMs ?? EventPublisher.DEFAULT_RETRY_DELAY_MS,\n maxDelayMs: retryConfig?.maxDelayMs ?? EventPublisher.DEFAULT_RETRY_MAX_DELAY_MS,\n }\n }\n\n static withOverrides(\n config: PublisherConfig,\n processingOverrides: Partial<ProcessingOptions>\n ): PublisherConfig {\n return {\n ...config,\n processingConfig: {\n ...config.processingConfig,\n ...processingOverrides,\n },\n }\n }\n\n subscribe(eventTypes: string[], handler: (events: BusEvent[]) => Promise<void>): void {\n const processingConfig = this.config?.processingConfig\n const batcher = new Batcher<BusEvent>({\n batchSize: processingConfig?.bufferSize ?? EventPublisher.DEFAULT_BUFFER_SIZE,\n batchTimeoutMs: processingConfig?.bufferTimeoutMs ?? EventPublisher.DEFAULT_BUFFER_TIMEOUT_MS,\n processBatch: (events) => this.handleBatch(events, handler),\n })\n\n this.bus.subscribe(eventTypes, (event) => batcher.add(event))\n }\n\n private async handleBatch(\n events: BusEvent[],\n handler: (events: BusEvent[]) => Promise<void>\n ): Promise<void> {\n const { maxBatchSize, concurrency = EventPublisher.DEFAULT_CONCURRENCY } =\n this.config?.processingConfig ?? {}\n\n if (!maxBatchSize || events.length <= maxBatchSize) {\n return withRetry(() => handler(events), this.retryOptions)\n }\n\n const chunks: BusEvent[][] = []\n for (let offset = 0; offset < events.length; offset += maxBatchSize) {\n chunks.push(events.slice(offset, offset + maxBatchSize))\n }\n\n await promiseMap(\n chunks,\n (chunk) => withRetry(() => handler(chunk), this.retryOptions),\n concurrency\n )\n }\n}\n","import type { OutboxError } from \"../errors/errors\"\n\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport type BusEvent<T extends string = string, P = unknown> = {\n id: string\n type: T\n payload: P\n occurredAt: Date\n metadata?: Record<string, unknown>\n}\n\nexport type FailedBusEvent<T extends string = string, P = unknown> = BusEvent<T, P> & {\n error?: string\n retryCount: number\n lastAttemptAt?: Date\n}\n\nexport type BusEventInput<T extends string = string, P = unknown> = PartialBy<\n BusEvent<T, P>,\n \"id\" | \"occurredAt\"\n>\n\nexport type EventHandler<T extends string = string, P = unknown> = (\n event: BusEvent<T, P>\n) => Promise<void>\n\nexport type AnyListener = (...args: unknown[]) => unknown\n\nexport type ErrorHandler = (error: OutboxError) => void\n\nexport type RetryOptions = {\n maxAttempts?: number\n initialDelayMs?: number\n maxDelayMs?: number\n}\n\nexport type ProcessingOptions = {\n bufferSize?: number\n bufferTimeoutMs?: number\n concurrency?: number\n maxBatchSize?: number\n}\n\nexport type PublisherConfig = {\n retryConfig?: RetryOptions\n processingConfig?: ProcessingOptions\n}\n\nexport const EventStatus = {\n CREATED: \"created\",\n ACTIVE: \"active\",\n FAILED: \"failed\",\n COMPLETED: \"completed\",\n} as const\n\nexport type EventStatus = (typeof EventStatus)[keyof typeof EventStatus]\n"],"mappings":"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"}
|
package/dist/index.d.cts
CHANGED
|
@@ -203,9 +203,9 @@ declare function reportEventError(onError: ErrorHandler | undefined, error: unkn
|
|
|
203
203
|
declare function formatErrorMessage(error: unknown): string;
|
|
204
204
|
//#endregion
|
|
205
205
|
//#region src/outboxes/in-memory/in-memory-outbox.d.ts
|
|
206
|
-
|
|
206
|
+
type InMemoryOutboxConfig = {
|
|
207
207
|
maxRetries?: number;
|
|
208
|
-
}
|
|
208
|
+
};
|
|
209
209
|
declare class InMemoryOutbox implements IOutbox<unknown> {
|
|
210
210
|
private events;
|
|
211
211
|
private deadLetterQueue;
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/errors/errors.ts","../src/types/types.ts","../src/types/middleware.ts","../src/types/interfaces.ts","../src/bus/outbox-event-bus.ts","../src/errors/error-reporting.ts","../src/errors/error-utils.ts","../src/outboxes/in-memory/in-memory-outbox.ts","../src/services/event-publisher.ts","../src/services/polling-service.ts","../src/utils/time-utils.ts"],"sourcesContent":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/errors/errors.ts","../src/types/types.ts","../src/types/middleware.ts","../src/types/interfaces.ts","../src/bus/outbox-event-bus.ts","../src/errors/error-reporting.ts","../src/errors/error-utils.ts","../src/outboxes/in-memory/in-memory-outbox.ts","../src/services/event-publisher.ts","../src/services/polling-service.ts","../src/utils/time-utils.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -203,9 +203,9 @@ declare function reportEventError(onError: ErrorHandler | undefined, error: unkn
|
|
|
203
203
|
declare function formatErrorMessage(error: unknown): string;
|
|
204
204
|
//#endregion
|
|
205
205
|
//#region src/outboxes/in-memory/in-memory-outbox.d.ts
|
|
206
|
-
|
|
206
|
+
type InMemoryOutboxConfig = {
|
|
207
207
|
maxRetries?: number;
|
|
208
|
-
}
|
|
208
|
+
};
|
|
209
209
|
declare class InMemoryOutbox implements IOutbox<unknown> {
|
|
210
210
|
private events;
|
|
211
211
|
private deadLetterQueue;
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/errors/errors.ts","../src/types/types.ts","../src/types/middleware.ts","../src/types/interfaces.ts","../src/bus/outbox-event-bus.ts","../src/errors/error-reporting.ts","../src/errors/error-utils.ts","../src/outboxes/in-memory/in-memory-outbox.ts","../src/services/event-publisher.ts","../src/services/polling-service.ts","../src/utils/time-utils.ts"],"sourcesContent":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/errors/errors.ts","../src/types/types.ts","../src/types/middleware.ts","../src/types/interfaces.ts","../src/bus/outbox-event-bus.ts","../src/errors/error-reporting.ts","../src/errors/error-utils.ts","../src/outboxes/in-memory/in-memory-outbox.ts","../src/services/event-publisher.ts","../src/services/polling-service.ts","../src/utils/time-utils.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -140,10 +140,9 @@ async function executeMiddleware(middlewares, context) {
|
|
|
140
140
|
async function promiseMap(items, mapper, concurrency) {
|
|
141
141
|
let cursor = 0;
|
|
142
142
|
const results = new Array(items.length);
|
|
143
|
-
const workers = Array.from({ length: concurrency }, async () => {
|
|
143
|
+
const workers = Array.from({ length: Math.min(concurrency, items.length) }, async () => {
|
|
144
144
|
while (cursor < items.length) {
|
|
145
145
|
const index = cursor++;
|
|
146
|
-
if (index >= items.length) break;
|
|
147
146
|
results[index] = await mapper(items[index], index);
|
|
148
147
|
}
|
|
149
148
|
});
|
|
@@ -219,8 +218,8 @@ var OutboxEventBus = class {
|
|
|
219
218
|
return this;
|
|
220
219
|
}
|
|
221
220
|
addMiddleware(...middlewares) {
|
|
222
|
-
this.
|
|
223
|
-
this.
|
|
221
|
+
this.addEmitMiddleware(...middlewares);
|
|
222
|
+
this.addHandlerMiddleware(...middlewares);
|
|
224
223
|
return this;
|
|
225
224
|
}
|
|
226
225
|
async emit(event, transaction) {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["event: FailedBusEvent","event: BusEvent","timer: ReturnType<typeof setTimeout>","cleanups: (() => void)[]","outbox: IOutbox<TTransaction>","ctx: EmitMiddlewareContext<TTransaction>","onceHandler: WrappedEventHandler<T, P>","ctx: HandlerMiddlewareContext<TTransaction>","config: PollingServiceConfig","failedEvents: BusEvent[]","failedEvent: FailedBusEvent","lastError: unknown","bus: IOutboxEventBus<TTransaction>","config?: PublisherConfig","chunks: BusEvent[][]"],"sources":["../src/errors/errors.ts","../src/utils/middleware-utils.ts","../src/utils/promise-utils.ts","../src/utils/time-utils.ts","../src/bus/outbox-event-bus.ts","../src/errors/error-reporting.ts","../src/errors/error-utils.ts","../src/services/polling-service.ts","../src/outboxes/in-memory/in-memory-outbox.ts","../src/utils/batcher.ts","../src/utils/retry.ts","../src/services/event-publisher.ts","../src/types/types.ts"],"sourcesContent":["import type { BusEvent, FailedBusEvent } from \"../types/types\"\n\nexport interface OutboxErrorContext {\n event?: BusEvent | FailedBusEvent\n cause?: unknown\n [key: string]: unknown\n}\n\nexport abstract class OutboxError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends Error {\n public context?: TContext | undefined\n\n constructor(message: string, name: string, context?: TContext) {\n super(message, { cause: context?.cause })\n this.name = name\n this.context = context\n\n if (\"captureStackTrace\" in Error) {\n Error.captureStackTrace(this, OutboxError)\n }\n\n // Restore prototype chain for proper instanceof checks\n Object.setPrototypeOf(this, new.target.prototype)\n }\n}\n\n// === Configuration Errors ===\n\nexport class ConfigurationError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(message: string, context?: TContext) {\n super(message, \"ConfigurationError\", context)\n }\n}\n\nexport class DuplicateListenerError extends ConfigurationError {\n constructor(eventType: string) {\n super(\n `Event type \"${eventType}\" already has a listener. You can only register one handler per event type.`,\n { eventType }\n )\n this.name = \"DuplicateListenerError\"\n }\n}\n\nexport class UnsupportedOperationError extends ConfigurationError {\n constructor(operation: string, adapterName = \"adapter\") {\n super(`Underlying outbox ${adapterName} does not support management operation: ${operation}`, {\n operation,\n adapterName,\n })\n this.name = \"UnsupportedOperationError\"\n }\n}\n\n// === Validation Errors ===\n\nexport class ValidationError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(message: string, context?: TContext) {\n super(message, \"ValidationError\", context)\n }\n}\n\nexport class BatchSizeLimitError extends ValidationError {\n constructor(limit: number, actual: number) {\n super(`Cannot publish ${actual} events because the batch size limit is ${limit}.`, {\n limit,\n actual,\n })\n this.name = \"BatchSizeLimitError\"\n }\n}\n\n// === Operational Errors ===\n\nexport class OperationalError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(message: string, context?: TContext) {\n super(message, \"OperationalError\", context)\n }\n}\n\nexport class TimeoutError extends OperationalError {\n constructor(operation: string, timeoutMs: number, context?: OutboxErrorContext) {\n super(`Timed out waiting for ${operation} after ${timeoutMs}ms`, {\n operation,\n timeoutMs,\n ...context,\n })\n this.name = \"TimeoutError\"\n }\n}\n\nexport class BackpressureError extends OperationalError {\n constructor(resource: string, context?: OutboxErrorContext) {\n super(`Failed to publish to ${resource}: buffer full (backpressure)`, { resource, ...context })\n this.name = \"BackpressureError\"\n }\n}\n\nexport class MaintenanceError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OperationalError<TContext> {\n constructor(cause: unknown, context?: TContext) {\n const message = cause instanceof Error ? cause.message : String(cause)\n const fullContext = { cause, ...context } as TContext\n super(`Maintenance operation failed: ${message}`, fullContext)\n this.name = \"MaintenanceError\"\n }\n}\n\n// Existing Error - Integrating into hierarchy\nexport class MaxRetriesExceededError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OperationalError<TContext> {\n public get retryCount(): number {\n return this.event.retryCount\n }\n\n constructor(\n cause: unknown,\n public readonly event: FailedBusEvent,\n context?: TContext\n ) {\n const fullContext = {\n cause,\n event,\n ...context,\n } as unknown as TContext\n\n super(`Max retries exceeded (${event.retryCount}). Event moved to DLQ.`, fullContext)\n this.name = \"MaxRetriesExceededError\"\n }\n}\n\nexport class HandlerError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(\n cause: unknown,\n public readonly event: BusEvent,\n context?: TContext\n ) {\n const message = cause instanceof Error ? cause.message : String(cause)\n const fullContext = { cause, event, ...context } as unknown as TContext\n super(`Event handler failed: ${message}`, \"HandlerError\", fullContext)\n }\n}\n","import type { Next } from \"../types/middleware\"\n\nexport async function executeMiddleware<TContext>(\n middlewares: ((ctx: TContext, next: Next) => Promise<void>)[],\n context: TContext\n): Promise<boolean> {\n let currentIndex = -1\n\n async function dispatch(index: number): Promise<boolean> {\n if (index <= currentIndex) {\n throw new Error(\"next() called multiple times\")\n }\n currentIndex = index\n if (index === middlewares.length) {\n return true\n }\n\n const fn = middlewares[index]\n if (!fn) {\n return dispatch(index + 1)\n }\n\n let nextCalled = false\n let dropEvent = false\n let isDownstreamComplete = false\n\n async function next(options?: { dropEvent?: boolean }): Promise<void> {\n if (dropEvent) return\n\n nextCalled = true\n\n if (options?.dropEvent) {\n dropEvent = true\n return\n }\n\n isDownstreamComplete = await dispatch(index + 1)\n }\n\n await fn(context, next)\n\n if (!nextCalled) {\n throw new Error(`Middleware at index ${index} must call next()`)\n }\n\n return !dropEvent && isDownstreamComplete\n }\n\n return dispatch(0)\n}\n","export async function promiseMap<T, R>(\n items: T[],\n mapper: (item: T, index: number) => Promise<R>,\n concurrency: number\n): Promise<R[]> {\n let cursor = 0\n const results = new Array<R>(items.length)\n\n const workers = Array.from({ length: concurrency }, async () => {\n while (cursor < items.length) {\n const index = cursor++\n if (index >= items.length) break\n results[index] = await mapper(items[index] as T, index)\n }\n })\n await Promise.all(workers)\n\n return results\n}\n","export function createTimedPromise<T>(timeoutMs: number, onTimeoutError: () => Error) {\n let timer: ReturnType<typeof setTimeout>\n const cleanups: (() => void)[] = []\n\n const { promise, resolve, reject } = Promise.withResolvers<T>()\n\n let completed = false\n let started = false\n\n function cleanup() {\n if (completed) return\n completed = true\n if (timer) clearTimeout(timer)\n for (const fn of cleanups) {\n fn()\n }\n }\n\n function safeAttempt(fn: () => void) {\n try {\n cleanup()\n fn()\n } catch (error) {\n reject(error)\n }\n }\n\n return {\n resolve: (value: T | PromiseLike<T>) => safeAttempt(() => resolve(value)),\n reject: (reason?: unknown) => safeAttempt(() => reject(reason)),\n addCleanup: (fn: () => void) => {\n cleanups.push(fn)\n },\n start: () => {\n if (started) return promise\n started = true\n\n if (completed) return promise\n\n timer = setTimeout(() => {\n safeAttempt(() => reject(onTimeoutError()))\n }, timeoutMs)\n\n return promise\n },\n }\n}\n","import { DuplicateListenerError, TimeoutError, UnsupportedOperationError } from \"../errors/errors\"\nimport type { IOutbox, IOutboxEventBus } from \"../types/interfaces\"\nimport type {\n EmitMiddleware,\n EmitMiddlewareContext,\n HandlerMiddleware,\n HandlerMiddlewareContext,\n Middleware,\n} from \"../types/middleware\"\nimport type {\n AnyListener,\n BusEvent,\n BusEventInput,\n ErrorHandler,\n EventHandler,\n FailedBusEvent,\n} from \"../types/types\"\nimport { executeMiddleware } from \"../utils/middleware-utils\"\nimport { promiseMap } from \"../utils/promise-utils\"\nimport { createTimedPromise } from \"../utils/time-utils\"\n\nconst DEFAULT_WAIT_TIMEOUT_MS = 5000\n\ntype WrappedEventHandler<T extends string = string, P = unknown> = EventHandler<T, P> & {\n _original?: EventHandler<T, P>\n}\n\nexport type OutboxBusConfig = {\n onError: ErrorHandler\n middlewareConcurrency?: number\n}\n\nexport class OutboxEventBus<TTransaction> implements IOutboxEventBus<TTransaction> {\n private readonly handlers = new Map<string, EventHandler<string, unknown>>()\n private readonly emitMiddlewares: EmitMiddleware<TTransaction>[] = []\n private readonly handlerMiddlewares: HandlerMiddleware<TTransaction>[] = []\n private readonly onError: ErrorHandler\n private readonly middlewareConcurrency: number\n\n constructor(\n private readonly outbox: IOutbox<TTransaction>,\n onErrorOrConfig: ErrorHandler | OutboxBusConfig\n ) {\n if (typeof onErrorOrConfig === \"function\") {\n this.onError = onErrorOrConfig\n this.middlewareConcurrency = 10\n } else {\n this.onError = onErrorOrConfig.onError\n this.middlewareConcurrency = Math.max(1, onErrorOrConfig.middlewareConcurrency ?? 10)\n }\n }\n\n addEmitMiddleware(...middlewares: EmitMiddleware<TTransaction>[]): this {\n this.emitMiddlewares.push(...middlewares)\n return this\n }\n\n addHandlerMiddleware(...middlewares: HandlerMiddleware<TTransaction>[]): this {\n this.handlerMiddlewares.push(...middlewares)\n return this\n }\n\n addMiddleware(...middlewares: Middleware<TTransaction>[]): this {\n this.emitMiddlewares.push(...(middlewares as EmitMiddleware<TTransaction>[]))\n this.handlerMiddlewares.push(...(middlewares as HandlerMiddleware<TTransaction>[]))\n return this\n }\n\n\n\n async emit<T extends string, P>(\n event: BusEventInput<T, P>,\n transaction?: TTransaction\n ): Promise<void> {\n await this.emitMany([event], transaction)\n }\n\n async emitMany<T extends string, P>(\n events: BusEventInput<T, P>[],\n transaction?: TTransaction\n ): Promise<void> {\n if (events.length === 0) return\n\n const eventsWithDefaults = this.prepareEvents(events)\n\n const middlewareSnapshot = [...this.emitMiddlewares]\n if (middlewareSnapshot.length === 0) {\n await this.outbox.publish(eventsWithDefaults, transaction)\n return\n }\n\n const results = await promiseMap(\n eventsWithDefaults,\n (event) => this.runEmitMiddleware(event, middlewareSnapshot, transaction),\n this.middlewareConcurrency\n )\n\n const eventsToPublish = results.filter((e): e is BusEvent => !!e)\n if (eventsToPublish.length > 0) {\n await this.outbox.publish(eventsToPublish, transaction)\n }\n }\n\n private prepareEvents<T extends string, P>(events: BusEventInput<T, P>[]): BusEvent[] {\n return events.map((event) => ({\n ...event,\n id: event.id ?? crypto.randomUUID(),\n occurredAt: event.occurredAt ?? new Date(),\n })) as BusEvent[]\n }\n\n private async runEmitMiddleware(\n event: BusEvent,\n middlewares: EmitMiddleware<TTransaction>[],\n transaction?: TTransaction\n ): Promise<BusEvent | null> {\n const ctx: EmitMiddlewareContext<TTransaction> = {\n event,\n phase: \"emit\",\n transaction,\n }\n\n const shouldPublish = await executeMiddleware(middlewares, ctx)\n\n return shouldPublish ? ctx.event : null\n }\n\n on<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n if (this.handlers.has(eventType)) {\n throw new DuplicateListenerError(eventType)\n }\n\n this.handlers.set(eventType, handler as EventHandler<string, unknown>)\n return this\n }\n\n addListener<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n return this.on(eventType, handler)\n }\n\n once<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n const onceHandler: WrappedEventHandler<T, P> = async (event) => {\n this.off(eventType, onceHandler)\n await handler(event)\n }\n\n onceHandler._original = handler\n return this.on(eventType, onceHandler)\n }\n\n off<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n const currentHandler = this.handlers.get(eventType) as\n | WrappedEventHandler<string, unknown>\n | undefined\n\n if (currentHandler === handler || currentHandler?._original === handler) {\n this.handlers.delete(eventType)\n }\n\n return this\n }\n\n removeListener<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n return this.off(eventType, handler)\n }\n\n removeAllListeners<T extends string>(eventType?: T): this {\n if (eventType) {\n this.handlers.delete(eventType)\n } else {\n this.handlers.clear()\n }\n return this\n }\n\n getListener(eventType: string): AnyListener | undefined {\n return this.handlers.get(eventType) as unknown as AnyListener | undefined\n }\n\n subscribe<T extends string, P = unknown>(eventTypes: T[], handler: EventHandler<T, P>): this {\n for (const type of eventTypes) {\n this.on(type, handler)\n }\n return this\n }\n\n async waitFor<T extends string, P = unknown>(\n eventType: T,\n timeoutMs = DEFAULT_WAIT_TIMEOUT_MS\n ): Promise<BusEvent<T, P>> {\n const timedPromise = createTimedPromise<BusEvent<T, P>>(\n timeoutMs,\n () => new TimeoutError(`event \"${eventType}\"`, timeoutMs, { eventType })\n )\n\n async function handler(event: BusEvent<T, P>) {\n timedPromise.resolve(event)\n }\n\n timedPromise.addCleanup(() => this.off(eventType, handler))\n this.on(eventType, handler)\n\n return timedPromise.start()\n }\n\n start(): void {\n this.outbox.start(this.processEvent, this.onError)\n }\n\n async stop(): Promise<void> {\n await this.outbox.stop()\n }\n\n getSubscriptionCount(): number {\n return this.handlers.size\n }\n\n listenerCount(eventType: string): number {\n return this.handlers.has(eventType) ? 1 : 0\n }\n\n eventNames(): string[] {\n return Array.from(this.handlers.keys())\n }\n\n async getFailedEvents(): Promise<FailedBusEvent[]> {\n if (!this.outbox.getFailedEvents) {\n throw new UnsupportedOperationError(\"getFailedEvents\")\n }\n return this.outbox.getFailedEvents()\n }\n\n async retryEvents(eventIds: string[]): Promise<void> {\n if (!this.outbox.retryEvents) {\n throw new UnsupportedOperationError(\"retryEvents\")\n }\n return this.outbox.retryEvents(eventIds)\n }\n\n private processEvent = async (event: BusEvent): Promise<void> => {\n const middlewareSnapshot = [...this.handlerMiddlewares]\n\n if (middlewareSnapshot.length === 0) {\n const handler = this.handlers.get(event.type)\n if (handler) {\n await handler(event)\n }\n return\n }\n\n const ctx: HandlerMiddlewareContext<TTransaction> = { event, phase: \"handler\" }\n const shouldProcess = await executeMiddleware(middlewareSnapshot, ctx)\n\n if (shouldProcess) {\n const handler = this.handlers.get(ctx.event.type)\n if (handler) {\n await handler(ctx.event)\n }\n }\n }\n}\n","import type { BusEvent, ErrorHandler, FailedBusEvent } from \"../types/types\"\n\nimport { HandlerError, MaxRetriesExceededError } from \"./errors\"\n\nexport function reportEventError(\n onError: ErrorHandler | undefined,\n error: unknown,\n event: BusEvent,\n retryCount: number,\n maxRetries: number\n): void {\n if (!onError) return\n\n if (retryCount > maxRetries) {\n const failedEvent: FailedBusEvent = { ...event, retryCount }\n onError(new MaxRetriesExceededError(error, failedEvent))\n } else {\n onError(new HandlerError(error, event))\n }\n}\n","export function formatErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n","import { MaintenanceError, OperationalError, OutboxError } from \"../errors/errors\"\nimport type { PollingServiceConfig } from \"../types/interfaces\"\nimport type { BusEvent, ErrorHandler } from \"../types/types\"\n\nexport class PollingService {\n private isPolling = false\n private pollTimer: NodeJS.Timeout | null = null\n private errorCount = 0\n private readonly maxErrorBackoffMs: number\n private activePollPromise: Promise<void> | null = null\n\n public onError?: ErrorHandler\n\n constructor(private readonly config: PollingServiceConfig) {\n this.maxErrorBackoffMs = config.maxErrorBackoffMs ?? 30000\n }\n\n start(handler: (event: BusEvent) => Promise<void>, onError: ErrorHandler): void {\n this.onError = onError\n if (this.isPolling) return\n this.isPolling = true\n void this.poll(handler)\n }\n\n async stop(): Promise<void> {\n this.isPolling = false\n if (this.pollTimer) {\n clearTimeout(this.pollTimer)\n this.pollTimer = null\n }\n if (this.activePollPromise) {\n await this.activePollPromise\n }\n }\n\n calculateBackoff(retryCount: number): number {\n const { baseBackoffMs } = this.config\n const backoff = baseBackoffMs * 2 ** (retryCount - 1)\n const jitter = (Math.random() * 0.2 - 0.1) * backoff // ±10% jitter\n return Math.floor(backoff + jitter)\n }\n\n private async poll(handler: (event: BusEvent) => Promise<void>) {\n if (!this.isPolling) return\n\n this.activePollPromise = this.executePoll(handler)\n\n try {\n await this.activePollPromise\n this.errorCount = 0\n } catch (error) {\n this.handlePollError(error)\n } finally {\n this.activePollPromise = null\n this.scheduleNextPoll(handler)\n }\n }\n\n private handlePollError(error: unknown): void {\n const errorToReport =\n error instanceof OutboxError\n ? (error as OutboxError)\n : new OperationalError(\"Polling cycle failed\", { cause: error })\n\n this.onError?.(errorToReport)\n this.errorCount++\n }\n\n private scheduleNextPoll(handler: (event: BusEvent) => Promise<void>): void {\n if (!this.isPolling) return\n\n const delay =\n this.errorCount > 0\n ? Math.min(this.calculateBackoff(this.errorCount + 1), this.maxErrorBackoffMs)\n : this.config.pollIntervalMs\n\n this.pollTimer = setTimeout(() => {\n void this.poll(handler)\n }, delay)\n }\n\n private async executePoll(handler: (event: BusEvent) => Promise<void>): Promise<void> {\n if (this.config.performMaintenance) {\n try {\n await this.config.performMaintenance()\n } catch (maintenanceError) {\n throw new MaintenanceError(maintenanceError)\n }\n }\n await this.config.processBatch(handler)\n }\n}\n","import { reportEventError } from \"../../errors/error-reporting\"\nimport { MaxRetriesExceededError } from \"../../errors/errors\"\nimport { PollingService } from \"../../services/polling-service\"\nimport type { IOutbox } from \"../../types/interfaces\"\nimport type { BusEvent, ErrorHandler, FailedBusEvent } from \"../../types/types\"\n\nconst IN_MEMORY_POLL_INTERVAL_MS = 10\nconst IN_MEMORY_BASE_BACKOFF_MS = 10\nconst IN_MEMORY_MAX_ERROR_BACKOFF_MS = 50\nconst IN_MEMORY_DEFAULT_MAX_RETRIES = 3\n\nexport interface InMemoryOutboxConfig {\n maxRetries?: number\n}\n\nexport class InMemoryOutbox implements IOutbox<unknown> {\n private events: BusEvent[] = []\n private deadLetterQueue: BusEvent[] = []\n private readonly poller: PollingService\n private handler: ((event: BusEvent) => Promise<void>) | null = null\n public onError?: ErrorHandler\n private readonly maxRetries?: number\n private retryCounts = new Map<string, number>()\n\n constructor(config: InMemoryOutboxConfig = {}) {\n this.maxRetries = config.maxRetries ?? IN_MEMORY_DEFAULT_MAX_RETRIES\n this.poller = new PollingService({\n pollIntervalMs: IN_MEMORY_POLL_INTERVAL_MS,\n baseBackoffMs: IN_MEMORY_BASE_BACKOFF_MS,\n maxErrorBackoffMs: IN_MEMORY_MAX_ERROR_BACKOFF_MS,\n processBatch: (handler) => this.processBatch(handler),\n })\n }\n\n async publish(events: BusEvent[]): Promise<void> {\n this.events.push(...events)\n }\n\n start(handler: (event: BusEvent) => Promise<void>, onError: ErrorHandler): void {\n this.handler = handler\n this.onError = onError\n this.poller.start(handler, onError)\n }\n\n async stop(): Promise<void> {\n await this.poller.stop()\n // Drain remaining events\n while (this.events.length > 0 && this.handler) {\n await this.processBatch(this.handler)\n }\n this.handler = null\n }\n\n async getFailedEvents(): Promise<FailedBusEvent[]> {\n return this.deadLetterQueue.map((event) => ({\n ...event,\n retryCount: this.retryCounts.get(event.id) ?? this.maxRetries ?? 0,\n error: \"Max retries exceeded\", // capture actual error if possible\n }))\n }\n\n async retryEvents(eventIds: string[]): Promise<void> {\n const eventsToRetry = this.deadLetterQueue.filter((event) => eventIds.includes(event.id))\n this.deadLetterQueue = this.deadLetterQueue.filter((event) => !eventIds.includes(event.id))\n\n for (const event of eventsToRetry) {\n this.retryCounts.set(event.id, 0)\n this.events.push(event)\n }\n }\n\n private async processBatch(handler: (event: BusEvent) => Promise<void>) {\n if (this.events.length === 0) return\n\n const batch = this.events\n this.events = []\n\n const failedEvents: BusEvent[] = []\n\n for (const event of batch) {\n try {\n await handler(event)\n if (event.id) {\n this.retryCounts.delete(event.id)\n }\n } catch (error) {\n const currentRetries = event.id ? (this.retryCounts.get(event.id) ?? 0) : 0\n const nextRetryCount = currentRetries + 1\n\n if (this.shouldRetry(event)) {\n failedEvents.push(event)\n if (this.maxRetries !== undefined) {\n reportEventError(this.onError, error, event, nextRetryCount, this.maxRetries)\n }\n } else {\n this.moveToDLQ(event, error)\n }\n }\n }\n\n if (failedEvents.length > 0) {\n this.events.unshift(...failedEvents)\n }\n }\n\n private shouldRetry(event: BusEvent): boolean {\n if (this.maxRetries === undefined || !event.id) return true\n\n const currentRetries = this.retryCounts.get(event.id) ?? 0\n if (currentRetries < this.maxRetries) {\n this.retryCounts.set(event.id, currentRetries + 1)\n return true\n }\n\n return false\n }\n\n private moveToDLQ(event: BusEvent, error: unknown): void {\n const retryCount = (event.id ? this.retryCounts.get(event.id) : 0) ?? 0\n if (event.id) {\n this.retryCounts.delete(event.id)\n }\n\n const failedEvent: FailedBusEvent = { ...event, retryCount: retryCount + 1 }\n this.onError?.(new MaxRetriesExceededError(error, failedEvent))\n this.deadLetterQueue.push(event)\n }\n}\n","export interface BatcherConfig<T> {\n batchSize: number\n batchTimeoutMs: number\n processBatch: (items: T[]) => Promise<void>\n}\n\ninterface QueuedItem<T> {\n item: T\n resolve: () => void\n reject: (error: unknown) => void\n}\n\nexport class Batcher<T> {\n private queue: QueuedItem<T>[] = []\n private timer: NodeJS.Timeout | null = null\n private readonly config: BatcherConfig<T>\n\n constructor(config: BatcherConfig<T>) {\n this.config = config\n }\n\n async add(item: T): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n this.queue.push({ item, resolve, reject })\n this.scheduleFlushIfNeeded()\n })\n }\n\n private scheduleFlushIfNeeded(): void {\n if (this.queue.length >= this.config.batchSize) {\n void this.flush()\n return\n }\n\n this.timer ??= setTimeout(() => {\n void this.flush()\n }, this.config.batchTimeoutMs)\n }\n\n private async flush(): Promise<void> {\n this.clearTimer()\n\n if (this.queue.length === 0) return\n\n const currentBatch = this.queue\n this.queue = []\n\n const items = currentBatch.map((qi) => qi.item)\n\n try {\n await this.config.processBatch(items)\n for (const qi of currentBatch) qi.resolve()\n } catch (error) {\n for (const qi of currentBatch) qi.reject(error)\n }\n }\n\n private clearTimer(): void {\n if (this.timer) {\n clearTimeout(this.timer)\n this.timer = null\n }\n }\n}\n","import type { RetryOptions } from \"../types/types\"\n\nexport async function withRetry<T>(\n operation: () => Promise<T>,\n options: Required<RetryOptions>\n): Promise<T> {\n let lastError: unknown\n let delay = options.initialDelayMs\n\n for (let attempt = 1; attempt <= options.maxAttempts; attempt++) {\n try {\n return await operation()\n } catch (error) {\n lastError = error\n if (attempt < options.maxAttempts) {\n await new Promise((resolve) => setTimeout(resolve, delay))\n delay = Math.min(delay * 2, options.maxDelayMs)\n }\n }\n }\n\n throw lastError\n}\n","import type { IOutboxEventBus } from \"../types/interfaces\"\nimport type { BusEvent, ProcessingOptions, PublisherConfig, RetryOptions } from \"../types/types\"\nimport { Batcher } from \"../utils/batcher\"\nimport { promiseMap } from \"../utils/promise-utils\"\nimport { withRetry } from \"../utils/retry\"\n\nexport class EventPublisher<TTransaction> {\n static readonly DEFAULT_BUFFER_SIZE = 50\n static readonly DEFAULT_BUFFER_TIMEOUT_MS = 100\n static readonly DEFAULT_CONCURRENCY = 5\n static readonly DEFAULT_RETRY_ATTEMPTS = 3\n static readonly DEFAULT_RETRY_DELAY_MS = 1000\n static readonly DEFAULT_RETRY_MAX_DELAY_MS = 10000\n\n private readonly retryOptions: Required<RetryOptions>\n\n constructor(\n private readonly bus: IOutboxEventBus<TTransaction>,\n private readonly config?: PublisherConfig\n ) {\n const { retryConfig } = config ?? {}\n this.retryOptions = {\n maxAttempts: retryConfig?.maxAttempts ?? EventPublisher.DEFAULT_RETRY_ATTEMPTS,\n initialDelayMs: retryConfig?.initialDelayMs ?? EventPublisher.DEFAULT_RETRY_DELAY_MS,\n maxDelayMs: retryConfig?.maxDelayMs ?? EventPublisher.DEFAULT_RETRY_MAX_DELAY_MS,\n }\n }\n\n static withOverrides(\n config: PublisherConfig,\n processingOverrides: Partial<ProcessingOptions>\n ): PublisherConfig {\n return {\n ...config,\n processingConfig: {\n ...config.processingConfig,\n ...processingOverrides,\n },\n }\n }\n\n subscribe(eventTypes: string[], handler: (events: BusEvent[]) => Promise<void>): void {\n const processingConfig = this.config?.processingConfig\n const batcher = new Batcher<BusEvent>({\n batchSize: processingConfig?.bufferSize ?? EventPublisher.DEFAULT_BUFFER_SIZE,\n batchTimeoutMs: processingConfig?.bufferTimeoutMs ?? EventPublisher.DEFAULT_BUFFER_TIMEOUT_MS,\n processBatch: (events) => this.handleBatch(events, handler),\n })\n\n this.bus.subscribe(eventTypes, (event) => batcher.add(event))\n }\n\n private async handleBatch(\n events: BusEvent[],\n handler: (events: BusEvent[]) => Promise<void>\n ): Promise<void> {\n const { maxBatchSize, concurrency = EventPublisher.DEFAULT_CONCURRENCY } =\n this.config?.processingConfig ?? {}\n\n if (!maxBatchSize || events.length <= maxBatchSize) {\n return withRetry(() => handler(events), this.retryOptions)\n }\n\n const chunks: BusEvent[][] = []\n for (let offset = 0; offset < events.length; offset += maxBatchSize) {\n chunks.push(events.slice(offset, offset + maxBatchSize))\n }\n\n await promiseMap(\n chunks,\n (chunk) => withRetry(() => handler(chunk), this.retryOptions),\n concurrency\n )\n }\n}\n","import type { OutboxError } from \"../errors/errors\"\n\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport type BusEvent<T extends string = string, P = unknown> = {\n id: string\n type: T\n payload: P\n occurredAt: Date\n metadata?: Record<string, unknown>\n}\n\nexport type FailedBusEvent<T extends string = string, P = unknown> = BusEvent<T, P> & {\n error?: string\n retryCount: number\n lastAttemptAt?: Date\n}\n\nexport type BusEventInput<T extends string = string, P = unknown> = PartialBy<\n BusEvent<T, P>,\n \"id\" | \"occurredAt\"\n>\n\nexport type EventHandler<T extends string = string, P = unknown> = (\n event: BusEvent<T, P>\n) => Promise<void>\n\nexport type AnyListener = (...args: unknown[]) => unknown\n\nexport type ErrorHandler = (error: OutboxError) => void\n\nexport type RetryOptions = {\n maxAttempts?: number\n initialDelayMs?: number\n maxDelayMs?: number\n}\n\nexport type ProcessingOptions = {\n bufferSize?: number\n bufferTimeoutMs?: number\n concurrency?: number\n maxBatchSize?: number\n}\n\nexport type PublisherConfig = {\n retryConfig?: RetryOptions\n processingConfig?: ProcessingOptions\n}\n\nexport const EventStatus = {\n CREATED: \"created\",\n ACTIVE: \"active\",\n FAILED: \"failed\",\n COMPLETED: \"completed\",\n} as const\n\nexport type EventStatus = (typeof EventStatus)[keyof typeof EventStatus]\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["event: FailedBusEvent","event: BusEvent","timer: ReturnType<typeof setTimeout>","cleanups: (() => void)[]","outbox: IOutbox<TTransaction>","ctx: EmitMiddlewareContext<TTransaction>","onceHandler: WrappedEventHandler<T, P>","ctx: HandlerMiddlewareContext<TTransaction>","config: PollingServiceConfig","failedEvents: BusEvent[]","failedEvent: FailedBusEvent","lastError: unknown","bus: IOutboxEventBus<TTransaction>","config?: PublisherConfig","chunks: BusEvent[][]"],"sources":["../src/errors/errors.ts","../src/utils/middleware-utils.ts","../src/utils/promise-utils.ts","../src/utils/time-utils.ts","../src/bus/outbox-event-bus.ts","../src/errors/error-reporting.ts","../src/errors/error-utils.ts","../src/services/polling-service.ts","../src/outboxes/in-memory/in-memory-outbox.ts","../src/utils/batcher.ts","../src/utils/retry.ts","../src/services/event-publisher.ts","../src/types/types.ts"],"sourcesContent":["import type { BusEvent, FailedBusEvent } from \"../types/types\"\n\nexport interface OutboxErrorContext {\n event?: BusEvent | FailedBusEvent\n cause?: unknown\n [key: string]: unknown\n}\n\nexport abstract class OutboxError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends Error {\n public context?: TContext | undefined\n\n constructor(message: string, name: string, context?: TContext) {\n super(message, { cause: context?.cause })\n this.name = name\n this.context = context\n\n if (\"captureStackTrace\" in Error) {\n Error.captureStackTrace(this, OutboxError)\n }\n\n // Restore prototype chain for proper instanceof checks\n Object.setPrototypeOf(this, new.target.prototype)\n }\n}\n\n// === Configuration Errors ===\n\nexport class ConfigurationError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(message: string, context?: TContext) {\n super(message, \"ConfigurationError\", context)\n }\n}\n\nexport class DuplicateListenerError extends ConfigurationError {\n constructor(eventType: string) {\n super(\n `Event type \"${eventType}\" already has a listener. You can only register one handler per event type.`,\n { eventType }\n )\n this.name = \"DuplicateListenerError\"\n }\n}\n\nexport class UnsupportedOperationError extends ConfigurationError {\n constructor(operation: string, adapterName = \"adapter\") {\n super(`Underlying outbox ${adapterName} does not support management operation: ${operation}`, {\n operation,\n adapterName,\n })\n this.name = \"UnsupportedOperationError\"\n }\n}\n\n// === Validation Errors ===\n\nexport class ValidationError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(message: string, context?: TContext) {\n super(message, \"ValidationError\", context)\n }\n}\n\nexport class BatchSizeLimitError extends ValidationError {\n constructor(limit: number, actual: number) {\n super(`Cannot publish ${actual} events because the batch size limit is ${limit}.`, {\n limit,\n actual,\n })\n this.name = \"BatchSizeLimitError\"\n }\n}\n\n// === Operational Errors ===\n\nexport class OperationalError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(message: string, context?: TContext) {\n super(message, \"OperationalError\", context)\n }\n}\n\nexport class TimeoutError extends OperationalError {\n constructor(operation: string, timeoutMs: number, context?: OutboxErrorContext) {\n super(`Timed out waiting for ${operation} after ${timeoutMs}ms`, {\n operation,\n timeoutMs,\n ...context,\n })\n this.name = \"TimeoutError\"\n }\n}\n\nexport class BackpressureError extends OperationalError {\n constructor(resource: string, context?: OutboxErrorContext) {\n super(`Failed to publish to ${resource}: buffer full (backpressure)`, { resource, ...context })\n this.name = \"BackpressureError\"\n }\n}\n\nexport class MaintenanceError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OperationalError<TContext> {\n constructor(cause: unknown, context?: TContext) {\n const message = cause instanceof Error ? cause.message : String(cause)\n const fullContext = { cause, ...context } as TContext\n super(`Maintenance operation failed: ${message}`, fullContext)\n this.name = \"MaintenanceError\"\n }\n}\n\n// Existing Error - Integrating into hierarchy\nexport class MaxRetriesExceededError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OperationalError<TContext> {\n public get retryCount(): number {\n return this.event.retryCount\n }\n\n constructor(\n cause: unknown,\n public readonly event: FailedBusEvent,\n context?: TContext\n ) {\n const fullContext = {\n cause,\n event,\n ...context,\n } as unknown as TContext\n\n super(`Max retries exceeded (${event.retryCount}). Event moved to DLQ.`, fullContext)\n this.name = \"MaxRetriesExceededError\"\n }\n}\n\nexport class HandlerError<\n TContext extends OutboxErrorContext = OutboxErrorContext,\n> extends OutboxError<TContext> {\n constructor(\n cause: unknown,\n public readonly event: BusEvent,\n context?: TContext\n ) {\n const message = cause instanceof Error ? cause.message : String(cause)\n const fullContext = { cause, event, ...context } as unknown as TContext\n super(`Event handler failed: ${message}`, \"HandlerError\", fullContext)\n }\n}\n","import type { Next } from \"../types/middleware\"\n\nexport async function executeMiddleware<TContext>(\n middlewares: ((ctx: TContext, next: Next) => Promise<void>)[],\n context: TContext\n): Promise<boolean> {\n let currentIndex = -1\n\n async function dispatch(index: number): Promise<boolean> {\n if (index <= currentIndex) {\n throw new Error(\"next() called multiple times\")\n }\n currentIndex = index\n if (index === middlewares.length) {\n return true\n }\n\n const fn = middlewares[index]\n if (!fn) {\n return dispatch(index + 1)\n }\n\n let nextCalled = false\n let dropEvent = false\n let isDownstreamComplete = false\n\n async function next(options?: { dropEvent?: boolean }): Promise<void> {\n if (dropEvent) return\n\n nextCalled = true\n\n if (options?.dropEvent) {\n dropEvent = true\n return\n }\n\n isDownstreamComplete = await dispatch(index + 1)\n }\n\n await fn(context, next)\n\n if (!nextCalled) {\n throw new Error(`Middleware at index ${index} must call next()`)\n }\n\n return !dropEvent && isDownstreamComplete\n }\n\n return dispatch(0)\n}\n","export async function promiseMap<T, R>(\n items: T[],\n mapper: (item: T, index: number) => Promise<R>,\n concurrency: number\n): Promise<R[]> {\n let cursor = 0\n const results = new Array<R>(items.length)\n\n const workers = Array.from({ length: Math.min(concurrency, items.length) }, async () => {\n while (cursor < items.length) {\n const index = cursor++\n results[index] = await mapper(items[index] as T, index)\n }\n })\n await Promise.all(workers)\n\n return results\n}\n","export function createTimedPromise<T>(timeoutMs: number, onTimeoutError: () => Error) {\n let timer: ReturnType<typeof setTimeout>\n const cleanups: (() => void)[] = []\n\n const { promise, resolve, reject } = Promise.withResolvers<T>()\n\n let completed = false\n let started = false\n\n function cleanup() {\n if (completed) return\n completed = true\n if (timer) clearTimeout(timer)\n for (const fn of cleanups) {\n fn()\n }\n }\n\n function safeAttempt(fn: () => void) {\n try {\n cleanup()\n fn()\n } catch (error) {\n reject(error)\n }\n }\n\n return {\n resolve: (value: T | PromiseLike<T>) => safeAttempt(() => resolve(value)),\n reject: (reason?: unknown) => safeAttempt(() => reject(reason)),\n addCleanup: (fn: () => void) => {\n cleanups.push(fn)\n },\n start: () => {\n if (started) return promise\n started = true\n\n if (completed) return promise\n\n timer = setTimeout(() => {\n safeAttempt(() => reject(onTimeoutError()))\n }, timeoutMs)\n\n return promise\n },\n }\n}\n","import { DuplicateListenerError, TimeoutError, UnsupportedOperationError } from \"../errors/errors\"\nimport type { IOutbox, IOutboxEventBus } from \"../types/interfaces\"\nimport type {\n EmitMiddleware,\n EmitMiddlewareContext,\n HandlerMiddleware,\n HandlerMiddlewareContext,\n Middleware,\n} from \"../types/middleware\"\nimport type {\n AnyListener,\n BusEvent,\n BusEventInput,\n ErrorHandler,\n EventHandler,\n FailedBusEvent,\n} from \"../types/types\"\nimport { executeMiddleware } from \"../utils/middleware-utils\"\nimport { promiseMap } from \"../utils/promise-utils\"\nimport { createTimedPromise } from \"../utils/time-utils\"\n\nconst DEFAULT_WAIT_TIMEOUT_MS = 5000\n\ntype WrappedEventHandler<T extends string = string, P = unknown> = EventHandler<T, P> & {\n _original?: EventHandler<T, P>\n}\n\nexport type OutboxBusConfig = {\n onError: ErrorHandler\n middlewareConcurrency?: number\n}\n\nexport class OutboxEventBus<TTransaction> implements IOutboxEventBus<TTransaction> {\n private readonly handlers = new Map<string, EventHandler<string, unknown>>()\n private readonly emitMiddlewares: EmitMiddleware<TTransaction>[] = []\n private readonly handlerMiddlewares: HandlerMiddleware<TTransaction>[] = []\n private readonly onError: ErrorHandler\n private readonly middlewareConcurrency: number\n\n constructor(\n private readonly outbox: IOutbox<TTransaction>,\n onErrorOrConfig: ErrorHandler | OutboxBusConfig\n ) {\n if (typeof onErrorOrConfig === \"function\") {\n this.onError = onErrorOrConfig\n this.middlewareConcurrency = 10\n } else {\n this.onError = onErrorOrConfig.onError\n this.middlewareConcurrency = Math.max(1, onErrorOrConfig.middlewareConcurrency ?? 10)\n }\n }\n\n addEmitMiddleware(...middlewares: EmitMiddleware<TTransaction>[]): this {\n this.emitMiddlewares.push(...middlewares)\n return this\n }\n\n addHandlerMiddleware(...middlewares: HandlerMiddleware<TTransaction>[]): this {\n this.handlerMiddlewares.push(...middlewares)\n return this\n }\n\n addMiddleware(...middlewares: Middleware<TTransaction>[]): this {\n this.addEmitMiddleware(...(middlewares as EmitMiddleware<TTransaction>[]))\n this.addHandlerMiddleware(...(middlewares as HandlerMiddleware<TTransaction>[]))\n return this\n }\n\n async emit<T extends string, P>(\n event: BusEventInput<T, P>,\n transaction?: TTransaction\n ): Promise<void> {\n await this.emitMany([event], transaction)\n }\n\n async emitMany<T extends string, P>(\n events: BusEventInput<T, P>[],\n transaction?: TTransaction\n ): Promise<void> {\n if (events.length === 0) return\n\n const eventsWithDefaults = this.prepareEvents(events)\n\n const middlewareSnapshot = [...this.emitMiddlewares]\n if (middlewareSnapshot.length === 0) {\n await this.outbox.publish(eventsWithDefaults, transaction)\n return\n }\n\n const results = await promiseMap(\n eventsWithDefaults,\n (event) => this.runEmitMiddleware(event, middlewareSnapshot, transaction),\n this.middlewareConcurrency\n )\n\n const eventsToPublish = results.filter((e): e is BusEvent => !!e)\n if (eventsToPublish.length > 0) {\n await this.outbox.publish(eventsToPublish, transaction)\n }\n }\n\n private prepareEvents<T extends string, P>(events: BusEventInput<T, P>[]): BusEvent[] {\n return events.map((event) => ({\n ...event,\n id: event.id ?? crypto.randomUUID(),\n occurredAt: event.occurredAt ?? new Date(),\n })) as BusEvent[]\n }\n\n private async runEmitMiddleware(\n event: BusEvent,\n middlewares: EmitMiddleware<TTransaction>[],\n transaction?: TTransaction\n ): Promise<BusEvent | null> {\n const ctx: EmitMiddlewareContext<TTransaction> = {\n event,\n phase: \"emit\",\n transaction,\n }\n\n const shouldPublish = await executeMiddleware(middlewares, ctx)\n\n return shouldPublish ? ctx.event : null\n }\n\n on<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n if (this.handlers.has(eventType)) {\n throw new DuplicateListenerError(eventType)\n }\n\n this.handlers.set(eventType, handler as EventHandler<string, unknown>)\n return this\n }\n\n addListener<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n return this.on(eventType, handler)\n }\n\n once<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n const onceHandler: WrappedEventHandler<T, P> = async (event) => {\n this.off(eventType, onceHandler)\n await handler(event)\n }\n\n onceHandler._original = handler\n return this.on(eventType, onceHandler)\n }\n\n off<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n const currentHandler = this.handlers.get(eventType) as\n | WrappedEventHandler<string, unknown>\n | undefined\n\n if (currentHandler === handler || currentHandler?._original === handler) {\n this.handlers.delete(eventType)\n }\n\n return this\n }\n\n removeListener<T extends string, P = unknown>(eventType: T, handler: EventHandler<T, P>): this {\n return this.off(eventType, handler)\n }\n\n removeAllListeners<T extends string>(eventType?: T): this {\n if (eventType) {\n this.handlers.delete(eventType)\n } else {\n this.handlers.clear()\n }\n return this\n }\n\n getListener(eventType: string): AnyListener | undefined {\n return this.handlers.get(eventType) as unknown as AnyListener | undefined\n }\n\n subscribe<T extends string, P = unknown>(eventTypes: T[], handler: EventHandler<T, P>): this {\n for (const type of eventTypes) {\n this.on(type, handler)\n }\n return this\n }\n\n async waitFor<T extends string, P = unknown>(\n eventType: T,\n timeoutMs = DEFAULT_WAIT_TIMEOUT_MS\n ): Promise<BusEvent<T, P>> {\n const timedPromise = createTimedPromise<BusEvent<T, P>>(\n timeoutMs,\n () => new TimeoutError(`event \"${eventType}\"`, timeoutMs, { eventType })\n )\n\n async function handler(event: BusEvent<T, P>) {\n timedPromise.resolve(event)\n }\n\n timedPromise.addCleanup(() => this.off(eventType, handler))\n this.on(eventType, handler)\n\n return timedPromise.start()\n }\n\n start(): void {\n this.outbox.start(this.processEvent, this.onError)\n }\n\n async stop(): Promise<void> {\n await this.outbox.stop()\n }\n\n getSubscriptionCount(): number {\n return this.handlers.size\n }\n\n listenerCount(eventType: string): number {\n return this.handlers.has(eventType) ? 1 : 0\n }\n\n eventNames(): string[] {\n return Array.from(this.handlers.keys())\n }\n\n async getFailedEvents(): Promise<FailedBusEvent[]> {\n if (!this.outbox.getFailedEvents) {\n throw new UnsupportedOperationError(\"getFailedEvents\")\n }\n return this.outbox.getFailedEvents()\n }\n\n async retryEvents(eventIds: string[]): Promise<void> {\n if (!this.outbox.retryEvents) {\n throw new UnsupportedOperationError(\"retryEvents\")\n }\n return this.outbox.retryEvents(eventIds)\n }\n\n private processEvent = async (event: BusEvent): Promise<void> => {\n const middlewareSnapshot = [...this.handlerMiddlewares]\n\n if (middlewareSnapshot.length === 0) {\n const handler = this.handlers.get(event.type)\n if (handler) {\n await handler(event)\n }\n return\n }\n\n const ctx: HandlerMiddlewareContext<TTransaction> = { event, phase: \"handler\" }\n const shouldProcess = await executeMiddleware(middlewareSnapshot, ctx)\n\n if (shouldProcess) {\n const handler = this.handlers.get(ctx.event.type)\n if (handler) {\n await handler(ctx.event)\n }\n }\n }\n}\n","import type { BusEvent, ErrorHandler, FailedBusEvent } from \"../types/types\"\n\nimport { HandlerError, MaxRetriesExceededError } from \"./errors\"\n\nexport function reportEventError(\n onError: ErrorHandler | undefined,\n error: unknown,\n event: BusEvent,\n retryCount: number,\n maxRetries: number\n): void {\n if (!onError) return\n\n if (retryCount > maxRetries) {\n const failedEvent: FailedBusEvent = { ...event, retryCount }\n onError(new MaxRetriesExceededError(error, failedEvent))\n } else {\n onError(new HandlerError(error, event))\n }\n}\n","export function formatErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n","import { MaintenanceError, OperationalError, OutboxError } from \"../errors/errors\"\nimport type { PollingServiceConfig } from \"../types/interfaces\"\nimport type { BusEvent, ErrorHandler } from \"../types/types\"\n\nexport class PollingService {\n private isPolling = false\n private pollTimer: NodeJS.Timeout | null = null\n private errorCount = 0\n private readonly maxErrorBackoffMs: number\n private activePollPromise: Promise<void> | null = null\n\n public onError?: ErrorHandler\n\n constructor(private readonly config: PollingServiceConfig) {\n this.maxErrorBackoffMs = config.maxErrorBackoffMs ?? 30000\n }\n\n start(handler: (event: BusEvent) => Promise<void>, onError: ErrorHandler): void {\n this.onError = onError\n if (this.isPolling) return\n this.isPolling = true\n void this.poll(handler)\n }\n\n async stop(): Promise<void> {\n this.isPolling = false\n if (this.pollTimer) {\n clearTimeout(this.pollTimer)\n this.pollTimer = null\n }\n if (this.activePollPromise) {\n await this.activePollPromise\n }\n }\n\n calculateBackoff(retryCount: number): number {\n const { baseBackoffMs } = this.config\n const backoff = baseBackoffMs * 2 ** (retryCount - 1)\n const jitter = (Math.random() * 0.2 - 0.1) * backoff // ±10% jitter\n return Math.floor(backoff + jitter)\n }\n\n private async poll(handler: (event: BusEvent) => Promise<void>) {\n if (!this.isPolling) return\n\n this.activePollPromise = this.executePoll(handler)\n\n try {\n await this.activePollPromise\n this.errorCount = 0\n } catch (error) {\n this.handlePollError(error)\n } finally {\n this.activePollPromise = null\n this.scheduleNextPoll(handler)\n }\n }\n\n private handlePollError(error: unknown): void {\n const errorToReport =\n error instanceof OutboxError\n ? (error as OutboxError)\n : new OperationalError(\"Polling cycle failed\", { cause: error })\n\n this.onError?.(errorToReport)\n this.errorCount++\n }\n\n private scheduleNextPoll(handler: (event: BusEvent) => Promise<void>): void {\n if (!this.isPolling) return\n\n const delay =\n this.errorCount > 0\n ? Math.min(this.calculateBackoff(this.errorCount + 1), this.maxErrorBackoffMs)\n : this.config.pollIntervalMs\n\n this.pollTimer = setTimeout(() => {\n void this.poll(handler)\n }, delay)\n }\n\n private async executePoll(handler: (event: BusEvent) => Promise<void>): Promise<void> {\n if (this.config.performMaintenance) {\n try {\n await this.config.performMaintenance()\n } catch (maintenanceError) {\n throw new MaintenanceError(maintenanceError)\n }\n }\n await this.config.processBatch(handler)\n }\n}\n","import { reportEventError } from \"../../errors/error-reporting\"\nimport { MaxRetriesExceededError } from \"../../errors/errors\"\nimport { PollingService } from \"../../services/polling-service\"\nimport type { IOutbox } from \"../../types/interfaces\"\nimport type { BusEvent, ErrorHandler, FailedBusEvent } from \"../../types/types\"\n\nconst IN_MEMORY_POLL_INTERVAL_MS = 10\nconst IN_MEMORY_BASE_BACKOFF_MS = 10\nconst IN_MEMORY_MAX_ERROR_BACKOFF_MS = 50\nconst IN_MEMORY_DEFAULT_MAX_RETRIES = 3\n\nexport type InMemoryOutboxConfig = {\n maxRetries?: number\n}\n\nexport class InMemoryOutbox implements IOutbox<unknown> {\n private events: BusEvent[] = []\n private deadLetterQueue: BusEvent[] = []\n private readonly poller: PollingService\n private handler: ((event: BusEvent) => Promise<void>) | null = null\n public onError?: ErrorHandler\n private readonly maxRetries?: number\n private retryCounts = new Map<string, number>()\n\n constructor(config: InMemoryOutboxConfig = {}) {\n this.maxRetries = config.maxRetries ?? IN_MEMORY_DEFAULT_MAX_RETRIES\n this.poller = new PollingService({\n pollIntervalMs: IN_MEMORY_POLL_INTERVAL_MS,\n baseBackoffMs: IN_MEMORY_BASE_BACKOFF_MS,\n maxErrorBackoffMs: IN_MEMORY_MAX_ERROR_BACKOFF_MS,\n processBatch: (handler) => this.processBatch(handler),\n })\n }\n\n async publish(events: BusEvent[]): Promise<void> {\n this.events.push(...events)\n }\n\n start(handler: (event: BusEvent) => Promise<void>, onError: ErrorHandler): void {\n this.handler = handler\n this.onError = onError\n this.poller.start(handler, onError)\n }\n\n async stop(): Promise<void> {\n await this.poller.stop()\n // Drain remaining events\n while (this.events.length > 0 && this.handler) {\n await this.processBatch(this.handler)\n }\n this.handler = null\n }\n\n async getFailedEvents(): Promise<FailedBusEvent[]> {\n return this.deadLetterQueue.map((event) => ({\n ...event,\n retryCount: this.retryCounts.get(event.id) ?? this.maxRetries ?? 0,\n error: \"Max retries exceeded\", // capture actual error if possible\n }))\n }\n\n async retryEvents(eventIds: string[]): Promise<void> {\n const eventsToRetry = this.deadLetterQueue.filter((event) => eventIds.includes(event.id))\n this.deadLetterQueue = this.deadLetterQueue.filter((event) => !eventIds.includes(event.id))\n\n for (const event of eventsToRetry) {\n this.retryCounts.set(event.id, 0)\n this.events.push(event)\n }\n }\n\n private async processBatch(handler: (event: BusEvent) => Promise<void>) {\n if (this.events.length === 0) return\n\n const batch = this.events\n this.events = []\n\n const failedEvents: BusEvent[] = []\n\n for (const event of batch) {\n try {\n await handler(event)\n if (event.id) {\n this.retryCounts.delete(event.id)\n }\n } catch (error) {\n const currentRetries = event.id ? (this.retryCounts.get(event.id) ?? 0) : 0\n const nextRetryCount = currentRetries + 1\n\n if (this.shouldRetry(event)) {\n failedEvents.push(event)\n if (this.maxRetries !== undefined) {\n reportEventError(this.onError, error, event, nextRetryCount, this.maxRetries)\n }\n } else {\n this.moveToDLQ(event, error)\n }\n }\n }\n\n if (failedEvents.length > 0) {\n this.events.unshift(...failedEvents)\n }\n }\n\n private shouldRetry(event: BusEvent): boolean {\n if (this.maxRetries === undefined || !event.id) return true\n\n const currentRetries = this.retryCounts.get(event.id) ?? 0\n if (currentRetries < this.maxRetries) {\n this.retryCounts.set(event.id, currentRetries + 1)\n return true\n }\n\n return false\n }\n\n private moveToDLQ(event: BusEvent, error: unknown): void {\n const retryCount = (event.id ? this.retryCounts.get(event.id) : 0) ?? 0\n if (event.id) {\n this.retryCounts.delete(event.id)\n }\n\n const failedEvent: FailedBusEvent = { ...event, retryCount: retryCount + 1 }\n this.onError?.(new MaxRetriesExceededError(error, failedEvent))\n this.deadLetterQueue.push(event)\n }\n}\n","export interface BatcherConfig<T> {\n batchSize: number\n batchTimeoutMs: number\n processBatch: (items: T[]) => Promise<void>\n}\n\ninterface QueuedItem<T> {\n item: T\n resolve: () => void\n reject: (error: unknown) => void\n}\n\nexport class Batcher<T> {\n private queue: QueuedItem<T>[] = []\n private timer: NodeJS.Timeout | null = null\n private readonly config: BatcherConfig<T>\n\n constructor(config: BatcherConfig<T>) {\n this.config = config\n }\n\n async add(item: T): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n this.queue.push({ item, resolve, reject })\n this.scheduleFlushIfNeeded()\n })\n }\n\n private scheduleFlushIfNeeded(): void {\n if (this.queue.length >= this.config.batchSize) {\n void this.flush()\n return\n }\n\n this.timer ??= setTimeout(() => {\n void this.flush()\n }, this.config.batchTimeoutMs)\n }\n\n private async flush(): Promise<void> {\n this.clearTimer()\n\n if (this.queue.length === 0) return\n\n const currentBatch = this.queue\n this.queue = []\n\n const items = currentBatch.map((qi) => qi.item)\n\n try {\n await this.config.processBatch(items)\n for (const qi of currentBatch) qi.resolve()\n } catch (error) {\n for (const qi of currentBatch) qi.reject(error)\n }\n }\n\n private clearTimer(): void {\n if (this.timer) {\n clearTimeout(this.timer)\n this.timer = null\n }\n }\n}\n","import type { RetryOptions } from \"../types/types\"\n\nexport async function withRetry<T>(\n operation: () => Promise<T>,\n options: Required<RetryOptions>\n): Promise<T> {\n let lastError: unknown\n let delay = options.initialDelayMs\n\n for (let attempt = 1; attempt <= options.maxAttempts; attempt++) {\n try {\n return await operation()\n } catch (error) {\n lastError = error\n if (attempt < options.maxAttempts) {\n await new Promise((resolve) => setTimeout(resolve, delay))\n delay = Math.min(delay * 2, options.maxDelayMs)\n }\n }\n }\n\n throw lastError\n}\n","import type { IOutboxEventBus } from \"../types/interfaces\"\nimport type { BusEvent, ProcessingOptions, PublisherConfig, RetryOptions } from \"../types/types\"\nimport { Batcher } from \"../utils/batcher\"\nimport { promiseMap } from \"../utils/promise-utils\"\nimport { withRetry } from \"../utils/retry\"\n\nexport class EventPublisher<TTransaction> {\n static readonly DEFAULT_BUFFER_SIZE = 50\n static readonly DEFAULT_BUFFER_TIMEOUT_MS = 100\n static readonly DEFAULT_CONCURRENCY = 5\n static readonly DEFAULT_RETRY_ATTEMPTS = 3\n static readonly DEFAULT_RETRY_DELAY_MS = 1000\n static readonly DEFAULT_RETRY_MAX_DELAY_MS = 10000\n\n private readonly retryOptions: Required<RetryOptions>\n\n constructor(\n private readonly bus: IOutboxEventBus<TTransaction>,\n private readonly config?: PublisherConfig\n ) {\n const { retryConfig } = config ?? {}\n this.retryOptions = {\n maxAttempts: retryConfig?.maxAttempts ?? EventPublisher.DEFAULT_RETRY_ATTEMPTS,\n initialDelayMs: retryConfig?.initialDelayMs ?? EventPublisher.DEFAULT_RETRY_DELAY_MS,\n maxDelayMs: retryConfig?.maxDelayMs ?? EventPublisher.DEFAULT_RETRY_MAX_DELAY_MS,\n }\n }\n\n static withOverrides(\n config: PublisherConfig,\n processingOverrides: Partial<ProcessingOptions>\n ): PublisherConfig {\n return {\n ...config,\n processingConfig: {\n ...config.processingConfig,\n ...processingOverrides,\n },\n }\n }\n\n subscribe(eventTypes: string[], handler: (events: BusEvent[]) => Promise<void>): void {\n const processingConfig = this.config?.processingConfig\n const batcher = new Batcher<BusEvent>({\n batchSize: processingConfig?.bufferSize ?? EventPublisher.DEFAULT_BUFFER_SIZE,\n batchTimeoutMs: processingConfig?.bufferTimeoutMs ?? EventPublisher.DEFAULT_BUFFER_TIMEOUT_MS,\n processBatch: (events) => this.handleBatch(events, handler),\n })\n\n this.bus.subscribe(eventTypes, (event) => batcher.add(event))\n }\n\n private async handleBatch(\n events: BusEvent[],\n handler: (events: BusEvent[]) => Promise<void>\n ): Promise<void> {\n const { maxBatchSize, concurrency = EventPublisher.DEFAULT_CONCURRENCY } =\n this.config?.processingConfig ?? {}\n\n if (!maxBatchSize || events.length <= maxBatchSize) {\n return withRetry(() => handler(events), this.retryOptions)\n }\n\n const chunks: BusEvent[][] = []\n for (let offset = 0; offset < events.length; offset += maxBatchSize) {\n chunks.push(events.slice(offset, offset + maxBatchSize))\n }\n\n await promiseMap(\n chunks,\n (chunk) => withRetry(() => handler(chunk), this.retryOptions),\n concurrency\n )\n }\n}\n","import type { OutboxError } from \"../errors/errors\"\n\ntype PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport type BusEvent<T extends string = string, P = unknown> = {\n id: string\n type: T\n payload: P\n occurredAt: Date\n metadata?: Record<string, unknown>\n}\n\nexport type FailedBusEvent<T extends string = string, P = unknown> = BusEvent<T, P> & {\n error?: string\n retryCount: number\n lastAttemptAt?: Date\n}\n\nexport type BusEventInput<T extends string = string, P = unknown> = PartialBy<\n BusEvent<T, P>,\n \"id\" | \"occurredAt\"\n>\n\nexport type EventHandler<T extends string = string, P = unknown> = (\n event: BusEvent<T, P>\n) => Promise<void>\n\nexport type AnyListener = (...args: unknown[]) => unknown\n\nexport type ErrorHandler = (error: OutboxError) => void\n\nexport type RetryOptions = {\n maxAttempts?: number\n initialDelayMs?: number\n maxDelayMs?: number\n}\n\nexport type ProcessingOptions = {\n bufferSize?: number\n bufferTimeoutMs?: number\n concurrency?: number\n maxBatchSize?: number\n}\n\nexport type PublisherConfig = {\n retryConfig?: RetryOptions\n processingConfig?: ProcessingOptions\n}\n\nexport const EventStatus = {\n CREATED: \"created\",\n ACTIVE: \"active\",\n FAILED: \"failed\",\n COMPLETED: \"completed\",\n} as const\n\nexport type EventStatus = (typeof EventStatus)[keyof typeof EventStatus]\n"],"mappings":"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"}
|