/**
 * `inMemorySinkCost()` — default CostStrategy.
 *
 * Pattern: Strategy. In-process accumulator. Same role as InMemoryStore
 *          for memory-providers.
 * Role:    Tier-1 fallback — accumulate cost ticks in a process-local
 *          array. Consumer reads via `getTicks()` or hooks `onRecord`
 *          for streaming. Vendor-free.
 *
 * Use when:
 *   - Tests / CI ("what cost did this run accrue?")
 *   - Local dev before billing integration
 *   - Tier-1 of compose chains (`compose([inMemorySink(), stripeBilling()])`
 *     so test assertions can read ticks while production also ships)
 *
 * Don't use when: process is long-running with high cost-tick volume —
 * the buffer grows unbounded. Add a `maxTicks` cap (drops oldest) or
 * pair with a streaming strategy (`stripeBilling`, `webhook`).
 */
import type { CostStrategy, CostTick } from '../types.js';
export interface InMemorySinkCostOptions {
    /**
     * Optional streaming hook called per tick. Useful for piping the
     * accumulator into a custom sink without writing a full strategy.
     */
    readonly onRecord?: (tick: CostTick) => void;
    /**
     * Maximum ticks to retain in the buffer. When exceeded, the OLDEST
     * tick is dropped (FIFO). Default `Infinity` — no cap.
     */
    readonly maxTicks?: number;
}
/**
 * Extended interface — the in-memory sink also exposes the buffer
 * for read-back. Strategies aren't required to do this; this one
 * does because that IS its purpose (accumulate for inspection).
 */
export interface InMemorySinkCostStrategy extends CostStrategy {
    /** Snapshot of the buffered ticks. O(n) per call — for cheap
     *  polling use `getTicksCount()` + `getTicksSince(idx)`. */
    readonly getTicks: () => readonly CostTick[];
    /** Cheap O(1) read for "did anything new arrive?" polling. */
    readonly getTicksCount: () => number;
    /** Incremental read — returns ticks WITH index >= `idx`. Lets a
     *  dashboard poll cheaply by tracking its last-seen index. */
    readonly getTicksSince: (idx: number) => readonly CostTick[];
    /** Drop all buffered ticks. */
    readonly clear: () => void;
}
export declare function inMemorySinkCost(opts?: InMemorySinkCostOptions): InMemorySinkCostStrategy;
//# sourceMappingURL=inMemorySinkCost.d.ts.map