/// import COMMANDS from './commands'; import { RedisCommand, RedisCommandArgument, RedisCommandArguments, RedisCommandRawReply, RedisCommandReply, RedisFunctions, RedisModules, RedisExtensions, RedisScript, RedisScripts, RedisCommandSignature, RedisFunction } from '../commands'; import { ClientCommandOptions, RedisClientOptions, RedisClientType, WithFunctions, WithModules, WithScripts } from '../client'; import { NodeAddressMap, ShardNode } from './cluster-slots'; import { EventEmitter } from 'events'; import { RedisClusterMultiCommandType } from './multi-command'; import { PubSubListener } from '../client/pub-sub'; export type RedisClusterClientOptions = Omit; export interface RedisClusterOptions, F extends RedisFunctions = Record, S extends RedisScripts = Record> extends RedisExtensions { /** * Should contain details for some of the cluster nodes that the client will use to discover * the "cluster topology". We recommend including details for at least 3 nodes here. */ rootNodes: Array; /** * Default values used for every client in the cluster. Use this to specify global values, * for example: ACL credentials, timeouts, TLS configuration etc. */ defaults?: Partial; /** * When `true`, `.connect()` will only discover the cluster topology, without actually connecting to all the nodes. * Useful for short-term or PubSub-only connections. */ minimizeConnections?: boolean; /** * When `true`, distribute load by executing readonly commands (such as `GET`, `GEOSEARCH`, etc.) across all cluster nodes. When `false`, only use master nodes. */ useReplicas?: boolean; /** * The maximum number of times a command will be redirected due to `MOVED` or `ASK` errors. */ maxCommandRedirections?: number; /** * Mapping between the addresses in the cluster (see `CLUSTER SHARDS`) and the addresses the client should connect to * Useful when the cluster is running on another network * */ nodeAddressMap?: NodeAddressMap; } type WithCommands = { [P in keyof typeof COMMANDS]: RedisCommandSignature<(typeof COMMANDS)[P]>; }; export type RedisClusterType, F extends RedisFunctions = Record, S extends RedisScripts = Record> = RedisCluster & WithCommands & WithModules & WithFunctions & WithScripts; export default class RedisCluster extends EventEmitter { #private; static extractFirstKey(command: RedisCommand, originalArgs: Array, redisArgs: RedisCommandArguments): RedisCommandArgument | undefined; static create(options?: RedisClusterOptions): RedisClusterType; get slots(): import("./cluster-slots").Shard[]; get shards(): import("./cluster-slots").Shard[]; get masters(): ShardNode[]; get replicas(): ShardNode[]; get nodeByAddress(): Map | import("./cluster-slots").MasterNode>; get pubSubNode(): Required> | undefined; get isOpen(): boolean; constructor(options: RedisClusterOptions); duplicate(overrides?: Partial>): RedisClusterType; connect(): Promise; commandsExecutor(command: C, args: Array): Promise>; sendCommand(firstKey: RedisCommandArgument | undefined, isReadonly: boolean | undefined, args: RedisCommandArguments, options?: ClientCommandOptions): Promise; functionsExecutor(fn: F, args: Array, name: string): Promise>; executeFunction(name: string, fn: RedisFunction, originalArgs: Array, redisArgs: RedisCommandArguments, options?: ClientCommandOptions): Promise; scriptsExecutor(script: S, args: Array): Promise>; executeScript(script: RedisScript, originalArgs: Array, redisArgs: RedisCommandArguments, options?: ClientCommandOptions): Promise; MULTI(routing?: RedisCommandArgument): RedisClusterMultiCommandType; multi: (routing?: RedisCommandArgument) => RedisClusterMultiCommandType; SUBSCRIBE(channels: string | Array, listener: PubSubListener, bufferMode?: T): Promise; subscribe: (channels: string | Array, listener: PubSubListener, bufferMode?: T | undefined) => Promise; UNSUBSCRIBE(channels?: string | Array, listener?: PubSubListener, bufferMode?: T): Promise; unsubscribe: (channels?: string | Array, listener?: PubSubListener, bufferMode?: T | undefined) => Promise; PSUBSCRIBE(patterns: string | Array, listener: PubSubListener, bufferMode?: T): Promise; pSubscribe: (patterns: string | Array, listener: PubSubListener, bufferMode?: T | undefined) => Promise; PUNSUBSCRIBE(patterns?: string | Array, listener?: PubSubListener, bufferMode?: T): Promise; pUnsubscribe: (patterns?: string | Array, listener?: PubSubListener | undefined, bufferMode?: T | undefined) => Promise; SSUBSCRIBE(channels: string | Array, listener: PubSubListener, bufferMode?: T): Promise; sSubscribe: (channels: string | Array, listener: PubSubListener, bufferMode?: T | undefined) => Promise; SUNSUBSCRIBE(channels: string | Array, listener?: PubSubListener, bufferMode?: T): Promise; sUnsubscribe: (channels: string | Array, listener?: PubSubListener | undefined, bufferMode?: T | undefined) => Promise; quit(): Promise; disconnect(): Promise; nodeClient(node: ShardNode): RedisClientType | Promise>; getRandomNode(): ShardNode; getSlotRandomNode(slot: number): ShardNode; /** * @deprecated use `.masters` instead */ getMasters(): ShardNode[]; /** * @deprecated use `.slots[]` instead */ getSlotMaster(slot: number): import("./cluster-slots").MasterNode; } export {};