import type { Event, SubscribeBatchOptions } from '../types.js'; /** * Opaque timer handle. We don't care whether the runtime returns a number * (browser) or a `Timeout` (Node) — we only ever hand it back to * `clearTimeout`. Branding it keeps the type honest (you can't pass an * arbitrary number) while staying erasure-free at runtime. */ declare const batchPolicyTimerHandleBrand: unique symbol; export type BatchPolicyTimerHandle = { readonly [batchPolicyTimerHandleBrand]: true; }; /** * Injectable dependencies for `BatchPolicy`. Tests pass fake timers / * controllable clocks; production uses Node's `Date.now` / `setTimeout` / * `clearTimeout`. */ export interface BatchPolicyDeps { now: () => number; setTimeout: (cb: () => void, ms: number) => BatchPolicyTimerHandle; clearTimeout: (handle: BatchPolicyTimerHandle) => void; } export type EnqueueDecision = 'flush-now' | 'wait'; export declare const DEFAULT_MAX_BUFFER_SIZE = 256; export declare const DEFAULT_OVERFLOW: NonNullable; /** * Internal to `EventEmitterPubSub`. Embedded by `AckHandleBuffer` to decide * when a batched subscription should flush (size, time, coalesce, overflow). * * Not part of the public API — users configure batching via * `SubscribeBatchOptions` on `subscribe`. */ export declare class BatchPolicy { private readonly opts; private readonly deps; private readonly maxBufferSize; private readonly overflow; private firstQueuedAt; private lastDeliveredAt; private size; private timer; private flushHandler; constructor(opts: SubscribeBatchOptions, deps?: BatchPolicyDeps); /** Bind the function invoked when the deadline timer fires. */ bindFlushHandler(fn: () => void | Promise): void; /** * Called by the integrator each time an event is enqueued. * Returns whether the integrator should flush immediately. */ onEnqueue(event: Event): EnqueueDecision; /** * Called by the integrator after a successful flush has delivered * `deliveredCount` events. Resets timer + firstQueuedAt. */ onFlushed(deliveredCount: number): void; /** * Pure helper. Given the caller-owned queue contents, applies `coalesce` * and `overflow` to decide what to deliver and what to drop. * Order-preserving for kept events. */ prepareBatch(events: Event[]): { delivered: Event[]; dropped: Event[]; }; /** Stop the timer and clear policy state. */ dispose(): void; private scheduleDeadline; private scheduleAt; private cancelTimer; /** * Drop `count` non-immediate items from the start (or end) of `items`. * Immediate items are never dropped — if every candidate is immediate, * fewer than `count` items are dropped. */ private takeWithoutDropping; } export {}; //# sourceMappingURL=batch-policy.d.ts.map