///
import COMMANDS from "./commands";
import { ValkeyCommand, ValkeyCommandArgument, ValkeyCommandArguments, ValkeyCommandRawReply, ValkeyCommandReply, ValkeyFunctions, ValkeyModules, ValkeyExtensions, ValkeyScript, ValkeyScripts, ValkeyCommandSignature, ValkeyFunction } from "../commands";
import { ClientCommandOptions, ValkeyClientOptions, ValkeyClientType, WithFunctions, WithModules, WithScripts } from "../client";
import { NodeAddressMap, ShardNode } from "./cluster-slots";
import { EventEmitter } from "events";
import { ValkeyClusterMultiCommandType } from "./multi-command";
import { PubSubListener } from "../client/pub-sub";
export type ValkeyClusterClientOptions = Omit;
export interface ValkeyClusterOptions, F extends ValkeyFunctions = Record, S extends ValkeyScripts = Record> extends ValkeyExtensions {
/**
* 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]: ValkeyCommandSignature<(typeof COMMANDS)[P]>;
};
export type ValkeyClusterType, F extends ValkeyFunctions = Record, S extends ValkeyScripts = Record> = ValkeyCluster & WithCommands & WithModules & WithFunctions & WithScripts;
export default class ValkeyCluster extends EventEmitter {
#private;
static extractFirstKey(command: ValkeyCommand, originalArgs: Array, valkeyArgs: ValkeyCommandArguments): ValkeyCommandArgument | undefined;
static create(options?: ValkeyClusterOptions): ValkeyClusterType;
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: ValkeyClusterOptions);
duplicate(overrides?: Partial>): ValkeyClusterType;
connect(): Promise;
commandsExecutor(command: C, args: Array): Promise>;
sendCommand(firstKey: ValkeyCommandArgument | undefined, isReadonly: boolean | undefined, args: ValkeyCommandArguments, options?: ClientCommandOptions): Promise;
functionsExecutor(fn: F, args: Array, name: string): Promise>;
executeFunction(name: string, fn: ValkeyFunction, originalArgs: Array, valkeyArgs: ValkeyCommandArguments, options?: ClientCommandOptions): Promise;
scriptsExecutor(script: S, args: Array): Promise>;
executeScript(script: ValkeyScript, originalArgs: Array, valkeyArgs: ValkeyCommandArguments, options?: ClientCommandOptions): Promise;
MULTI(routing?: ValkeyCommandArgument): ValkeyClusterMultiCommandType;
multi: (routing?: ValkeyCommandArgument) => ValkeyClusterMultiCommandType;
SUBSCRIBE(channels: string | Array, listener: PubSubListener, bufferMode?: T): Promise;
subscribe: (channels: string | Array, listener: PubSubListener, bufferMode?: T) => Promise;
UNSUBSCRIBE(channels?: string | Array, listener?: PubSubListener, bufferMode?: T): Promise;
unsubscribe: (channels?: string | Array, listener?: PubSubListener, bufferMode?: T) => Promise;
PSUBSCRIBE(patterns: string | Array, listener: PubSubListener, bufferMode?: T): Promise;
pSubscribe: (patterns: string | Array, listener: PubSubListener, bufferMode?: T) => Promise;
PUNSUBSCRIBE(patterns?: string | Array, listener?: PubSubListener, bufferMode?: T): Promise;
pUnsubscribe: (patterns?: string | Array, listener?: PubSubListener, bufferMode?: T) => Promise;
SSUBSCRIBE(channels: string | Array, listener: PubSubListener, bufferMode?: T): Promise;
sSubscribe: (channels: string | Array, listener: PubSubListener, bufferMode?: T) => Promise;
SUNSUBSCRIBE(channels: string | Array, listener?: PubSubListener, bufferMode?: T): Promise;
sUnsubscribe: (channels: string | Array, listener?: PubSubListener, bufferMode?: T) => Promise;
quit(): Promise;
disconnect(): Promise;
nodeClient(node: ShardNode): ValkeyClientType | 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 {};