import type { Logger } from "pino";
import type { KTHandler } from "../kafka/consumer-handler.js";
import type { KafkaBrokerConfig, KafkaLogger } from "../kafka/kafka-broker.js";
import type { KTKafkaConsumerConfig } from "../kafka/kafka-consumer.js";
import { KTKafkaConsumer } from "../kafka/kafka-consumer.js";
import { KTKafkaProducer } from "../kafka/kafka-producer.js";
import type { KTTopicBatchPayload } from "../kafka/topic-batch.js";
import { type KTTopicEvent, type KTTopicPayloadWithMeta } from "../kafka/topic.js";
import { KafkaTopicName } from "../libs/branded-types/kafka/index.js";
type KTOtelApi = Pick<typeof import("@opentelemetry/api"), "context" | "trace" | "SpanKind" | "SpanStatusCode">;
declare class KTMessageQueue<Ctx extends object> {
    #private;
    constructor(params?: {
        ctx: () => Ctx & {
            logger?: Logger;
        };
        tracingSettings?: {
            otel?: KTOtelApi;
            addPayloadToTrace: boolean;
        };
    });
    getConsumer(): KTKafkaConsumer | undefined;
    getProducer(): KTKafkaProducer | undefined;
    getAdmin(): import("kafkajs").Admin | undefined;
    initProducer(params: KafkaBrokerConfig): Promise<void>;
    initConsumer(params: KTKafkaConsumerConfig): Promise<void>;
    destroyAll(): Promise<void>;
    destroyProducer(): Promise<void>;
    destroyConsumer(): Promise<void>;
    initTopics<T extends object>(topicEvents: KTTopicEvent<T>[]): Promise<void>;
    getRegisteredHandler(topic: KafkaTopicName): KTHandler<any, Ctx & KafkaLogger> | undefined;
    registerHandlers<T extends object>(mqHandlers: KTHandler<T, Ctx & KafkaLogger>[]): void;
    publishSingleMessage(topic: KTTopicPayloadWithMeta): Promise<void>;
    publishBatchMessages(topic: KTTopicBatchPayload): Promise<void>;
}
export { KTMessageQueue };
