import { OAuthTraceEvent, OAuthTracePhase, OAuthTraceSink } from './trace-events';
export interface OAuthTraceRecorder {
    record(phase: OAuthTracePhase, data?: Record<string, unknown>, error?: {
        code?: string;
        message: string;
    } | Error): void;
    snapshot(): OAuthTraceEvent[];
    summary(): {
        totalMs: number;
        phaseCounts: Record<string, number>;
        lastPhase?: OAuthTracePhase;
    };
    flush(): Promise<void>;
}
export interface OAuthTraceRecorderOptions {
    sessionId: string;
    provider: string;
    verbose: boolean;
    fileSink?: OAuthTraceSink;
    /** Test seam — defaults to `Date.now`. */
    now?: () => number;
    /** Test seam — override verbose sink output channel. */
    verboseOut?: (line: string) => void;
}
/**
 * Create a per-attempt recorder. Always wires:
 *  - memory sink (read via `snapshot()`)
 *  - verbose stdout sink (no-op when verbose=false)
 *  - optional file sink (Phase 8)
 *
 * All event data passes through the redactor before reaching any sink.
 */
export declare function createOAuthTraceRecorder(options: OAuthTraceRecorderOptions): OAuthTraceRecorder;
//# sourceMappingURL=trace-recorder.d.ts.map