@initbit/nestjs-jetstream
Version:
NestJS custom NATS JetStream transport
56 lines (55 loc) • 2.53 kB
TypeScript
import { CustomTransportStrategy, MessageHandler, Server } from '@nestjs/microservices';
import { LoggerService } from '@nestjs/common';
import { AckPolicy, Codec, ConsumerOptsBuilder, DeliverPolicy, JetStreamClient, JetStreamManager, JsMsg, Msg, NatsConnection } from 'nats';
import { ConsumerOptions, StreamOptions } from './interfaces/nats-jetstream-options.interface';
import { JetStreamMapper } from './jetstream.types';
export declare class JetStream extends Server implements CustomTransportStrategy {
private readonly options;
protected readonly logger: LoggerService;
protected nc?: NatsConnection;
protected js?: JetStreamClient;
protected jsm?: JetStreamManager;
protected codec: Codec<unknown>;
protected readonly durableName: string;
private eventHandlers;
private subjectToHandlerMapping;
constructor(options: {
servers: string | string[];
streamName?: string;
durableName?: string;
queue?: string;
consumer?: (consumerOptions: ConsumerOptsBuilder) => void;
deliverPolicy?: DeliverPolicy;
ackPolicy?: AckPolicy;
ackWait?: number;
filterSubject?: string;
filterSubjects?: string[];
logger?: LoggerService;
stream?: StreamOptions;
consumerOptions?: ConsumerOptions;
mapper?: JetStreamMapper;
defaultMapper?: 'subject' | 'envelope';
});
listen(callback: () => void): Promise<void>;
close(): Promise<void>;
on(event: string, callback: Function): void;
unwrap<T>(value?: T): T;
/**
* Override addHandler to store subject-to-handler mapping when envelope mapping is used
*/
addHandler(pattern: any, callback: MessageHandler, isEventHandler?: boolean, extras?: Record<string, any>): void;
/**
* Get the subject-to-handler mapping for debugging and testing purposes
* @returns Map of subject patterns to handler keys
*/
getSubjectToHandlerMapping(): Map<string, string>;
ensureStream(jsm: JetStreamManager): Promise<void>;
ensureConsumer(jsm: JetStreamManager): Promise<void>;
subscribeToTopics(js: JetStreamClient): void;
handleJetStreamMessage(message: JsMsg): Promise<void>;
private invokeHandler;
handleNatsMessage(message: Msg, handler: MessageHandler): Promise<void>;
subscribeToEventPatterns(client: JetStreamClient): Promise<void>;
subscribeToMessagePatterns(connection: NatsConnection): void;
handleStatusUpdates(connection: NatsConnection): Promise<void>;
}