/// import { RedisClientType } from '../client'; import { RedisClusterOptions } from '.'; import { RedisCommandArgument, RedisFunctions, RedisModules, RedisScripts } from '../commands'; import { ChannelListeners } from '../client/pub-sub'; import { EventEmitter } from 'stream'; interface NodeAddress { host: string; port: number; } export type NodeAddressMap = { [address: string]: NodeAddress; } | ((address: string) => NodeAddress | undefined); type ValueOrPromise = T | Promise; type ClientOrPromise = ValueOrPromise>; export interface Node { address: string; client?: ClientOrPromise; } export interface ShardNode extends Node { id: string; host: string; port: number; readonly: boolean; } export interface MasterNode extends ShardNode { pubSubClient?: ClientOrPromise; } export interface Shard { master: MasterNode; replicas?: Array>; nodesIterator?: IterableIterator>; } export type PubSubNode = Required>; export type OnShardedChannelMovedError = (err: unknown, channel: string, listeners?: ChannelListeners) => void; export default class RedisClusterSlots { #private; slots: Shard[]; shards: Shard[]; masters: ShardNode[]; replicas: ShardNode[]; readonly nodeByAddress: Map | MasterNode>; pubSubNode?: PubSubNode; get isOpen(): boolean; constructor(options: RedisClusterOptions, emit: EventEmitter['emit']); connect(): Promise; nodeClient(node: ShardNode): ClientOrPromise; rediscover(startWith: RedisClientType): Promise; quit(): Promise; disconnect(): Promise; getClient(firstKey: RedisCommandArgument | undefined, isReadonly: boolean | undefined): ClientOrPromise; getRandomNode(): ShardNode; getSlotRandomNode(slotNumber: number): ShardNode; getMasterByAddress(address: string): ClientOrPromise | undefined; getPubSubClient(): ClientOrPromise; executeUnsubscribeCommand(unsubscribe: (client: RedisClientType) => Promise): Promise; getShardedPubSubClient(channel: string): ClientOrPromise; executeShardedUnsubscribeCommand(channel: string, unsubscribe: (client: RedisClientType) => Promise): Promise; } export {};