import { Logger } from '@nestjs/common';
import { CustomTransportStrategy, MessageHandler, Server, Deserializer, IncomingEvent } from '@nestjs/microservices';
import { Message, ReaderConnectionConfigOptions } from 'nsqjs';
import { NSQPattern } from './pattern';
type RequeueParams = Parameters<(typeof Message.prototype)['requeue']>;
export interface TopicChannelOptions extends ReaderConnectionConfigOptions {
    requeueParams?: RequeueParams | ((message: Message, pattern: NSQPattern) => RequeueParams);
}
export interface NSQStrategyOptions {
    defaultChannelOptions?: TopicChannelOptions;
    channels?: Record<string, Record<string, TopicChannelOptions>>;
    deserializer?: Deserializer<Message, IncomingEvent>;
}
export declare class NSQStrategy extends Server implements CustomTransportStrategy {
    private readonly opts;
    protected readonly logger: Logger;
    private readonly readers;
    private readonly handlingMessagesWG;
    private readonly readersSetDeferred;
    constructor(opts: NSQStrategyOptions);
    listen(callback?: () => void): Promise<void>;
    addHandler(pattern: unknown, callback: MessageHandler, isEventHandler?: boolean, extras?: Record<string, unknown>): void;
    close(): Promise<void>;
    on<EventKey extends string = string, EventCallback extends Function = Function>(event: EventKey, callback: EventCallback): void;
    unwrap<T>(): T;
    private createOrGetReaderFor;
    private createReaderFor;
    private getOptionsByPattern;
    private handleMessage;
}
export {};
