import { CommandParser } from '../client/parser';
import { RedisArgument, BlobStringReply } from '../RESP/types';
import { StreamDeletionPolicy } from './common-stream.types';
/**
 * Options for the XADD command
 *
 * @property policy - Reference tracking policy for the entry (KEEPREF, DELREF, or ACKED) - added in 8.6
 * @property IDMPAUTO - Automatically calculate an idempotent ID based on entry content to prevent duplicate entries - added in 8.6
 * @property IDMPAUTO.pid - Producer ID, must be unique per producer and consistent across restarts
 * @property IDMP - Use a specific idempotent ID to prevent duplicate entries - added in 8.6
 * @property IDMP.pid - Producer ID, must be unique per producer and consistent across restarts
 * @property IDMP.iid - Idempotent ID (binary string), must be unique per message and per pid
 * @property TRIM - Optional trimming configuration
 * @property TRIM.strategy - Trim strategy: MAXLEN (by length) or MINID (by ID)
 * @property TRIM.strategyModifier - Exact ('=') or approximate ('~') trimming
 * @property TRIM.threshold - Maximum stream length or minimum ID to retain
 * @property TRIM.limit - Maximum number of entries to trim in one call
 * @property TRIM.policy - Policy to apply when trimming entries (optional, defaults to KEEPREF)
 */
export interface XAddOptions {
    /** added in 8.6 */
    policy?: StreamDeletionPolicy;
    /** added in 8.6 */
    IDMPAUTO?: {
        pid: RedisArgument;
    };
    /** added in 8.6 */
    IDMP?: {
        pid: RedisArgument;
        iid: RedisArgument;
    };
    TRIM?: {
        strategy?: 'MAXLEN' | 'MINID';
        strategyModifier?: '=' | '~';
        threshold: number;
        limit?: number;
        /** added in 8.6 */
        policy?: StreamDeletionPolicy;
    };
}
/**
 * Parses arguments for the XADD command
 *
 * @param optional - Optional command modifier (e.g., NOMKSTREAM)
 * @param parser - The command parser
 * @param key - The stream key
 * @param id - Message ID (* for auto-generation)
 * @param message - Key-value pairs representing the message fields
 * @param options - Additional options for reference tracking, idempotency, and trimming
 */
export declare function parseXAddArguments(optional: RedisArgument | undefined, parser: CommandParser, key: RedisArgument, id: RedisArgument, message: Record<string, RedisArgument>, options?: XAddOptions): void;
declare const _default: {
    readonly IS_READ_ONLY: false;
    /**
     * Constructs the XADD command to append a new entry to a stream
     *
     * @param parser - The command parser
     * @param key - The stream key
     * @param id - Message ID (* for auto-generation)
     * @param message - Key-value pairs representing the message fields
     * @param options - Additional options for stream trimming
     * @returns The ID of the added entry
     * @see https://redis.io/commands/xadd/
     */
    readonly parseCommand: (this: void, parser: CommandParser, key: RedisArgument, id: RedisArgument, message: Record<string, RedisArgument>, options?: XAddOptions | undefined) => void;
    readonly transformReply: () => BlobStringReply;
};
export default _default;
//# sourceMappingURL=XADD.d.ts.map