import { Socket } from "net";
import RedundantServers from "./redundant-servers";
import EventEmitter from "events";
import { MemcacheClientOptions, ErrorFirstCallback, PackedData } from "../types";
import { MemcacheConnection } from "./connection";
import { DefaultLogger } from "@juliusza/memcache-parser";
type StoreParams = string | number | Buffer | Record<string, unknown>;
type CommonCommandOption = Readonly<{
    noreply?: boolean;
}>;
type StoreCommandOptions = CommonCommandOption & {
    ignoreNotStored?: boolean;
} & Readonly<{
    lifetime?: number;
    compress?: boolean;
}>;
type CasCommandOptions = CommonCommandOption & StoreCommandOptions & Readonly<{
    casUniq: number | string;
}>;
type SocketCallback = (socket?: Socket) => void;
type OperationCallback<Error, Data> = (error?: Error | null, data?: Data) => void;
export type RetrievalCommandResponse<ValueType> = {
    tokens: string[];
    casUniq?: number | string;
    value: ValueType;
};
export type CasRetrievalCommandResponse<Type> = RetrievalCommandResponse<Type> & {
    casUniq: string | number;
};
export type StatsCommandResponse = Record<"STAT", Array<Array<string>>>;
export type MultiRetrievalResponse<ValueType = unknown> = Record<string, RetrievalCommandResponse<ValueType>>;
export type MultiCasRetrievalResponse<ValueType = unknown> = Record<string, CasRetrievalCommandResponse<ValueType>>;
type MultiCasRetrieval<ValueType> = ValueType extends MultiCasRetrievalResponse ? ValueType : CasRetrievalCommandResponse<ValueType>;
type MultiRetrieval<ValueType> = ValueType extends MultiRetrievalResponse ? ValueType : RetrievalCommandResponse<ValueType>;
export declare class MemcacheClient extends EventEmitter {
    options: MemcacheClientOptions;
    socketID: number;
    _logger: DefaultLogger;
    _servers: RedundantServers;
    private _packer;
    private Promise;
    constructor(options: MemcacheClientOptions);
    shutdown(): void;
    send<ValueType>(data: StoreParams | SocketCallback, options?: CommonCommandOption | ErrorFirstCallback, callback?: ErrorFirstCallback): Promise<ValueType>;
    xsend(data: StoreParams | SocketCallback, options?: StoreCommandOptions): Promise<unknown>;
    cmd<Response>(data: string, options?: CommonCommandOption, callback?: ErrorFirstCallback): Promise<Response>;
    set(key: string, value: StoreParams, options?: StoreCommandOptions | OperationCallback<Error, string[]>, callback?: OperationCallback<Error, string[]>): Promise<string[]>;
    add(key: string, value: StoreParams, options?: StoreCommandOptions | OperationCallback<Error, string[]>, callback?: OperationCallback<Error, string[]>): Promise<string[]>;
    replace(key: string, value: StoreParams, options?: StoreCommandOptions | OperationCallback<Error, string[]>, callback?: OperationCallback<Error, string[]>): Promise<string[]>;
    append(key: string, value: StoreParams, options?: StoreCommandOptions | OperationCallback<Error, string[]>, callback?: OperationCallback<Error, string[]>): Promise<string[]>;
    prepend(key: string, value: StoreParams, options?: StoreCommandOptions | OperationCallback<Error, string[]>, callback?: OperationCallback<Error, string[]>): Promise<string[]>;
    cas(key: string, value: StoreParams, options: CasCommandOptions, callback?: OperationCallback<Error, string[]>): Promise<string[]>;
    delete(key: string, options?: CommonCommandOption | OperationCallback<Error, string[]>, callback?: OperationCallback<Error, string[]>): Promise<string[]>;
    incr(key: string, value: number, options?: StoreCommandOptions | OperationCallback<Error, string>, callback?: OperationCallback<Error, string>): Promise<string>;
    decr(key: string, value: number, options?: StoreCommandOptions | OperationCallback<Error, string>, callback?: OperationCallback<Error, string>): Promise<string>;
    touch(key: string, exptime: string | number, options?: CommonCommandOption | OperationCallback<Error, string[]>, callback?: OperationCallback<Error, string[]>): Promise<string[]>;
    version(callback?: OperationCallback<Error, string[]>): Promise<string[]>;
    store(cmd: string, key: string, value: StoreParams, options?: Partial<CasCommandOptions> | OperationCallback<Error, string[]>, callback?: OperationCallback<Error, string[]>): Promise<string[]>;
    get<ValueType>(key: string | string[], options?: StoreCommandOptions | OperationCallback<Error, MultiRetrieval<ValueType>>, callback?: OperationCallback<Error, MultiRetrieval<ValueType>>): Promise<MultiRetrieval<ValueType>>;
    gets<ValueType>(key: string | string[], options?: StoreCommandOptions | OperationCallback<Error, MultiCasRetrieval<ValueType>>, callback?: OperationCallback<Error, MultiCasRetrieval<ValueType>>): Promise<MultiCasRetrieval<ValueType>>;
    retrieve<T>(cmd: string, key: string[] | string, options?: StoreCommandOptions | OperationCallback<Error, T>, callback?: ErrorFirstCallback): Promise<T>;
    xretrieve(cmd: string, key: string | string[], options?: StoreCommandOptions): Promise<unknown>;
    _send(conn: MemcacheConnection, data: StoreParams | SocketCallback, options: Partial<CasCommandOptions>): Promise<unknown>;
    _callbackSend(data: StoreParams | SocketCallback, options?: Partial<CasCommandOptions>, callback?: ErrorFirstCallback): Promise<unknown>;
    _unpackValue(result: PackedData): number | string | Record<string, unknown> | Buffer;
}
export {};
