autotel
Version:
Write Once, Observe Anywhere
32 lines • 1.49 kB
text/typescript
//#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