///
import { Cluster, Redis, RedisOptions } from 'ioredis';
import { PubSubEngine } from 'graphql-subscriptions';
type RedisClient = Redis | Cluster;
type OnMessage = (message: T) => void;
type DeserializerContext = {
channel: string;
pattern?: string;
};
export interface PubSubRedisOptions {
connection?: RedisOptions | string;
triggerTransform?: TriggerTransform;
connectionListener?: (err: Error) => void;
publisher?: RedisClient;
subscriber?: RedisClient;
reviver?: Reviver;
serializer?: Serializer;
deserializer?: Deserializer;
messageEventName?: string;
pmessageEventName?: string;
}
export declare class RedisPubSub implements PubSubEngine {
constructor(options?: PubSubRedisOptions);
publish(trigger: string, payload: T): Promise;
subscribe(trigger: string, onMessage: OnMessage, options?: unknown): Promise;
unsubscribe(subId: number): void;
asyncIterator(triggers: string | string[], options?: unknown): AsyncIterator;
getSubscriber(): RedisClient;
getPublisher(): RedisClient;
close(): Promise<'OK'[]>;
private readonly serializer?;
private readonly deserializer?;
private readonly triggerTransform;
private readonly redisSubscriber;
private readonly redisPublisher;
private readonly reviver;
private readonly subscriptionMap;
private readonly subsRefsMap;
private readonly subsPendingRefsMap;
private currentSubscriptionId;
private onMessage;
}
export type Path = Array;
export type Trigger = string | Path;
export type TriggerTransform = (trigger: Trigger, channelOptions?: unknown) => string;
export type Reviver = (key: any, value: any) => any;
export type Serializer = (source: any) => string;
export type Deserializer = (source: string | Buffer, context: DeserializerContext) => any;
export {};