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.
@@ -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
- interface InMemoryOutboxConfig {
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;
@@ -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
- interface InMemoryOutboxConfig {
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;
@@ -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.emitMiddlewares.push(...middlewares);
223
- this.handlerMiddlewares.push(...middlewares);
221
+ this.addEmitMiddleware(...middlewares);
222
+ this.addHandlerMiddleware(...middlewares);
224
223
  return this;
225
224
  }
226
225
  async emit(event, transaction) {
@@ -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":";AAQA,IAAsB,cAAtB,MAAsB,oBAEZ,MAAM;CACd,AAAO;CAEP,YAAY,SAAiB,MAAc,SAAoB;AAC7D,QAAM,SAAS,EAAE,OAAO,SAAS,OAAO,CAAC;AACzC,OAAK,OAAO;AACZ,OAAK,UAAU;AAEf,MAAI,uBAAuB,MACzB,OAAM,kBAAkB,MAAM,YAAY;AAI5C,SAAO,eAAe,MAAM,IAAI,OAAO,UAAU;;;AAMrD,IAAa,qBAAb,cAEU,YAAsB;CAC9B,YAAY,SAAiB,SAAoB;AAC/C,QAAM,SAAS,sBAAsB,QAAQ;;;AAIjD,IAAa,yBAAb,cAA4C,mBAAmB;CAC7D,YAAY,WAAmB;AAC7B,QACE,eAAe,UAAU,8EACzB,EAAE,WAAW,CACd;AACD,OAAK,OAAO;;;AAIhB,IAAa,4BAAb,cAA+C,mBAAmB;CAChE,YAAY,WAAmB,cAAc,WAAW;AACtD,QAAM,qBAAqB,YAAY,0CAA0C,aAAa;GAC5F;GACA;GACD,CAAC;AACF,OAAK,OAAO;;;AAMhB,IAAa,kBAAb,cAEU,YAAsB;CAC9B,YAAY,SAAiB,SAAoB;AAC/C,QAAM,SAAS,mBAAmB,QAAQ;;;AAI9C,IAAa,sBAAb,cAAyC,gBAAgB;CACvD,YAAY,OAAe,QAAgB;AACzC,QAAM,kBAAkB,OAAO,0CAA0C,MAAM,IAAI;GACjF;GACA;GACD,CAAC;AACF,OAAK,OAAO;;;AAMhB,IAAa,mBAAb,cAEU,YAAsB;CAC9B,YAAY,SAAiB,SAAoB;AAC/C,QAAM,SAAS,oBAAoB,QAAQ;;;AAI/C,IAAa,eAAb,cAAkC,iBAAiB;CACjD,YAAY,WAAmB,WAAmB,SAA8B;AAC9E,QAAM,yBAAyB,UAAU,SAAS,UAAU,KAAK;GAC/D;GACA;GACA,GAAG;GACJ,CAAC;AACF,OAAK,OAAO;;;AAIhB,IAAa,oBAAb,cAAuC,iBAAiB;CACtD,YAAY,UAAkB,SAA8B;AAC1D,QAAM,wBAAwB,SAAS,+BAA+B;GAAE;GAAU,GAAG;GAAS,CAAC;AAC/F,OAAK,OAAO;;;AAIhB,IAAa,mBAAb,cAEU,iBAA2B;CACnC,YAAY,OAAgB,SAAoB;EAC9C,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;EACtE,MAAM,cAAc;GAAE;GAAO,GAAG;GAAS;AACzC,QAAM,iCAAiC,WAAW,YAAY;AAC9D,OAAK,OAAO;;;AAKhB,IAAa,0BAAb,cAEU,iBAA2B;CACnC,IAAW,aAAqB;AAC9B,SAAO,KAAK,MAAM;;CAGpB,YACE,OACA,AAAgBA,OAChB,SACA;EACA,MAAM,cAAc;GAClB;GACA;GACA,GAAG;GACJ;AAED,QAAM,yBAAyB,MAAM,WAAW,yBAAyB,YAAY;EATrE;AAUhB,OAAK,OAAO;;;AAIhB,IAAa,eAAb,cAEU,YAAsB;CAC9B,YACE,OACA,AAAgBC,OAChB,SACA;EACA,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;EACtE,MAAM,cAAc;GAAE;GAAO;GAAO,GAAG;GAAS;AAChD,QAAM,yBAAyB,WAAW,gBAAgB,YAAY;EALtD;;;;;;AC/IpB,eAAsB,kBACpB,aACA,SACkB;CAClB,IAAI,eAAe;CAEnB,eAAe,SAAS,OAAiC;AACvD,MAAI,SAAS,aACX,OAAM,IAAI,MAAM,+BAA+B;AAEjD,iBAAe;AACf,MAAI,UAAU,YAAY,OACxB,QAAO;EAGT,MAAM,KAAK,YAAY;AACvB,MAAI,CAAC,GACH,QAAO,SAAS,QAAQ,EAAE;EAG5B,IAAI,aAAa;EACjB,IAAI,YAAY;EAChB,IAAI,uBAAuB;EAE3B,eAAe,KAAK,SAAkD;AACpE,OAAI,UAAW;AAEf,gBAAa;AAEb,OAAI,SAAS,WAAW;AACtB,gBAAY;AACZ;;AAGF,0BAAuB,MAAM,SAAS,QAAQ,EAAE;;AAGlD,QAAM,GAAG,SAAS,KAAK;AAEvB,MAAI,CAAC,WACH,OAAM,IAAI,MAAM,uBAAuB,MAAM,mBAAmB;AAGlE,SAAO,CAAC,aAAa;;AAGvB,QAAO,SAAS,EAAE;;;;;AChDpB,eAAsB,WACpB,OACA,QACA,aACc;CACd,IAAI,SAAS;CACb,MAAM,UAAU,IAAI,MAAS,MAAM,OAAO;CAE1C,MAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,aAAa,EAAE,YAAY;AAC9D,SAAO,SAAS,MAAM,QAAQ;GAC5B,MAAM,QAAQ;AACd,OAAI,SAAS,MAAM,OAAQ;AAC3B,WAAQ,SAAS,MAAM,OAAO,MAAM,QAAa,MAAM;;GAEzD;AACF,OAAM,QAAQ,IAAI,QAAQ;AAE1B,QAAO;;;;;ACjBT,SAAgB,mBAAsB,WAAmB,gBAA6B;CACpF,IAAIC;CACJ,MAAMC,WAA2B,EAAE;CAEnC,MAAM,EAAE,SAAS,SAAS,WAAW,QAAQ,eAAkB;CAE/D,IAAI,YAAY;CAChB,IAAI,UAAU;CAEd,SAAS,UAAU;AACjB,MAAI,UAAW;AACf,cAAY;AACZ,MAAI,MAAO,cAAa,MAAM;AAC9B,OAAK,MAAM,MAAM,SACf,KAAI;;CAIR,SAAS,YAAY,IAAgB;AACnC,MAAI;AACF,YAAS;AACT,OAAI;WACG,OAAO;AACd,UAAO,MAAM;;;AAIjB,QAAO;EACL,UAAU,UAA8B,kBAAkB,QAAQ,MAAM,CAAC;EACzE,SAAS,WAAqB,kBAAkB,OAAO,OAAO,CAAC;EAC/D,aAAa,OAAmB;AAC9B,YAAS,KAAK,GAAG;;EAEnB,aAAa;AACX,OAAI,QAAS,QAAO;AACpB,aAAU;AAEV,OAAI,UAAW,QAAO;AAEtB,WAAQ,iBAAiB;AACvB,sBAAkB,OAAO,gBAAgB,CAAC,CAAC;MAC1C,UAAU;AAEb,UAAO;;EAEV;;;;;ACxBH,MAAM,0BAA0B;AAWhC,IAAa,iBAAb,MAAmF;CACjF,AAAiB,2BAAW,IAAI,KAA4C;CAC5E,AAAiB,kBAAkD,EAAE;CACrE,AAAiB,qBAAwD,EAAE;CAC3E,AAAiB;CACjB,AAAiB;CAEjB,YACE,AAAiBC,QACjB,iBACA;EAFiB;AAGjB,MAAI,OAAO,oBAAoB,YAAY;AACzC,QAAK,UAAU;AACf,QAAK,wBAAwB;SACxB;AACL,QAAK,UAAU,gBAAgB;AAC/B,QAAK,wBAAwB,KAAK,IAAI,GAAG,gBAAgB,yBAAyB,GAAG;;;CAIzF,kBAAkB,GAAG,aAAmD;AACtE,OAAK,gBAAgB,KAAK,GAAG,YAAY;AACzC,SAAO;;CAGT,qBAAqB,GAAG,aAAsD;AAC5E,OAAK,mBAAmB,KAAK,GAAG,YAAY;AAC5C,SAAO;;CAGT,cAAc,GAAG,aAA+C;AAC9D,OAAK,gBAAgB,KAAK,GAAI,YAA+C;AAC7E,OAAK,mBAAmB,KAAK,GAAI,YAAkD;AACnF,SAAO;;CAKT,MAAM,KACJ,OACA,aACe;AACf,QAAM,KAAK,SAAS,CAAC,MAAM,EAAE,YAAY;;CAG3C,MAAM,SACJ,QACA,aACe;AACf,MAAI,OAAO,WAAW,EAAG;EAEzB,MAAM,qBAAqB,KAAK,cAAc,OAAO;EAErD,MAAM,qBAAqB,CAAC,GAAG,KAAK,gBAAgB;AACpD,MAAI,mBAAmB,WAAW,GAAG;AACnC,SAAM,KAAK,OAAO,QAAQ,oBAAoB,YAAY;AAC1D;;EASF,MAAM,mBANU,MAAM,WACpB,qBACC,UAAU,KAAK,kBAAkB,OAAO,oBAAoB,YAAY,EACzE,KAAK,sBACN,EAE+B,QAAQ,MAAqB,CAAC,CAAC,EAAE;AACjE,MAAI,gBAAgB,SAAS,EAC3B,OAAM,KAAK,OAAO,QAAQ,iBAAiB,YAAY;;CAI3D,AAAQ,cAAmC,QAA2C;AACpF,SAAO,OAAO,KAAK,WAAW;GAC5B,GAAG;GACH,IAAI,MAAM,MAAM,OAAO,YAAY;GACnC,YAAY,MAAM,8BAAc,IAAI,MAAM;GAC3C,EAAE;;CAGL,MAAc,kBACZ,OACA,aACA,aAC0B;EAC1B,MAAMC,MAA2C;GAC/C;GACA,OAAO;GACP;GACD;AAID,SAFsB,MAAM,kBAAkB,aAAa,IAAI,GAExC,IAAI,QAAQ;;CAGrC,GAAkC,WAAc,SAAmC;AACjF,MAAI,KAAK,SAAS,IAAI,UAAU,CAC9B,OAAM,IAAI,uBAAuB,UAAU;AAG7C,OAAK,SAAS,IAAI,WAAW,QAAyC;AACtE,SAAO;;CAGT,YAA2C,WAAc,SAAmC;AAC1F,SAAO,KAAK,GAAG,WAAW,QAAQ;;CAGpC,KAAoC,WAAc,SAAmC;EACnF,MAAMC,cAAyC,OAAO,UAAU;AAC9D,QAAK,IAAI,WAAW,YAAY;AAChC,SAAM,QAAQ,MAAM;;AAGtB,cAAY,YAAY;AACxB,SAAO,KAAK,GAAG,WAAW,YAAY;;CAGxC,IAAmC,WAAc,SAAmC;EAClF,MAAM,iBAAiB,KAAK,SAAS,IAAI,UAAU;AAInD,MAAI,mBAAmB,WAAW,gBAAgB,cAAc,QAC9D,MAAK,SAAS,OAAO,UAAU;AAGjC,SAAO;;CAGT,eAA8C,WAAc,SAAmC;AAC7F,SAAO,KAAK,IAAI,WAAW,QAAQ;;CAGrC,mBAAqC,WAAqB;AACxD,MAAI,UACF,MAAK,SAAS,OAAO,UAAU;MAE/B,MAAK,SAAS,OAAO;AAEvB,SAAO;;CAGT,YAAY,WAA4C;AACtD,SAAO,KAAK,SAAS,IAAI,UAAU;;CAGrC,UAAyC,YAAiB,SAAmC;AAC3F,OAAK,MAAM,QAAQ,WACjB,MAAK,GAAG,MAAM,QAAQ;AAExB,SAAO;;CAGT,MAAM,QACJ,WACA,YAAY,yBACa;EACzB,MAAM,eAAe,mBACnB,iBACM,IAAI,aAAa,UAAU,UAAU,IAAI,WAAW,EAAE,WAAW,CAAC,CACzE;EAED,eAAe,QAAQ,OAAuB;AAC5C,gBAAa,QAAQ,MAAM;;AAG7B,eAAa,iBAAiB,KAAK,IAAI,WAAW,QAAQ,CAAC;AAC3D,OAAK,GAAG,WAAW,QAAQ;AAE3B,SAAO,aAAa,OAAO;;CAG7B,QAAc;AACZ,OAAK,OAAO,MAAM,KAAK,cAAc,KAAK,QAAQ;;CAGpD,MAAM,OAAsB;AAC1B,QAAM,KAAK,OAAO,MAAM;;CAG1B,uBAA+B;AAC7B,SAAO,KAAK,SAAS;;CAGvB,cAAc,WAA2B;AACvC,SAAO,KAAK,SAAS,IAAI,UAAU,GAAG,IAAI;;CAG5C,aAAuB;AACrB,SAAO,MAAM,KAAK,KAAK,SAAS,MAAM,CAAC;;CAGzC,MAAM,kBAA6C;AACjD,MAAI,CAAC,KAAK,OAAO,gBACf,OAAM,IAAI,0BAA0B,kBAAkB;AAExD,SAAO,KAAK,OAAO,iBAAiB;;CAGtC,MAAM,YAAY,UAAmC;AACnD,MAAI,CAAC,KAAK,OAAO,YACf,OAAM,IAAI,0BAA0B,cAAc;AAEpD,SAAO,KAAK,OAAO,YAAY,SAAS;;CAG1C,AAAQ,eAAe,OAAO,UAAmC;EAC/D,MAAM,qBAAqB,CAAC,GAAG,KAAK,mBAAmB;AAEvD,MAAI,mBAAmB,WAAW,GAAG;GACnC,MAAM,UAAU,KAAK,SAAS,IAAI,MAAM,KAAK;AAC7C,OAAI,QACF,OAAM,QAAQ,MAAM;AAEtB;;EAGF,MAAMC,MAA8C;GAAE;GAAO,OAAO;GAAW;AAG/E,MAFsB,MAAM,kBAAkB,oBAAoB,IAAI,EAEnD;GACjB,MAAM,UAAU,KAAK,SAAS,IAAI,IAAI,MAAM,KAAK;AACjD,OAAI,QACF,OAAM,QAAQ,IAAI,MAAM;;;;;;;AC5PhC,SAAgB,iBACd,SACA,OACA,OACA,YACA,YACM;AACN,KAAI,CAAC,QAAS;AAEd,KAAI,aAAa,WAEf,SAAQ,IAAI,wBAAwB,OADA;EAAE,GAAG;EAAO;EAAY,CACL,CAAC;KAExD,SAAQ,IAAI,aAAa,OAAO,MAAM,CAAC;;;;;ACjB3C,SAAgB,mBAAmB,OAAwB;AACzD,QAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;;;;;ACG/D,IAAa,iBAAb,MAA4B;CAC1B,AAAQ,YAAY;CACpB,AAAQ,YAAmC;CAC3C,AAAQ,aAAa;CACrB,AAAiB;CACjB,AAAQ,oBAA0C;CAElD,AAAO;CAEP,YAAY,AAAiBC,QAA8B;EAA9B;AAC3B,OAAK,oBAAoB,OAAO,qBAAqB;;CAGvD,MAAM,SAA6C,SAA6B;AAC9E,OAAK,UAAU;AACf,MAAI,KAAK,UAAW;AACpB,OAAK,YAAY;AACjB,EAAK,KAAK,KAAK,QAAQ;;CAGzB,MAAM,OAAsB;AAC1B,OAAK,YAAY;AACjB,MAAI,KAAK,WAAW;AAClB,gBAAa,KAAK,UAAU;AAC5B,QAAK,YAAY;;AAEnB,MAAI,KAAK,kBACP,OAAM,KAAK;;CAIf,iBAAiB,YAA4B;EAC3C,MAAM,EAAE,kBAAkB,KAAK;EAC/B,MAAM,UAAU,gBAAgB,MAAM,aAAa;EACnD,MAAM,UAAU,KAAK,QAAQ,GAAG,KAAM,MAAO;AAC7C,SAAO,KAAK,MAAM,UAAU,OAAO;;CAGrC,MAAc,KAAK,SAA6C;AAC9D,MAAI,CAAC,KAAK,UAAW;AAErB,OAAK,oBAAoB,KAAK,YAAY,QAAQ;AAElD,MAAI;AACF,SAAM,KAAK;AACX,QAAK,aAAa;WACX,OAAO;AACd,QAAK,gBAAgB,MAAM;YACnB;AACR,QAAK,oBAAoB;AACzB,QAAK,iBAAiB,QAAQ;;;CAIlC,AAAQ,gBAAgB,OAAsB;EAC5C,MAAM,gBACJ,iBAAiB,cACZ,QACD,IAAI,iBAAiB,wBAAwB,EAAE,OAAO,OAAO,CAAC;AAEpE,OAAK,UAAU,cAAc;AAC7B,OAAK;;CAGP,AAAQ,iBAAiB,SAAmD;AAC1E,MAAI,CAAC,KAAK,UAAW;EAErB,MAAM,QACJ,KAAK,aAAa,IACd,KAAK,IAAI,KAAK,iBAAiB,KAAK,aAAa,EAAE,EAAE,KAAK,kBAAkB,GAC5E,KAAK,OAAO;AAElB,OAAK,YAAY,iBAAiB;AAChC,GAAK,KAAK,KAAK,QAAQ;KACtB,MAAM;;CAGX,MAAc,YAAY,SAA4D;AACpF,MAAI,KAAK,OAAO,mBACd,KAAI;AACF,SAAM,KAAK,OAAO,oBAAoB;WAC/B,kBAAkB;AACzB,SAAM,IAAI,iBAAiB,iBAAiB;;AAGhD,QAAM,KAAK,OAAO,aAAa,QAAQ;;;;;;ACnF3C,MAAM,6BAA6B;AACnC,MAAM,4BAA4B;AAClC,MAAM,iCAAiC;AACvC,MAAM,gCAAgC;AAMtC,IAAa,iBAAb,MAAwD;CACtD,AAAQ,SAAqB,EAAE;CAC/B,AAAQ,kBAA8B,EAAE;CACxC,AAAiB;CACjB,AAAQ,UAAuD;CAC/D,AAAO;CACP,AAAiB;CACjB,AAAQ,8BAAc,IAAI,KAAqB;CAE/C,YAAY,SAA+B,EAAE,EAAE;AAC7C,OAAK,aAAa,OAAO,cAAc;AACvC,OAAK,SAAS,IAAI,eAAe;GAC/B,gBAAgB;GAChB,eAAe;GACf,mBAAmB;GACnB,eAAe,YAAY,KAAK,aAAa,QAAQ;GACtD,CAAC;;CAGJ,MAAM,QAAQ,QAAmC;AAC/C,OAAK,OAAO,KAAK,GAAG,OAAO;;CAG7B,MAAM,SAA6C,SAA6B;AAC9E,OAAK,UAAU;AACf,OAAK,UAAU;AACf,OAAK,OAAO,MAAM,SAAS,QAAQ;;CAGrC,MAAM,OAAsB;AAC1B,QAAM,KAAK,OAAO,MAAM;AAExB,SAAO,KAAK,OAAO,SAAS,KAAK,KAAK,QACpC,OAAM,KAAK,aAAa,KAAK,QAAQ;AAEvC,OAAK,UAAU;;CAGjB,MAAM,kBAA6C;AACjD,SAAO,KAAK,gBAAgB,KAAK,WAAW;GAC1C,GAAG;GACH,YAAY,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI,KAAK,cAAc;GACjE,OAAO;GACR,EAAE;;CAGL,MAAM,YAAY,UAAmC;EACnD,MAAM,gBAAgB,KAAK,gBAAgB,QAAQ,UAAU,SAAS,SAAS,MAAM,GAAG,CAAC;AACzF,OAAK,kBAAkB,KAAK,gBAAgB,QAAQ,UAAU,CAAC,SAAS,SAAS,MAAM,GAAG,CAAC;AAE3F,OAAK,MAAM,SAAS,eAAe;AACjC,QAAK,YAAY,IAAI,MAAM,IAAI,EAAE;AACjC,QAAK,OAAO,KAAK,MAAM;;;CAI3B,MAAc,aAAa,SAA6C;AACtE,MAAI,KAAK,OAAO,WAAW,EAAG;EAE9B,MAAM,QAAQ,KAAK;AACnB,OAAK,SAAS,EAAE;EAEhB,MAAMC,eAA2B,EAAE;AAEnC,OAAK,MAAM,SAAS,MAClB,KAAI;AACF,SAAM,QAAQ,MAAM;AACpB,OAAI,MAAM,GACR,MAAK,YAAY,OAAO,MAAM,GAAG;WAE5B,OAAO;GAEd,MAAM,kBADiB,MAAM,KAAM,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI,IAAK,KAClC;AAExC,OAAI,KAAK,YAAY,MAAM,EAAE;AAC3B,iBAAa,KAAK,MAAM;AACxB,QAAI,KAAK,eAAe,OACtB,kBAAiB,KAAK,SAAS,OAAO,OAAO,gBAAgB,KAAK,WAAW;SAG/E,MAAK,UAAU,OAAO,MAAM;;AAKlC,MAAI,aAAa,SAAS,EACxB,MAAK,OAAO,QAAQ,GAAG,aAAa;;CAIxC,AAAQ,YAAY,OAA0B;AAC5C,MAAI,KAAK,eAAe,UAAa,CAAC,MAAM,GAAI,QAAO;EAEvD,MAAM,iBAAiB,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI;AACzD,MAAI,iBAAiB,KAAK,YAAY;AACpC,QAAK,YAAY,IAAI,MAAM,IAAI,iBAAiB,EAAE;AAClD,UAAO;;AAGT,SAAO;;CAGT,AAAQ,UAAU,OAAiB,OAAsB;EACvD,MAAM,cAAc,MAAM,KAAK,KAAK,YAAY,IAAI,MAAM,GAAG,GAAG,MAAM;AACtE,MAAI,MAAM,GACR,MAAK,YAAY,OAAO,MAAM,GAAG;EAGnC,MAAMC,cAA8B;GAAE,GAAG;GAAO,YAAY,aAAa;GAAG;AAC5E,OAAK,UAAU,IAAI,wBAAwB,OAAO,YAAY,CAAC;AAC/D,OAAK,gBAAgB,KAAK,MAAM;;;;;;ACjHpC,IAAa,UAAb,MAAwB;CACtB,AAAQ,QAAyB,EAAE;CACnC,AAAQ,QAA+B;CACvC,AAAiB;CAEjB,YAAY,QAA0B;AACpC,OAAK,SAAS;;CAGhB,MAAM,IAAI,MAAwB;AAChC,SAAO,IAAI,SAAe,SAAS,WAAW;AAC5C,QAAK,MAAM,KAAK;IAAE;IAAM;IAAS;IAAQ,CAAC;AAC1C,QAAK,uBAAuB;IAC5B;;CAGJ,AAAQ,wBAA8B;AACpC,MAAI,KAAK,MAAM,UAAU,KAAK,OAAO,WAAW;AAC9C,GAAK,KAAK,OAAO;AACjB;;AAGF,OAAK,UAAU,iBAAiB;AAC9B,GAAK,KAAK,OAAO;KAChB,KAAK,OAAO,eAAe;;CAGhC,MAAc,QAAuB;AACnC,OAAK,YAAY;AAEjB,MAAI,KAAK,MAAM,WAAW,EAAG;EAE7B,MAAM,eAAe,KAAK;AAC1B,OAAK,QAAQ,EAAE;EAEf,MAAM,QAAQ,aAAa,KAAK,OAAO,GAAG,KAAK;AAE/C,MAAI;AACF,SAAM,KAAK,OAAO,aAAa,MAAM;AACrC,QAAK,MAAM,MAAM,aAAc,IAAG,SAAS;WACpC,OAAO;AACd,QAAK,MAAM,MAAM,aAAc,IAAG,OAAO,MAAM;;;CAInD,AAAQ,aAAmB;AACzB,MAAI,KAAK,OAAO;AACd,gBAAa,KAAK,MAAM;AACxB,QAAK,QAAQ;;;;;;;AC1DnB,eAAsB,UACpB,WACA,SACY;CACZ,IAAIC;CACJ,IAAI,QAAQ,QAAQ;AAEpB,MAAK,IAAI,UAAU,GAAG,WAAW,QAAQ,aAAa,UACpD,KAAI;AACF,SAAO,MAAM,WAAW;UACjB,OAAO;AACd,cAAY;AACZ,MAAI,UAAU,QAAQ,aAAa;AACjC,SAAM,IAAI,SAAS,YAAY,WAAW,SAAS,MAAM,CAAC;AAC1D,WAAQ,KAAK,IAAI,QAAQ,GAAG,QAAQ,WAAW;;;AAKrD,OAAM;;;;;ACfR,IAAa,iBAAb,MAAa,eAA6B;CACxC,OAAgB,sBAAsB;CACtC,OAAgB,4BAA4B;CAC5C,OAAgB,sBAAsB;CACtC,OAAgB,yBAAyB;CACzC,OAAgB,yBAAyB;CACzC,OAAgB,6BAA6B;CAE7C,AAAiB;CAEjB,YACE,AAAiBC,KACjB,AAAiBC,QACjB;EAFiB;EACA;EAEjB,MAAM,EAAE,gBAAgB,UAAU,EAAE;AACpC,OAAK,eAAe;GAClB,aAAa,aAAa,eAAe,eAAe;GACxD,gBAAgB,aAAa,kBAAkB,eAAe;GAC9D,YAAY,aAAa,cAAc,eAAe;GACvD;;CAGH,OAAO,cACL,QACA,qBACiB;AACjB,SAAO;GACL,GAAG;GACH,kBAAkB;IAChB,GAAG,OAAO;IACV,GAAG;IACJ;GACF;;CAGH,UAAU,YAAsB,SAAsD;EACpF,MAAM,mBAAmB,KAAK,QAAQ;EACtC,MAAM,UAAU,IAAI,QAAkB;GACpC,WAAW,kBAAkB,cAAc,eAAe;GAC1D,gBAAgB,kBAAkB,mBAAmB,eAAe;GACpE,eAAe,WAAW,KAAK,YAAY,QAAQ,QAAQ;GAC5D,CAAC;AAEF,OAAK,IAAI,UAAU,aAAa,UAAU,QAAQ,IAAI,MAAM,CAAC;;CAG/D,MAAc,YACZ,QACA,SACe;EACf,MAAM,EAAE,cAAc,cAAc,eAAe,wBACjD,KAAK,QAAQ,oBAAoB,EAAE;AAErC,MAAI,CAAC,gBAAgB,OAAO,UAAU,aACpC,QAAO,gBAAgB,QAAQ,OAAO,EAAE,KAAK,aAAa;EAG5D,MAAMC,SAAuB,EAAE;AAC/B,OAAK,IAAI,SAAS,GAAG,SAAS,OAAO,QAAQ,UAAU,aACrD,QAAO,KAAK,OAAO,MAAM,QAAQ,SAAS,aAAa,CAAC;AAG1D,QAAM,WACJ,SACC,UAAU,gBAAgB,QAAQ,MAAM,EAAE,KAAK,aAAa,EAC7D,YACD;;;;;;ACvBL,MAAa,cAAc;CACzB,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,WAAW;CACZ"}
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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"}