/**
 * @module EventBus
 */
import { type Redis } from "ioredis";
import { type BaseEvent, type EventListenerFn, type IEventBusAdapter } from "../../../../event-bus/contracts/_module.js";
import { type ISerde } from "../../../../serde/contracts/_module.js";
/**
 *
 * IMPORT_PATH: `"@daiso-tech/core/event-bus/redis-pub-sub-event-bus-adapter"`
 * @group Adapters
 */
export type RedisPubSubEventBusAdapterSettings = {
    client: Redis;
    serde: ISerde<string>;
};
/**
 * To utilize the `RedisPubSubEventBusAdapter`, you must install the [`"ioredis"`](https://www.npmjs.com/package/ioredis) package and supply a {@link ISerde | `ISerde<string>`}, with a {@link SuperJsonSerdeAdapter | `SuperJsonSerdeAdapter `}.
 *
 * IMPORT_PATH: `"@daiso-tech/core/event-bus/redis-pub-sub-event-bus-adapter"`
 * @group Adapters
 */
export declare class RedisPubSubEventBusAdapter implements IEventBusAdapter {
    private readonly serde;
    private readonly dispatcherClient;
    private readonly listenerClient;
    private readonly eventEmitter;
    /**
     *  @example
     * ```ts
     * import { RedisPubSubEventBusAdapter } from "@daiso-tech/core/event-bus/redis-pub-sub-event-bus-adapter";
     * import { Serde } from "@daiso-tech/core/serde";
     * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/super-json-serde-adapter"
     * import Redis from "ioredis";
     *
     * const client = new Redis("YOUR_REDIS_CONNECTION_STRING");
     * const serde = new Serde(new SuperJsonSerdeAdapter());
     * const eventBusAdapter = new RedisPubSubEventBusAdapter({
     *   client,
     *   serde,
     * });
     * ```
     */
    constructor(settings: RedisPubSubEventBusAdapterSettings);
    private redisListener;
    addListener(eventName: string, listener: EventListenerFn<BaseEvent>): Promise<void>;
    removeListener(eventName: string, listener: EventListenerFn<BaseEvent>): Promise<void>;
    dispatch(eventName: string, eventData: BaseEvent): Promise<void>;
}
