///
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 {};