@sailboat-computer/event-bus
Version:
Standardized event bus for sailboat computer v3 with resilience features and offline capabilities
137 lines • 3.25 kB
TypeScript
/**
* Redis adapter for the event bus
* Uses Redis Streams for event persistence and consumer groups for event distribution
*/
import { RedisAdapterConfig, EventHandler, EventEnvelope, Subscription } from '../types';
import { BaseAdapter } from './base-adapter';
/**
* Redis adapter for the event bus
*/
export declare class RedisAdapter extends BaseAdapter {
/**
* Redis client
*/
private client;
/**
* Consumer group name
*/
private consumerGroup;
/**
* Consumer name
*/
private consumerName;
/**
* Maximum batch size for event processing
*/
private maxBatchSize;
/**
* Polling interval in milliseconds
*/
private pollInterval;
/**
* Polling intervals by event type
*/
private pollingIntervals;
/**
* Reconnection options
*/
private reconnectOptions;
/**
* Initialize the adapter
*
* @param config - Redis adapter configuration
*/
initialize(config: RedisAdapterConfig): Promise<void>;
/**
* Shutdown the adapter
*/
shutdown(): Promise<void>;
/**
* Publish an event
*
* @param event - Event envelope
* @returns Event ID
*/
publish<T>(event: EventEnvelope): Promise<string>;
/**
* Subscribe to an event
*
* @param eventType - Event type
* @param handler - Event handler
* @returns Subscription
*/
subscribe<T>(eventType: string, handler: EventHandler<T>): Promise<Subscription>;
/**
* Acknowledge an event
*
* @param eventId - Event ID
* @param eventType - Event type
*/
acknowledgeEvent(eventId: string, eventType: string): Promise<void>;
/**
* Create a consumer group for a stream
*
* @param streamName - Stream name
*/
private createConsumerGroup;
/**
* Start polling for events
*
* @param streamName - Stream name
*/
private startPolling;
/**
* Poll events from a stream
*
* @param streamName - Stream name
*/
private pollEvents;
/**
* Process events from a stream
*
* @param streamName - Stream name
* @param events - Events
*/
private processEvents;
/**
* Convert an event to a Redis stream entry
*
* @param event - Event envelope
* @returns Redis stream entry
*/
private eventToStreamEntry;
/**
* Convert a Redis stream entry to an event
*
* @param eventId - Event ID
* @param fields - Stream entry fields
* @param eventType - Event type
* @returns Event envelope
*/
private streamEntryToEvent;
/**
* Get stream name from event type
*
* @param eventType - Event type
* @returns Stream name
*/
private getStreamName;
/**
* Get event type from stream name
*
* @param streamName - Stream name
* @returns Event type
*/
private getEventTypeFromStream;
/**
* Wait for Redis connection
*/
private waitForConnection;
}
/**
* Create a new Redis adapter
*
* @returns Redis adapter
*/
export declare function createRedisAdapter(): RedisAdapter;
//# sourceMappingURL=redis-adapter.d.ts.map