autotel
Version:
Write Once, Observe Anywhere
38 lines (36 loc) • 1.53 kB
TypeScript
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>;
export { type DrainPipelineOptions, type PipelineDrainFn, createDrainPipeline };