//#region src/drain-pipeline.d.ts
interface DrainPipelineOptions<T = unknown> {
  batch?: {
    /** Maximum events per batch. @default 50 */size?: number; /** Max time an event can stay buffered before flush. @default 5000 */
    intervalMs?: number;
  };
  retry?: {
    /** Total attempts including first try. @default 3 */maxAttempts?: number; /** Delay strategy between attempts. @default 'exponential' */
    backoff?: 'exponential' | 'linear' | 'fixed'; /** Base delay for first retry. @default 1000 */
    initialDelayMs?: number; /** Max delay cap. @default 30000 */
    maxDelayMs?: number; /** Add random jitter to delays. @default true */
    jitter?: boolean;
  };
  /** Max buffered events before dropping. @default 1000 */
  maxBufferSize?: number;
  /** Overflow policy. @default 'oldest' */
  dropPolicy?: 'oldest' | 'newest';
  /** Called when events are dropped from overflow or exhausted retries. */
  onDropped?: (events: T[], error?: Error) => void;
}
interface PipelineDrainFn<T> {
  (ctx: T): void;
  /** Flush all buffered events. */
  flush: () => Promise<void>;
  /** Flush and stop scheduling future timer work. */
  shutdown: () => Promise<void>;
  readonly pending: number;
}
declare function createDrainPipeline<T = unknown>(options?: DrainPipelineOptions<T>): (drain: (batch: T[]) => void | Promise<void>) => PipelineDrainFn<T>;
//#endregion
export { DrainPipelineOptions, PipelineDrainFn, createDrainPipeline };
//# sourceMappingURL=drain-pipeline.d.cts.map