UNPKG

kafka-sagas

Version:

Build sagas that consume from a kafka topic

48 lines (47 loc) 2.37 kB
/// <reference types="node" /> import { Kafka, Consumer, KafkaMessage, ConsumerConfig } from 'kafkajs'; import pino from 'pino'; import TypedEmitter from 'typed-emitter'; import { ConsumerPool } from './consumer_pool'; import { ThrottledProducer } from './throttled_producer'; import { SagaContext, Saga, ILoggerConfig, Middleware, IEffectDescription, IConsumptionEvent, SagaProducerConfig, SagaConsumerConfig } from './types'; import { TopicAdministrator } from './topic_administrator'; export declare class TopicSagaConsumer<Payload, Context extends Record<string, any> = Record<string, any>> { eventEmitter: TypedEmitter<{ comitted_offsets: (...args: any[]) => void; started_saga: (...args: any[]) => void; completed_saga: (...args: any[]) => void; consumed_message: (consumptionEvent: IConsumptionEvent<Payload>) => void; }>; protected consumer: Consumer; protected saga: Saga<Payload, SagaContext<Context>>; protected topic: string; protected getContext: (message: KafkaMessage) => Promise<Context>; protected logger: ReturnType<typeof pino>; protected middlewares: Array<Middleware<IEffectDescription, SagaContext<Context>>>; protected consumerConfig: ConsumerConfig; protected producerConfig: SagaProducerConfig; protected consumptionTimeoutMs: number; protected topicAdminstrator: TopicAdministrator; protected consumerPool: ConsumerPool; protected throttledProducer: ThrottledProducer; protected backgroundHeartbeat?: NodeJS.Timeout; constructor({ kafka, topic, saga, getContext, loggerConfig, middlewares, consumerConfig, producerConfig, topicAdministrator }: { kafka: Kafka; topic: string; saga: Saga<Payload, SagaContext<Context>>; consumerConfig?: Partial<SagaConsumerConfig>; producerConfig?: Partial<SagaProducerConfig>; getContext?: (message: KafkaMessage) => Promise<Context>; topicAdministrator?: TopicAdministrator; loggerConfig?: ILoggerConfig; middlewares?: Array<Middleware<IEffectDescription, SagaContext<Context>>>; }); /** * Catching and crashing is left to consumers of this class * so that they can log as they see fit. */ run(): Promise<void>; disconnect(): Promise<void>; private eachMessage; }