import { ResumableStreamStore } from "../types.js";
import { RedisResumableStreamStoreOptions } from "./redis-impl.js";

//#region src/resumable/stores/redis.d.ts
type NodeRedisFields = Record<string, string | Buffer>;
interface NodeRedisMultiCommand {
  xAdd(key: string, id: string, fields: NodeRedisFields): NodeRedisMultiCommand;
  expire(key: string, seconds: number): NodeRedisMultiCommand;
  set(key: string, value: string, options: {
    EX: number;
  }): NodeRedisMultiCommand;
  execAsPipeline(): Promise<unknown>;
  exec(): Promise<unknown>;
}
/** Structural subset of node-redis v5 used by the adapter. */
interface NodeRedisLike {
  set(key: string, value: string, options: {
    NX: true;
    EX: number;
  }): Promise<string | null>;
  set(key: string, value: string, options: {
    EX: number;
  }): Promise<string | null>;
  get(key: string): Promise<string | null>;
  expire(key: string, seconds: number): Promise<unknown>;
  exists(key: string): Promise<number>;
  del(keys: string | string[]): Promise<unknown>;
  xAdd(key: string, id: string, fields: NodeRedisFields): Promise<string>;
  sendCommand<T = unknown>(args: ReadonlyArray<string | Buffer>, options?: {
    typeMapping?: Record<number, unknown>;
  }): Promise<T>;
  multi(): NodeRedisMultiCommand;
}
/**
 * Resumable stream store backed by [`redis`](https://www.npmjs.com/package/redis)
 * v5. Expects a connected client; cluster routing relies on the shared
 * `{streamId}` hash tag baked into the key scheme.
 */
declare function createRedisResumableStreamStore(client: NodeRedisLike, options?: RedisResumableStreamStoreOptions): ResumableStreamStore;
//#endregion
export { NodeRedisLike, createRedisResumableStreamStore };
//# sourceMappingURL=redis.d.ts.map