import { CommandParser } from '@redis/client/dist/lib/client/parser';
import { RedisArgument } from '@redis/client/dist/lib/RESP/types';
import { SamplesRawReply, Timestamp } from './helpers';
/**
 * Sentinel cursor values for {@link READ}'s `timestamp` argument.
 *
 * The wire values must remain `-`, `+`, and `$`; only the first call of an
 * iteration should use a sentinel. Every subsequent call should pass
 * `last returned timestamp + 1`.
 */
export declare const TS_READ_TIMESTAMP: {
    /** `-` — no lower bound, reads from the earliest sample (equivalent to `0`). */
    readonly EARLIEST: "-";
    /** `+` — the latest existing sample's timestamp, inclusive. */
    readonly LATEST: "+";
    /** `$` — the latest sample's timestamp + 1: only samples added after the call qualify. Meaningful only with `BLOCK`. */
    readonly NEW: "$";
};
/**
 * Cursor for {@link READ}'s `timestamp` argument. A {@link Timestamp}
 * (`number | Date | string`; strings keep precision for values beyond
 * `Number.MAX_SAFE_INTEGER`) or a {@link TS_READ_TIMESTAMP} sentinel.
 */
export type TsReadTimestamp = Timestamp | typeof TS_READ_TIMESTAMP[keyof typeof TS_READ_TIMESTAMP];
export interface TsReadOptions {
    /**
     * Opt into blocking. All-or-nothing: when present, both `milliseconds` and
     * `minCount` are emitted on the wire.
     */
    BLOCK?: {
        /** Maximum wait in milliseconds, non-negative. `0` means wait indefinitely. */
        milliseconds: number;
        /** Unblock threshold, positive integer. Defaults to `1`. */
        minCount?: number;
    };
    /** Reply cap, positive integer. Omitted means unlimited. */
    MAX_COUNT?: number;
}
declare const _default: {
    readonly parseCommand: (this: void, parser: CommandParser, key: RedisArgument, timestamp: TsReadTimestamp, options?: TsReadOptions) => void;
    readonly transformReply: {
        readonly 2: (this: void, reply: import("@redis/client/dist/lib/RESP/types").RespType<42, import("@redis/client/dist/lib/RESP/types").RespType<42, [import("@redis/client/dist/lib/RESP/types").NumberReply<number>, import("@redis/client/dist/lib/RESP/types").BlobStringReply<string>], never, [import("@redis/client/dist/lib/RESP/types").NumberReply<number>, import("@redis/client/dist/lib/RESP/types").BlobStringReply<string>]>[], never, import("@redis/client/dist/lib/RESP/types").RespType<42, [import("@redis/client/dist/lib/RESP/types").NumberReply<number>, import("@redis/client/dist/lib/RESP/types").BlobStringReply<string>], never, [import("@redis/client/dist/lib/RESP/types").NumberReply<number>, import("@redis/client/dist/lib/RESP/types").BlobStringReply<string>]>[]>) => {
            timestamp: import("@redis/client/dist/lib/RESP/types").NumberReply<number>;
            value: number;
        }[];
        readonly 3: (this: void, reply: SamplesRawReply) => {
            timestamp: import("@redis/client/dist/lib/RESP/types").NumberReply<number>;
            value: import("@redis/client/dist/lib/RESP/types").DoubleReply<number>;
        }[];
    };
};
export default _default;
//# sourceMappingURL=READ.d.ts.map