/// <reference types="node" />
import { NativeWatch, NativeTransaction } from './native';
import { KeySelector } from './keySelector';
import { TransactionOptions, TransactionOptionCode, StreamingMode, MutationType } from './opts.g';
export interface RangeOptionsBatch {
    streamingMode?: StreamingMode;
    limit?: number;
    reverse?: boolean;
}
export interface RangeOptions extends RangeOptionsBatch {
    targetBytes?: number;
}
export declare type KVList = {
    results: [Buffer, Buffer][];
    more: boolean;
};
export { NativeWatch as Watch };
export declare type WatchOptions = {
    throwAllErrors?: boolean;
};
export default class Transaction {
    private readonly _tn;
    readonly isSnapshot: boolean;
    constructor(tn: NativeTransaction, snapshot: boolean, opts?: TransactionOptions);
    setOption(opt: TransactionOptionCode, value?: number | string | Buffer): void;
    snapshot(): Transaction;
    rawCommit(): Promise<void>;
    rawReset(): void;
    rawCancel(): void;
    rawOnError(code: number): Promise<void>;
    get(key: Buffer): Promise<Buffer | null>;
    getKey(_sel: Buffer | KeySelector): Promise<Buffer | null>;
    set(key: Buffer, val: Buffer): void;
    clear(key: Buffer): void;
    /**
     * Range reads
     * @param start start key
     * @param end end key
     * @param opts options
     */
    getRangeAll(start: Buffer | KeySelector, end: Buffer | KeySelector, opts?: RangeOptions): Promise<[Buffer, Buffer][]>;
    private getRangeNative;
    private getRangeBatch;
    clearRange(start: Buffer, end: Buffer): void;
    watch(key: Buffer, opts?: WatchOptions): NativeWatch;
    /**
     * Read conflict range
     * @param start
     * @param end
     */
    addReadConflictRange(start: Buffer, end: Buffer): void;
    addWriteConflictRange(start: Buffer, end: Buffer): void;
    setReadVersion(v: Buffer): void;
    getReadVersion(): Promise<Buffer>;
    getCommittedVersion(): Buffer;
    getVersionstamp(): {
        promise: Promise<Buffer>;
    };
    getAddressesForKey(key: Buffer): string[];
    atomicOp(opType: MutationType, key: Buffer, oper: Buffer): void;
    add(key: Buffer, oper: Buffer): void;
    max(key: Buffer, oper: Buffer): void;
    min(key: Buffer, oper: Buffer): void;
    bitAnd(key: Buffer, oper: Buffer): void;
    bitOr(key: Buffer, oper: Buffer): void;
    bitXor(key: Buffer, oper: Buffer): void;
    byteMin(key: Buffer, val: Buffer): void;
    byteMax(key: Buffer, val: Buffer): void;
}
