@aeolun/graphql-redis-subscriptions
Version:
A graphql-subscriptions PubSub Engine using redis
49 lines (48 loc) • 1.87 kB
TypeScript
/// <reference types="node" />
import { Cluster, Redis, RedisOptions } from 'ioredis';
import { PubSubEngine } from 'graphql-subscriptions-continued';
type RedisClient = Redis | Cluster;
type OnMessage<T> = (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 extends PubSubEngine {
constructor(options?: PubSubRedisOptions);
publish<T>(trigger: string, payload: T): Promise<void>;
subscribe<T = any>(trigger: string, onMessage: OnMessage<T>, options?: unknown): Promise<number>;
unsubscribe(subId: number): void;
asyncIterator<T>(triggers: string | string[], options?: unknown): any;
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 currentSubscriptionId;
private onMessage;
}
export type Path = Array<string | number>;
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 {};