@nam088/nestjs-rabbitmq
Version:
A comprehensive RabbitMQ module for NestJS with decorator-based message handling
68 lines (67 loc) • 2.26 kB
TypeScript
import type { ModuleMetadata, Type } from '@nestjs/common';
import type { ServiceDiscoveryOptions } from './service-discovery.interface';
import type { Options } from 'amqplib';
export interface ConnectionOptions {
connectionTimeout?: number;
heartbeatIntervalInSeconds?: number;
reconnectTimeInSeconds?: number;
}
export interface ExchangeConfig {
name: string;
options?: Options.AssertExchange;
type: 'direct' | 'fanout' | 'headers' | 'topic';
}
export interface PublishOptions extends Options.Publish {
appId?: string;
expiration?: number | string;
headers?: any;
messageId?: string;
priority?: number;
timestamp?: number;
type?: string;
userId?: string;
}
export interface QueueConfig {
name: string;
options?: Options.AssertQueue;
}
export interface RabbitMQModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
connectionName?: string;
inject?: any[];
useClass?: Type<RabbitMQOptionsFactory>;
useExisting?: Type<RabbitMQOptionsFactory>;
useFactory?: (...args: any[]) => Promise<RabbitMQModuleOptions> | RabbitMQModuleOptions;
}
export interface RabbitMQModuleOptions {
autoDiscover?: boolean;
autoReconnect?: boolean;
connectionName?: string;
connectionOptions?: ConnectionOptions;
exchanges?: ExchangeConfig[];
excludeProviders?: Array<string | symbol | Type>;
includeModules?: Array<string | Type>;
includeProviders?: Array<string | symbol | Type>;
logLevel?: 'debug' | 'error' | 'log' | 'none' | 'warn';
prefetchCount?: number;
queues?: QueueConfig[];
scanScope?: 'all' | 'annotated' | 'modules' | 'providers';
serviceDiscovery?: ServiceDiscoveryOptions;
uri: string;
}
export interface RabbitMQOptionsFactory {
createRabbitMQOptions: () => Promise<RabbitMQModuleOptions> | RabbitMQModuleOptions;
}
export interface RabbitSubscribeOptions {
connectionName?: string;
consumeOptions?: Options.Consume;
errorHandler?: (error: Error, message: any) => Promise<void> | void;
exchange?: string;
queue: string;
queueOptions?: Options.AssertQueue;
routingKey?: string;
rpc?: boolean;
}
export interface RpcOptions {
publishOptions?: PublishOptions;
timeout?: number;
}