import type { MessageProcessingResult, MessageProcessingResultStatus } from '../types/MessageQueueTypes';
export type HandlerSpyParams = {
    bufferSize?: number;
    messageIdField?: string;
    messageTypeField?: string;
};
export type SpyResultInput<MessagePayloadSchemas extends object> = {
    message: MessagePayloadSchemas | null;
    processingResult: MessageProcessingResult;
};
export type SpyResultOutput<MessagePayloadSchemas extends object> = {
    message: MessagePayloadSchemas;
    processingResult: MessageProcessingResult;
};
export declare function isHandlerSpy<T extends object>(value: unknown): value is HandlerSpy<T>;
export type PublicHandlerSpy<MessagePayloadSchemas extends object> = Omit<HandlerSpy<MessagePayloadSchemas>, 'addProcessedMessage'>;
type DeepPartial<T> = T extends Function ? T : T extends object ? {
    [P in keyof T]?: T[P] extends Array<infer U> ? Array<DeepPartial<U>> : T[P] extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : DeepPartial<T[P]>;
} : T;
export declare class HandlerSpy<MessagePayloadSchemas extends object> {
    name: string;
    private readonly messageBuffer;
    private readonly messageIdField;
    private readonly messageTypeField;
    private readonly spyPromises;
    constructor(params?: HandlerSpyParams);
    private messageMatchesFilter;
    waitForMessageWithId<T extends MessagePayloadSchemas>(id: string, status?: MessageProcessingResultStatus): Promise<SpyResultOutput<T>>;
    checkForMessage<T extends MessagePayloadSchemas>(expectedFields: DeepPartial<T>, status?: MessageProcessingResultStatus): SpyResultOutput<T> | undefined;
    waitForMessage<T extends MessagePayloadSchemas>(expectedFields: DeepPartial<T>, status?: MessageProcessingResultStatus): Promise<SpyResultOutput<T>>;
    clear(): void;
    addProcessedMessage(processingResult: SpyResultInput<MessagePayloadSchemas>, messageId?: string): void;
}
export declare function resolveHandlerSpy<T extends object>(queueOptions: {
    handlerSpy?: HandlerSpy<object> | HandlerSpyParams | boolean;
}): HandlerSpy<T> | undefined;
export {};
