import type { IHeaders, ITopicConfig } from "kafkajs";
import type { KafkaTopicName, KafkaMessageKey } from "../libs/branded-types/kafka/index.js";
import type { KTTopicPayloadParser } from "../libs/helpers/default-data-parser.js";
export type KTTopicSettings = ITopicConfig & {
    topic: KafkaTopicName;
    batchMessageSizeToConsume: number;
    numPartitions: number;
    createDLQ: boolean;
};
export type KTTopicPayload = {
    topicName: KafkaTopicName;
    message: string;
    messageKey: KafkaMessageKey;
};
type KTTopicMeta = {
    meta: IHeaders & {
        traceId?: string;
    };
};
export type KTTopicPayloadWithMeta = KTTopicPayload & KTTopicMeta;
export type KTTopicEvent<Payload extends object> = {
    (payload: Payload, { messageKey, meta }: KTTopicMeta & {
        messageKey: KafkaMessageKey;
    }): KTTopicPayloadWithMeta;
    topicSettings: KTTopicSettings;
    decode: KTTopicPayloadParser<Payload>['decode'];
};
export type KTPayloadFromTopic<T> = T extends KTTopicEvent<infer P> ? P : never;
export type DLQPayload<T> = {
    originalTopic: KafkaTopicName;
    originalPartition: number;
    originalOffset: string | undefined;
    key: KafkaMessageKey | null;
    value: T;
    errorMessage: string;
    failedAt: number;
};
export declare const KTTopic: <Payload extends object>(_settings: KTTopicSettings, _validatorFn?: KTTopicPayloadParser<Payload>) => KTTopicEvent<Payload>;
export declare const DLQKTTopic: <Payload extends object>(settings: KTTopicSettings, validatorFn?: KTTopicPayloadParser<DLQPayload<Payload>>) => KTTopicEvent<DLQPayload<Payload>>;
export declare const CreateKTTopic: <Payload extends object>(settings: KTTopicSettings, validatorFn?: KTTopicPayloadParser<Payload>) => {
    BaseTopic: KTTopicEvent<Payload>;
    DLQTopic: KTTopicEvent<DLQPayload<Payload>> | null;
};
export {};
