import { RedisTransportConfig, TransportEncoder, Transport, Serializable, SubscribeHandler } from '../types/main.js';
import 'ioredis';
import 'mqtt';

/**
 * @boringnode/bus
 *
 * @license MIT
 * @copyright BoringNode
 */

declare function redis(config: RedisTransportConfig, encoder?: TransportEncoder): () => RedisTransport;
declare class RedisTransport implements Transport {
    #private;
    constructor(path: string, encoder?: TransportEncoder);
    constructor(options: RedisTransportConfig, encoder?: TransportEncoder);
    setId(id: string): Transport;
    disconnect(): Promise<void>;
    publish(channel: string, message: Serializable): Promise<void>;
    subscribe<T extends Serializable>(channel: string, handler: SubscribeHandler<T>): Promise<void>;
    onReconnect(callback: () => void): void;
    unsubscribe(channel: string): Promise<void>;
}

export { RedisTransport, redis };
