declare module "bun" { export interface RedisOptions { /** * Connection timeout in milliseconds * @default 10000 */ connectionTimeout?: number; /** * Idle timeout in milliseconds * @default 0 (no timeout) */ idleTimeout?: number; /** * Whether to automatically reconnect * @default true */ autoReconnect?: boolean; /** * Maximum number of reconnection attempts * @default 10 */ maxRetries?: number; /** * Whether to queue commands when disconnected * @default true */ enableOfflineQueue?: boolean; /** * TLS options * Can be a boolean or an object with TLS options */ tls?: | boolean | { key?: string | Buffer; cert?: string | Buffer; ca?: string | Buffer | Array; rejectUnauthorized?: boolean; }; /** * Whether to enable auto-pipelining * @default true */ enableAutoPipelining?: boolean; } export class RedisClient { /** * Creates a new Redis client * @param url URL to connect to, defaults to process.env.VALKEY_URL, process.env.REDIS_URL, or "valkey://localhost:6379" * @param options Additional options * * @example * ```ts * const valkey = new RedisClient(); * * await valkey.set("hello", "world"); * * console.log(await valkey.get("hello")); * ``` */ constructor(url?: string, options?: RedisOptions); /** * Whether the client is connected to the Redis server */ readonly connected: boolean; /** * Amount of data buffered in bytes */ readonly bufferedAmount: number; /** * Callback fired when the client connects to the Redis server */ onconnect: ((this: RedisClient) => void) | null; /** * Callback fired when the client disconnects from the Redis server * @param error The error that caused the disconnection */ onclose: ((this: RedisClient, error: Error) => void) | null; /** * Connect to the Redis server * @returns A promise that resolves when connected */ connect(): Promise; /** * Disconnect from the Redis server */ close(): void; /** * Send a raw command to the Redis server * @param command The command to send * @param args The arguments to the command * @returns A promise that resolves with the command result */ send(command: string, args: string[]): Promise; /** * Get the value of a key * @param key The key to get * @returns Promise that resolves with the key's value as a string, or null if the key doesn't exist */ get(key: string | ArrayBufferView | Blob): Promise; /** * Get the value of a key as a Uint8Array * @param key The key to get * @returns Promise that resolves with the key's value as a Uint8Array, or null if the key doesn't exist */ getBuffer(key: string | ArrayBufferView | Blob): Promise | null>; /** * Set key to hold the string value * @param key The key to set * @param value The value to set * @returns Promise that resolves with "OK" on success */ set(key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob): Promise<"OK">; /** * Set key to hold the string value with expiration * @param key The key to set * @param value The value to set * @param ex Set the specified expire time, in seconds * @returns Promise that resolves with "OK" on success */ set( key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob, ex: "EX", seconds: number, ): Promise<"OK">; /** * Set key to hold the string value with expiration * @param key The key to set * @param value The value to set * @param px Set the specified expire time, in milliseconds * @returns Promise that resolves with "OK" on success */ set( key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob, px: "PX", milliseconds: number, ): Promise<"OK">; /** * Set key to hold the string value with expiration at a specific Unix timestamp * @param key The key to set * @param value The value to set * @param exat Set the specified Unix time at which the key will expire, in seconds * @returns Promise that resolves with "OK" on success */ set( key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob, exat: "EXAT", timestampSeconds: number, ): Promise<"OK">; /** * Set key to hold the string value with expiration at a specific Unix timestamp * @param key The key to set * @param value The value to set * @param pxat Set the specified Unix time at which the key will expire, in milliseconds * @returns Promise that resolves with "OK" on success */ set( key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob, pxat: "PXAT", timestampMilliseconds: number, ): Promise<"OK">; /** * Set key to hold the string value only if key does not exist * @param key The key to set * @param value The value to set * @param nx Only set the key if it does not already exist * @returns Promise that resolves with "OK" on success, or null if the key already exists */ set(key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob, nx: "NX"): Promise<"OK" | null>; /** * Set key to hold the string value only if key already exists * @param key The key to set * @param value The value to set * @param xx Only set the key if it already exists * @returns Promise that resolves with "OK" on success, or null if the key does not exist */ set(key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob, xx: "XX"): Promise<"OK" | null>; /** * Set key to hold the string value and return the old value * @param key The key to set * @param value The value to set * @param get Return the old string stored at key, or null if key did not exist * @returns Promise that resolves with the old value, or null if key did not exist */ set( key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob, get: "GET", ): Promise; /** * Set key to hold the string value and retain the time to live * @param key The key to set * @param value The value to set * @param keepttl Retain the time to live associated with the key * @returns Promise that resolves with "OK" on success */ set( key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob, keepttl: "KEEPTTL", ): Promise<"OK">; /** * Set key to hold the string value with various options * @param key The key to set * @param value The value to set * @param options Array of options (EX, PX, EXAT, PXAT, NX, XX, KEEPTTL, GET) * @returns Promise that resolves with "OK" on success, null if NX/XX condition not met, or the old value if GET is specified */ set( key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob, ...options: string[] ): Promise<"OK" | string | null>; /** * Delete a key * @param key The key to delete * @returns Promise that resolves with the number of keys removed */ del(key: string | ArrayBufferView | Blob): Promise; /** * Increment the integer value of a key by one * @param key The key to increment * @returns Promise that resolves with the new value */ incr(key: string | ArrayBufferView | Blob): Promise; /** * Decrement the integer value of a key by one * @param key The key to decrement * @returns Promise that resolves with the new value */ decr(key: string | ArrayBufferView | Blob): Promise; /** * Determine if a key exists * @param key The key to check * @returns Promise that resolves with true if the key exists, false otherwise */ exists(key: string | ArrayBufferView | Blob): Promise; /** * Set a key's time to live in seconds * @param key The key to set the expiration for * @param seconds The number of seconds until expiration * @returns Promise that resolves with 1 if the timeout was set, 0 if not */ expire(key: string | ArrayBufferView | Blob, seconds: number): Promise; /** * Get the time to live for a key in seconds * @param key The key to get the TTL for * @returns Promise that resolves with the TTL, -1 if no expiry, or -2 if key doesn't exist */ ttl(key: string | ArrayBufferView | Blob): Promise; /** * Set multiple hash fields to multiple values * @param key The hash key * @param fieldValues An array of alternating field names and values * @returns Promise that resolves with "OK" on success */ hmset(key: string | ArrayBufferView | Blob, fieldValues: string[]): Promise; /** * Get the values of all the given hash fields * @param key The hash key * @param fields The fields to get * @returns Promise that resolves with an array of values */ hmget(key: string | ArrayBufferView | Blob, fields: string[]): Promise>; /** * Check if a value is a member of a set * @param key The set key * @param member The member to check * @returns Promise that resolves with true if the member exists, false otherwise */ sismember(key: string | ArrayBufferView | Blob, member: string): Promise; /** * Add a member to a set * @param key The set key * @param member The member to add * @returns Promise that resolves with 1 if the member was added, 0 if it already existed */ sadd(key: string | ArrayBufferView | Blob, member: string): Promise; /** * Remove a member from a set * @param key The set key * @param member The member to remove * @returns Promise that resolves with 1 if the member was removed, 0 if it didn't exist */ srem(key: string | ArrayBufferView | Blob, member: string): Promise; /** * Get all the members in a set * @param key The set key * @returns Promise that resolves with an array of all members */ smembers(key: string | ArrayBufferView | Blob): Promise; /** * Get a random member from a set * @param key The set key * @returns Promise that resolves with a random member, or null if the set is empty */ srandmember(key: string | ArrayBufferView | Blob): Promise; /** * Remove and return a random member from a set * @param key The set key * @returns Promise that resolves with the removed member, or null if the set is empty */ spop(key: string | ArrayBufferView | Blob): Promise; /** * Increment the integer value of a hash field by the given number * @param key The hash key * @param field The field to increment * @param increment The amount to increment by * @returns Promise that resolves with the new value */ hincrby(key: string | ArrayBufferView | Blob, field: string, increment: string | number): Promise; /** * Increment the float value of a hash field by the given amount * @param key The hash key * @param field The field to increment * @param increment The amount to increment by * @returns Promise that resolves with the new value as a string */ hincrbyfloat(key: string | ArrayBufferView | Blob, field: string, increment: string | number): Promise; /** * Get all the fields and values in a hash * @param key The hash key * @returns Promise that resolves with an object containing all fields and values */ hgetall(key: string | ArrayBufferView | Blob): Promise | null>; /** * Get all field names in a hash * @param key The hash key * @returns Promise that resolves with an array of field names */ hkeys(key: string | ArrayBufferView | Blob): Promise; /** * Get the number of fields in a hash * @param key The hash key * @returns Promise that resolves with the number of fields */ hlen(key: string | ArrayBufferView | Blob): Promise; /** * Get all values in a hash * @param key The hash key * @returns Promise that resolves with an array of values */ hvals(key: string | ArrayBufferView | Blob): Promise; /** * Find all keys matching the given pattern * @param pattern The pattern to match * @returns Promise that resolves with an array of matching keys */ keys(pattern: string): Promise; /** * Get the length of a list * @param key The list key * @returns Promise that resolves with the length of the list */ llen(key: string | ArrayBufferView | Blob): Promise; /** * Remove and get the first element in a list * @param key The list key * @returns Promise that resolves with the first element, or null if the list is empty */ lpop(key: string | ArrayBufferView | Blob): Promise; /** * Remove the expiration from a key * @param key The key to persist * @returns Promise that resolves with 1 if the timeout was removed, 0 if the key doesn't exist or has no timeout */ persist(key: string | ArrayBufferView | Blob): Promise; /** * Get the expiration time of a key as a UNIX timestamp in milliseconds * @param key The key to check * @returns Promise that resolves with the timestamp, or -1 if the key has no expiration, or -2 if the key doesn't exist */ pexpiretime(key: string | ArrayBufferView | Blob): Promise; /** * Get the time to live for a key in milliseconds * @param key The key to check * @returns Promise that resolves with the TTL in milliseconds, or -1 if the key has no expiration, or -2 if the key doesn't exist */ pttl(key: string | ArrayBufferView | Blob): Promise; /** * Remove and get the last element in a list * @param key The list key * @returns Promise that resolves with the last element, or null if the list is empty */ rpop(key: string | ArrayBufferView | Blob): Promise; /** * Get the number of members in a set * @param key The set key * @returns Promise that resolves with the cardinality (number of elements) of the set */ scard(key: string | ArrayBufferView | Blob): Promise; /** * Get the length of the value stored in a key * @param key The key to check * @returns Promise that resolves with the length of the string value, or 0 if the key doesn't exist */ strlen(key: string | ArrayBufferView | Blob): Promise; /** * Get the number of members in a sorted set * @param key The sorted set key * @returns Promise that resolves with the cardinality (number of elements) of the sorted set */ zcard(key: string | ArrayBufferView | Blob): Promise; /** * Remove and return members with the highest scores in a sorted set * @param key The sorted set key * @returns Promise that resolves with the removed member and its score, or null if the set is empty */ zpopmax(key: string | ArrayBufferView | Blob): Promise; /** * Remove and return members with the lowest scores in a sorted set * @param key The sorted set key * @returns Promise that resolves with the removed member and its score, or null if the set is empty */ zpopmin(key: string | ArrayBufferView | Blob): Promise; /** * Get one or multiple random members from a sorted set * @param key The sorted set key * @returns Promise that resolves with a random member, or null if the set is empty */ zrandmember(key: string | ArrayBufferView | Blob): Promise; /** * Append a value to a key * @param key The key to append to * @param value The value to append * @returns Promise that resolves with the length of the string after the append operation */ append(key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob): Promise; /** * Set the value of a key and return its old value * @param key The key to set * @param value The value to set * @returns Promise that resolves with the old value, or null if the key didn't exist */ getset(key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob): Promise; /** * Prepend one or multiple values to a list * @param key The list key * @param value The value to prepend * @returns Promise that resolves with the length of the list after the push operation */ lpush(key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob): Promise; /** * Prepend a value to a list, only if the list exists * @param key The list key * @param value The value to prepend * @returns Promise that resolves with the length of the list after the push operation, or 0 if the list doesn't exist */ lpushx(key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob): Promise; /** * Add one or more members to a HyperLogLog * @param key The HyperLogLog key * @param element The element to add * @returns Promise that resolves with 1 if the HyperLogLog was altered, 0 otherwise */ pfadd(key: string | ArrayBufferView | Blob, element: string): Promise; /** * Append one or multiple values to a list * @param key The list key * @param value The value to append * @returns Promise that resolves with the length of the list after the push operation */ rpush(key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob): Promise; /** * Append a value to a list, only if the list exists * @param key The list key * @param value The value to append * @returns Promise that resolves with the length of the list after the push operation, or 0 if the list doesn't exist */ rpushx(key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob): Promise; /** * Set the value of a key, only if the key does not exist * @param key The key to set * @param value The value to set * @returns Promise that resolves with 1 if the key was set, 0 if the key was not set */ setnx(key: string | ArrayBufferView | Blob, value: string | ArrayBufferView | Blob): Promise; /** * Get the score associated with the given member in a sorted set * @param key The sorted set key * @param member The member to get the score for * @returns Promise that resolves with the score of the member as a string, or null if the member or key doesn't exist */ zscore(key: string | ArrayBufferView | Blob, member: string): Promise; /** * Get the values of all specified keys * @param keys The keys to get * @returns Promise that resolves with an array of values, with null for keys that don't exist */ mget(...keys: (string | ArrayBufferView | Blob)[]): Promise<(string | null)[]>; /** * Count the number of set bits (population counting) in a string * @param key The key to count bits in * @returns Promise that resolves with the number of bits set to 1 */ bitcount(key: string | ArrayBufferView | Blob): Promise; /** * Return a serialized version of the value stored at the specified key * @param key The key to dump * @returns Promise that resolves with the serialized value, or null if the key doesn't exist */ dump(key: string | ArrayBufferView | Blob): Promise; /** * Get the expiration time of a key as a UNIX timestamp in seconds * @param key The key to check * @returns Promise that resolves with the timestamp, or -1 if the key has no expiration, or -2 if the key doesn't exist */ expiretime(key: string | ArrayBufferView | Blob): Promise; /** * Get the value of a key and delete the key * @param key The key to get and delete * @returns Promise that resolves with the value of the key, or null if the key doesn't exist */ getdel(key: string | ArrayBufferView | Blob): Promise; /** * Get the value of a key and optionally set its expiration * @param key The key to get * @returns Promise that resolves with the value of the key, or null if the key doesn't exist */ getex(key: string | ArrayBufferView | Blob): Promise; } /** * Default Redis client * * Connection information populated from one of, in order of preference: * - `process.env.VALKEY_URL` * - `process.env.REDIS_URL` * - `"valkey://localhost:6379"` * */ export const redis: RedisClient; }