import { EventEmitter } from "node:events";
export interface ConsumerConfig {
    hasDeadQueue: boolean;
    maxReceivedMessages: number;
    continuouslyPolling: boolean;
    timeoutAfterEndingPollingInMilliseconds: number;
}
export declare enum Events {
    STOP = "stop",
    DEAD = "dead",
    CATCH = "catch",
    FINISH = "finish",
    PROCESS = "process"
}
export type ProcessHook<T> = (data: {
    messages: T[];
    scalingId: string;
}) => Promise<void>;
export declare abstract class Consumer<MessagesType> extends EventEmitter {
    private readonly config;
    private stopedProcess;
    private processToStop;
    private needStopProcess;
    private stopPromiseResolver;
    constructor(config: ConsumerConfig);
    protected abstract getMessages(): Promise<MessagesType[]>;
    protected abstract deleteMessages(messages: MessagesType[]): Promise<void>;
    protected abstract markAsDeadMessages(messages: MessagesType[]): Promise<void>;
    finish(scalingId: string, messages: MessagesType[]): void;
    dead(scalingId: string, messages: MessagesType[]): void;
    stop(): Promise<unknown>;
    catch(err: Error): Promise<void>;
    process(hook: ProcessHook<MessagesType>): void;
    poll(amount?: number): Promise<void>;
    private considerStopedProcess;
    private scalablePolling;
}
