broker-lib
Version:
Multi-Broker Message Bus with Multi-Topic Support
100 lines • 4.19 kB
TypeScript
import { BrokerConfig, BrokerType } from './config';
import { MessageHandler, PublishOptions, SubscribeOptions } from './types';
import { EventEmitter } from 'events';
interface ReconnectionConfig {
enabled: boolean;
maxAttempts: number;
initialDelay: number;
maxDelay: number;
backoffMultiplier: number;
}
export interface SubscriptionOptions {
topic: string;
fromBeginning?: boolean;
qos?: number;
autoAck?: boolean;
}
export interface SubscriptionCallback {
(message: any): void;
}
export interface TopicHandlerMapping {
topic: string;
handler: SubscriptionCallback;
options?: Omit<SubscriptionOptions, 'topic'>;
}
export interface BrokerEnvConfig {
BROKER_TYPE?: string;
BROKER_CLIENT_ID?: string;
MQTT_URL?: string;
KAFKA_BROKERS?: string;
KAFKA_GROUP_ID?: string;
PROJECT_ID?: string;
GCP_KEY_FILENAME?: string;
[key: string]: string | undefined;
}
export declare function createBrokerConfigFromEnv(env: BrokerEnvConfig, defaultClientId?: string): BrokerConfig;
export declare function createSubscriptionManagerFromEnv(env: BrokerEnvConfig, defaultClientId?: string, logger?: Console): SubscriptionManager;
export declare function createBrokerManagerFromEnv(env: BrokerEnvConfig, defaultClientId?: string): BrokerManager;
export declare function createBrokerConfigFromAppEnv(defaultClientId?: string): BrokerConfig;
export declare function createSubscriptionManagerFromAppEnv(defaultClientId?: string, logger?: Console): SubscriptionManager;
export declare function createBrokerManagerFromAppEnv(defaultClientId?: string): BrokerManager;
export declare class SubscriptionManager extends EventEmitter {
private brokerManager;
private logger;
private topicHandlers;
constructor(brokerConfig: BrokerConfig, logger?: Console);
connect(): Promise<void>;
disconnect(): Promise<void>;
subscribe(options: SubscriptionOptions, callback: SubscriptionCallback): Promise<void>;
subscribeMultiple(mappings: TopicHandlerMapping[]): Promise<void>;
subscribeToTopics(topics: string[], callback: SubscriptionCallback, options?: Omit<SubscriptionOptions, 'topic'>): Promise<void>;
publish(topic: string, message: any, options?: PublishOptions): Promise<void>;
private ensureConnection;
getSubscribedTopics(): string[];
getHandler(topic: string): SubscriptionCallback | undefined;
removeHandler(topic: string): boolean;
clearHandlers(): void;
getBrokerManager(): BrokerManager;
isConnected(): boolean;
getConnectionState(): 'disconnected' | 'connecting' | 'connected' | 'error';
getReconnectAttempts(): number;
setReconnectionConfig(config: Partial<ReconnectionConfig>): void;
getBrokerType(): BrokerType;
startPolling(topics: string[], intervalMs?: number): Promise<void>;
stopPolling(): Promise<void>;
isPolling(): boolean;
}
export declare class BrokerManager extends EventEmitter {
private broker;
private config;
private messageHandler?;
private connectionState;
private reconnectionConfig;
private reconnectAttempts;
private reconnectTimeout?;
private isReconnecting;
private pendingOperations;
constructor(config: BrokerConfig);
private createBroker;
private handleDisconnection;
private handleReconnectFailure;
private scheduleReconnect;
private attemptReconnect;
private processPendingOperations;
private executeWithReconnection;
private isConnectionError;
connect(): Promise<void>;
publish(topic: string, message: string | Buffer, options?: PublishOptions): Promise<void>;
subscribe(topics: string[], handler?: MessageHandler, options?: SubscribeOptions): Promise<void>;
disconnect(): Promise<void>;
reconnect(): Promise<void>;
setReconnectionConfig(config: Partial<ReconnectionConfig>): void;
isConnected(): boolean;
getConnectionState(): 'disconnected' | 'connecting' | 'connected' | 'error';
getReconnectAttempts(): number;
getBrokerType(): BrokerType;
setMessageHandler(handler: MessageHandler): void;
}
export * from './types';
export * from './config';
//# sourceMappingURL=index.d.ts.map