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