/// <reference types="node" />
import { Kafka, Consumer, KafkaMessage, ConsumerConfig } from 'kafkajs';
import pino from 'pino';
import TypedEmitter from 'typed-emitter';
import { ConsumerPool } from './consumer_pool';
import { ThrottledProducer } from './throttled_producer';
import { SagaContext, Saga, ILoggerConfig, Middleware, IEffectDescription, IConsumptionEvent, SagaProducerConfig, SagaConsumerConfig } from './types';
import { TopicAdministrator } from './topic_administrator';
export declare class TopicSagaConsumer<Payload, Context extends Record<string, any> = Record<string, any>> {
    eventEmitter: TypedEmitter<{
        comitted_offsets: (...args: any[]) => void;
        started_saga: (...args: any[]) => void;
        completed_saga: (...args: any[]) => void;
        consumed_message: (consumptionEvent: IConsumptionEvent<Payload>) => void;
    }>;
    protected consumer: Consumer;
    protected saga: Saga<Payload, SagaContext<Context>>;
    protected topic: string;
    protected getContext: (message: KafkaMessage) => Promise<Context>;
    protected logger: ReturnType<typeof pino>;
    protected middlewares: Array<Middleware<IEffectDescription, SagaContext<Context>>>;
    protected consumerConfig: ConsumerConfig;
    protected producerConfig: SagaProducerConfig;
    protected consumptionTimeoutMs: number;
    protected topicAdminstrator: TopicAdministrator;
    protected consumerPool: ConsumerPool;
    protected throttledProducer: ThrottledProducer;
    protected backgroundHeartbeat?: NodeJS.Timeout;
    constructor({ kafka, topic, saga, getContext, loggerConfig, middlewares, consumerConfig, producerConfig, topicAdministrator }: {
        kafka: Kafka;
        topic: string;
        saga: Saga<Payload, SagaContext<Context>>;
        consumerConfig?: Partial<SagaConsumerConfig>;
        producerConfig?: Partial<SagaProducerConfig>;
        getContext?: (message: KafkaMessage) => Promise<Context>;
        topicAdministrator?: TopicAdministrator;
        loggerConfig?: ILoggerConfig;
        middlewares?: Array<Middleware<IEffectDescription, SagaContext<Context>>>;
    });
    /**
     * Catching and crashing is left to consumers of this class
     * so that they can log as they see fit.
     */
    run(): Promise<void>;
    disconnect(): Promise<void>;
    private eachMessage;
}
