/**
 * TestEventBus — In-memory EventBusPort for unit testing.
 *
 * No Redis dependency. Messages are stored in a Map and dispatched
 * synchronously to in-process subscribers. Use for agent unit tests
 * that need to publish/subscribe without infrastructure.
 *
 * Extended in SDK v0.17.0 (sprint-615:quick-7) with:
 *   - publishWithIdempotency (dedup via InMemoryNonceStore)
 *   - subscribeDomain (signature verification + DLQ routing)
 *   - replayFrom (ordered replay from a stream ID)
 *
 * @public
 */
import type { CloudEvent, DomainEvent, EventBusPort, Subscription } from "../ports/event-bus.js";
export declare class TestEventBus implements EventBusPort {
    private streams;
    private subscribers;
    private dlqMessages;
    private _consumed;
    private domainStreams;
    private domainSubscribers;
    private domainDlq;
    private publishIdempotencyStore;
    private consumerNonceStore;
    /**
     * Secret used to auto-sign events in publishWithIdempotency.
     * Override in tests via setSigningSecret().
     */
    private signingSecret;
    /** Override the signing secret for tests that check signature roundtrip. */
    setSigningSecret(secret: string): void;
    publish(event: CloudEvent, stream: string): Promise<void>;
    publishWithIdempotency<T>(event: Omit<DomainEvent<T>, "signature">, key: string): Promise<void>;
    subscribe(stream: string, consumerGroup: string, handler: (event: CloudEvent) => Promise<void>): Promise<() => void>;
    subscribeDomain<T>(eventType: string, handler: (event: DomainEvent<T>) => Promise<void>, opts?: {
        groupId?: string;
        dlq?: string;
    }): Subscription;
    replayFrom(streamKey: string, fromId: string): AsyncIterable<DomainEvent>;
    dlq(): {
        depth(): Promise<number>;
        replay(eventId: string): Promise<void>;
    };
    pendingCount(_stream: string, _consumerGroup: string): Promise<number>;
    /** All events published to a stream. */
    published(stream: string): CloudEvent[];
    /** All events consumed (published) to a stream since creation. */
    consumed(stream: string): CloudEvent[];
    /** Move an event to DLQ (simulates poison pill). */
    moveToDlq(event: CloudEvent): void;
    /** Domain DLQ — events rejected by signature/clock/replay checks. */
    get domainDlqEvents(): DomainEvent[];
    /** Clear all state. */
    reset(): void;
}
//# sourceMappingURL=test-event-bus.d.ts.map