UNPKG

@platformatic/kafka

Version:

Modern and performant client for Apache Kafka

101 lines (100 loc) 4.4 kB
import { type FetchRequestTopic } from '../../apis/consumer/fetch-v17.ts'; import { type FetchIsolationLevel, type GroupProtocols } from '../../apis/enumerations.ts'; import { type KafkaRecord, type Message } from '../../protocol/records.ts'; import { type BaseOptions, type ClusterMetadata, type TopicWithPartitionAndOffset } from '../base/types.ts'; import { type Deserializers } from '../serde.ts'; export interface GroupProtocolSubscription { name: string; version: number; metadata?: Buffer | string; } export interface GroupAssignment { topic: string; partitions: number[]; } export interface GroupPartitionsAssignments { memberId: string; assignments: Map<string, GroupAssignment>; } export interface ExtendedGroupProtocolSubscription extends Omit<GroupProtocolSubscription, 'name'> { topics?: string[]; memberId: string; } export type Offsets = Map<string, bigint[]>; export type OffsetsWithTimestamps = Map<string, Map<number, { offset: bigint; timestamp: bigint; }>>; export type CorruptedMessageHandler = (record: KafkaRecord, topic: string, partition: number, firstTimestamp: bigint, firstOffset: bigint, commit: Message['commit']) => boolean; export type GroupPartitionsAssigner = (current: string, members: Map<string, ExtendedGroupProtocolSubscription>, topics: Set<string>, metadata: ClusterMetadata) => GroupPartitionsAssignments[]; export declare const MessagesStreamModes: { readonly LATEST: "latest"; readonly EARLIEST: "earliest"; readonly COMMITTED: "committed"; readonly MANUAL: "manual"; }; export declare const allowedMessagesStreamModes: MessagesStreamModeValue[]; export type MessagesStreamMode = keyof typeof MessagesStreamModes; export type MessagesStreamModeValue = (typeof MessagesStreamModes)[keyof typeof MessagesStreamModes]; export declare const MessagesStreamFallbackModes: { readonly LATEST: "latest"; readonly EARLIEST: "earliest"; readonly FAIL: "fail"; }; export declare const allowedMessagesStreamFallbackModes: MessagesStreamFallbackModeValue[]; export type MessagesStreamFallbackMode = keyof typeof MessagesStreamFallbackModes; export type MessagesStreamFallbackModeValue = (typeof MessagesStreamFallbackModes)[keyof typeof MessagesStreamFallbackModes]; export interface GroupOptions { groupProtocol?: typeof GroupProtocols.CLASSIC; sessionTimeout?: number; rebalanceTimeout?: number; heartbeatInterval?: number; protocols?: GroupProtocolSubscription[]; partitionAssigner?: GroupPartitionsAssigner; } export interface ConsumerGroupOptions { groupProtocol: typeof GroupProtocols.CONSUMER; groupRemoteAssignor?: string; rebalanceTimeout?: number; } export interface ConsumeBaseOptions<Key, Value, HeaderKey, HeaderValue> { autocommit?: boolean | number; minBytes?: number; maxBytes?: number; maxWaitTime?: number; isolationLevel?: FetchIsolationLevel; deserializers?: Partial<Deserializers<Key, Value, HeaderKey, HeaderValue>>; highWaterMark?: number; } export interface StreamOptions { topics: string[]; mode?: MessagesStreamModeValue; fallbackMode?: MessagesStreamFallbackModeValue; maxFetches?: number; offsets?: TopicWithPartitionAndOffset[]; onCorruptedMessage?: CorruptedMessageHandler; } export type ConsumeOptions<Key, Value, HeaderKey, HeaderValue> = StreamOptions & ConsumeBaseOptions<Key, Value, HeaderKey, HeaderValue> & GroupOptions; export type ConsumerOptions<Key, Value, HeaderKey, HeaderValue> = BaseOptions & { groupId: string; } & (GroupOptions | ConsumerGroupOptions) & ConsumeBaseOptions<Key, Value, HeaderKey, HeaderValue>; export type FetchOptions<Key, Value, HeaderKey, HeaderValue> = Pick<ConsumeBaseOptions<Key, Value, HeaderKey, HeaderValue>, 'minBytes' | 'maxBytes' | 'maxWaitTime' | 'isolationLevel'> & { node: number; topics: FetchRequestTopic[]; }; export interface CommitOptionsPartition extends TopicWithPartitionAndOffset { leaderEpoch: number; } export interface CommitOptions { offsets: CommitOptionsPartition[]; } export interface ListCommitsOptions { topics: GroupAssignment[]; } export interface ListOffsetsOptions { topics: string[]; partitions?: Record<string, number[]>; timestamp?: bigint; isolationLevel?: FetchIsolationLevel; } export type GetLagOptions = Omit<ListOffsetsOptions, 'timestamp' | 'isolationLevel'>;