@awesomeniko/kafka-trail
Version:
A Node.js library for managing message queue with Kafka
45 lines (44 loc) • 1.84 kB
TypeScript
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 {};