@vpriem/kafka-broker
Version:
Easily compose and manage your kafka resources in one place
139 lines • 7.33 kB
TypeScript
/// <reference types="node" />
import { CompressionTypes, ConnectEvent, ConsumerCommitOffsetsEvent, ConsumerConfig as KafkaConsumerConfig, ConsumerCrashEvent, ConsumerEndBatchProcessEvent, ConsumerFetchEvent, ConsumerFetchStartEvent, ConsumerGroupJoinEvent, ConsumerHeartbeatEvent, ConsumerRebalancingEvent, ConsumerReceivedUnsubcribedTopicsEvent, ConsumerRunConfig, ConsumerStartBatchProcessEvent, ConsumerSubscribeTopic, DisconnectEvent, EachMessagePayload, InstrumentationEvent, KafkaConfig, Message, ProducerBatch, ProducerConfig as KafkaProducerConfig, ProducerRecord, RecordMetadata, RequestEvent, RequestQueueSizeEvent, RequestTimeoutEvent } from 'kafkajs';
import { SchemaRegistryAPIClientArgs } from '@kafkajs/confluent-schema-registry/dist/api';
import { SchemaRegistryAPIClientOptions } from '@kafkajs/confluent-schema-registry/dist/@types';
import { SchemaRegistry, SchemaType, COMPATIBILITY } from '@kafkajs/confluent-schema-registry';
export type { logCreator, logLevel } from 'kafkajs';
export { CompressionTypes };
export interface BatchConfig {
size: number;
lingerMs: number;
acks?: -1 | 0 | 1;
timeout?: number;
compression?: CompressionTypes;
}
export interface ProducerConfig extends KafkaProducerConfig {
batch?: BatchConfig;
}
export type MessageConfig = Omit<Message, 'value'>;
export interface SchemaId {
id: number;
}
export interface SchemaSubject {
subject: string;
version: 'latest' | number;
}
export interface PublicationConfig {
producer?: string;
topic: string | string[];
config?: Omit<ProducerRecord, 'topic' | 'messages'>;
messageConfig?: MessageConfig;
schema?: number | string | SchemaId | SchemaSubject;
}
export type MessageValue = Buffer | string | null | object;
export interface PublishMessage<V = MessageValue> extends Omit<Message, 'value'> {
value: V;
}
export interface ConsumerConfig extends Omit<KafkaConsumerConfig, 'groupId'> {
groupId?: string;
}
export type ConsumePayload = EachMessagePayload;
export type PublishResult = RecordMetadata;
export type Publish = {
<V = MessageValue>(name: string, messages: PublishMessage<V>[]): Promise<PublishResult[] | null>;
<V = MessageValue>(name: string, message: PublishMessage<V>): Promise<PublishResult[] | null>;
};
export interface PublisherInterface {
publish: Publish;
}
export type Handler<V = MessageValue> = (value: V, payload: ConsumePayload, publish: Publish) => Promise<void>;
export interface TopicConfig extends ConsumerSubscribeTopic {
alias?: string;
handler?: Handler;
}
export type RunConfig = Omit<ConsumerRunConfig, 'eachBatch' | 'eachMessage'>;
export declare enum ContentTypes {
BUFFER = "application/octet-stream",
JSON = "application/json",
SCHEMA_REGISTRY = "application/schema-registry",
TEXT = "text/plain"
}
export interface SubscriptionConfig {
consumer?: ConsumerConfig;
topics: Array<string | TopicConfig>;
runConfig?: RunConfig;
handler?: Handler;
contentType?: ContentTypes | string;
deadLetter?: string;
parallelism?: 'by-partition-key' | 'all-at-once';
}
export type ProducerMap = Record<string, ProducerConfig>;
export type PublicationMap = Record<string, string | string[] | PublicationConfig>;
export type SubscriptionMap = Record<string, string | SubscriptionConfig['topics'] | SubscriptionConfig>;
export { SchemaRegistry, SchemaType, COMPATIBILITY };
export type SchemaRegistryArgs = SchemaRegistryAPIClientArgs;
export type SchemaRegistryOptions = SchemaRegistryAPIClientOptions;
export interface SchemaRegistryConfig extends SchemaRegistryArgs {
options?: SchemaRegistryOptions;
}
export interface BrokerConfig {
namespace: string;
defaults?: {
producer?: Partial<ProducerConfig>;
consumer?: Partial<ConsumerConfig>;
};
config: KafkaConfig;
schemaRegistry?: string | SchemaRegistryConfig;
producers?: ProducerMap;
publications?: PublicationMap;
subscriptions?: SubscriptionMap;
}
export interface BrokerContainerConfig {
namespace: string;
defaults?: {
config?: Partial<KafkaConfig>;
producer?: Partial<ProducerConfig>;
consumer?: Partial<ConsumerConfig>;
};
schemaRegistry?: string | SchemaRegistryArgs | SchemaRegistryConfig;
brokers: Record<string, Omit<BrokerConfig, 'namespace' | 'schemaRegistry'>>;
}
export interface SubscriptionInterface {
on<V = MessageValue>(event: 'message' | `message.${string}`, listener: Handler<V>): this;
on(event: 'error', listener: (error: Error) => void): this;
once(event: 'error', listener: (error: Error) => void): this;
off<V = MessageValue>(event: 'message' | `message.${string}`, listener: Handler<V>): this;
off(event: 'error', listener: (error: Error) => void): this;
run(): Promise<this>;
}
export interface BrokerInterface extends PublisherInterface {
on(event: 'error', listener: (error: Error) => void): this;
on(event: 'producer.connect', listener: (event: ConnectEvent) => void): this;
on(event: 'producer.disconnect', listener: (event: DisconnectEvent) => void): this;
on(event: 'producer.network.request', listener: (event: RequestEvent) => void): this;
on(event: 'producer.network.request_timeout', listener: (event: RequestTimeoutEvent) => void): this;
on(event: 'producer.network.request_queue_size', listener: (event: RequestQueueSizeEvent) => void): this;
on(event: 'producer.batch.start', listener: (event: ProducerBatch) => void): this;
on(event: 'consumer.heartbeat', listener: (event: ConsumerHeartbeatEvent) => void): this;
on(event: 'consumer.commit_offsets', listener: (event: ConsumerCommitOffsetsEvent) => void): this;
on(event: 'consumer.group_join', listener: (event: ConsumerGroupJoinEvent) => void): this;
on(event: 'consumer.fetch_start', listener: (event: ConsumerFetchStartEvent) => void): this;
on(event: 'consumer.fetch', listener: (event: ConsumerFetchEvent) => void): this;
on(event: 'consumer.start_batch_process', listener: (event: ConsumerStartBatchProcessEvent) => void): this;
on(event: 'consumer.end_batch_process', listener: (event: ConsumerEndBatchProcessEvent) => void): this;
on(event: 'consumer.connect', listener: (event: ConnectEvent) => void): this;
on(event: 'consumer.disconnect', listener: (event: DisconnectEvent) => void): this;
on(event: 'consumer.stop', listener: (event: InstrumentationEvent<null>) => void): this;
on(event: 'consumer.crash', listener: (event: ConsumerCrashEvent) => void): this;
on(event: 'consumer.rebalancing', listener: (event: ConsumerRebalancingEvent) => void): this;
on(event: 'consumer.received_unsubscribed_topics', listener: (event: ConsumerReceivedUnsubcribedTopicsEvent) => void): this;
on(event: 'consumer.network.request', listener: (event: RequestEvent) => void): this;
on(event: 'consumer.network.request_timeout', listener: (event: RequestTimeoutEvent) => void): this;
on(event: 'consumer.network.request_queue_size', listener: (event: RequestQueueSizeEvent) => void): this;
namespace(): string;
schemaRegistry(): SchemaRegistry | undefined;
subscription(name: string): SubscriptionInterface;
subscriptionList(): SubscriptionInterface;
shutdown(): Promise<void>;
}
//# sourceMappingURL=types.d.ts.map