///
import COMMANDS from './commands';
import { RedisCommand, RedisCommandArgument, RedisCommandArguments, RedisCommandRawReply, RedisCommandReply, RedisModules, RedisPlugins, RedisScript, RedisScripts } from '../commands';
import { ClientCommandOptions, RedisClientCommandSignature, RedisClientOptions, WithModules, WithScripts } from '../client';
import { ClusterNode, NodeAddressMap } from './cluster-slots';
import { EventEmitter } from 'events';
import { RedisClusterMultiCommandType } from './multi-command';
export declare type RedisClusterClientOptions = Omit;
export interface RedisClusterOptions, S extends RedisScripts = Record> extends RedisPlugins {
rootNodes: Array;
defaults?: Partial;
useReplicas?: boolean;
maxCommandRedirections?: number;
nodeAddressMap?: NodeAddressMap;
}
declare type WithCommands = {
[P in keyof typeof COMMANDS]: RedisClientCommandSignature<(typeof COMMANDS)[P]>;
};
export declare type RedisClusterType, S extends RedisScripts = Record> = RedisCluster & WithCommands & WithModules & WithScripts;
export default class RedisCluster extends EventEmitter {
#private;
static extractFirstKey(command: RedisCommand, originalArgs: Array, redisArgs: RedisCommandArguments): RedisCommandArgument | undefined;
static create(options?: RedisClusterOptions): RedisClusterType;
constructor(options: RedisClusterOptions);
duplicate(overrides?: Partial>): RedisClusterType;
connect(): Promise;
commandsExecutor(command: RedisCommand, args: Array): Promise>;
sendCommand(firstKey: RedisCommandArgument | undefined, isReadonly: boolean | undefined, args: RedisCommandArguments, options?: ClientCommandOptions): Promise;
scriptsExecutor(script: RedisScript, args: Array): Promise>;
executeScript(script: RedisScript, originalArgs: Array, redisArgs: RedisCommandArguments, options?: ClientCommandOptions): Promise>;
multi(routing?: RedisCommandArgument): RedisClusterMultiCommandType;
getMasters(): Array>;
getSlotMaster(slot: number): ClusterNode;
quit(): Promise;
disconnect(): Promise;
}
export {};