import type { DomainEvent, DomainEventBus } from '../shared/domainEvents.js';
export interface SseBusEvent {
    /** 单调递增 ID（SSE 需要） */
    readonly id: number;
    /** SSE event 字段值 = DomainEvent.type */
    readonly event: string;
    /** 原始领域事件 */
    readonly data: DomainEvent;
    /** 发布时的 wall-clock ts（ms） */
    readonly ts: number;
}
export interface SseEventBusOptions {
    /** 历史窗口大小 —— 超过丢最早的。默认 1000。 */
    maxHistory?: number;
}
export declare class SseEventBus implements DomainEventBus {
    private lastEventId;
    private history;
    private readonly maxHistory;
    private readonly emitter;
    constructor(opts?: SseEventBusOptions);
    emit(event: DomainEvent): void;
    subscribe(handler: (event: DomainEvent) => void): () => void;
    /**
     * SSE route 订阅的原始接口 —— 给需要 id / event 字段的 route 用。
     * 订阅器内抛异常会冒泡（调用方 try/catch 或接受 EventEmitter 行为）。
     */
    subscribeRaw(handler: (record: SseBusEvent) => void): () => void;
    /** SSE 断线重连用：返回 lastEventId 之后的历史 */
    since(lastEventId: number): SseBusEvent[];
    /** 测试 / close 时清空 */
    clearHistory(): void;
    /** 当前最大 id，测试用 */
    currentId(): number;
}
//# sourceMappingURL=sseBus.d.ts.map