UNPKG

@logistically/events-nestjs

Version:

NestJS integration for @logistically/events v3 - Event-driven architecture with Redis Streams

86 lines (85 loc) 2.87 kB
import { OnModuleInit, OnModuleDestroy } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { EventSystemService } from './event-system.service'; export declare class EventDiscoveryService implements OnModuleInit, OnModuleDestroy { private readonly eventSystemService; private readonly reflector; private readonly logger; private readonly metadataScanner; private consumer; private autoRegisteredServices; private discoveryQueue; private isInitialized; private discoveryTimer; private isProcessing; private retryAttempts; private readonly maxRetries; private readonly baseRetryDelay; constructor(eventSystemService: EventSystemService, reflector: Reflector); onModuleInit(): Promise<void>; onModuleDestroy(): Promise<void>; private cleanup; /** * Start discovery loop only when there are pending services * Uses event-driven approach instead of continuous polling */ private startDiscoveryLoop; /** * Stop discovery loop when no services are pending */ private stopDiscoveryLoop; /** * Process the discovery queue with optimized batching and error handling */ private processDiscoveryQueue; /** * Handle failed services with exponential backoff retry logic */ private handleFailedServices; /** * Utility method to chunk array into batches */ private chunkArray; /** * Add a service to be auto-registered when the event system is ready * This is the main entry point for automatic discovery */ addServiceForAutoRegistration(instance: any): void; /** * Manually trigger registration of all pending services * This can be called by the EventModuleScanner */ triggerRegistration(): Promise<void>; /** * Get discovery statistics */ getDiscoveryStats(): { pending: number; registered: number; queueLength: number; retryCount: number; }; private getConsumer; private initializeConsumer; /** * Register a single event handler with explicit metadata * This method is used by the EventModuleScanner for automatic discovery */ registerHandler(instance: any, methodKey: string, metadata: { eventType: string; priority?: number; async?: boolean; retry?: any; [key: string]: any; }): Promise<void>; /** * Manually register event handlers from a service instance * This method can be called by services that want to register their handlers */ registerEventHandlers(instance: any): Promise<number>; /** * Auto-register a service if it has @AutoEvents decorator * This method is called automatically by the service lifecycle */ autoRegisterService(instance: any): Promise<number>; }