/**
 * This module is responsible for handling metadata encoding and decoding in database records, which is
 * used for local timestamps (that lmdb-js can assign during a transaction for guaranteed monotonic
 * assignment across threads) and can be used for storing residency information as well. This
 * patches the primary store to properly get the metadata and assign it to the entries.
 */
import { Encoder } from 'msgpackr';
import './blob.ts';
export type Entry = {
    key: any;
    value: any;
    version: number;
    localTime: number;
    expiresAt: number;
    metadataFlags: number;
    nodeId: number;
    residencyId: number;
    size: number;
    deref?: () => any;
    additionalAuditRefs?: Array<{
        version: number;
        nodeId: number;
    }>;
};
export declare const TIMESTAMP_PLACEHOLDER: Uint8Array<ArrayBuffer>;
export declare const LAST_TIMESTAMP_PLACEHOLDER: Uint8Array<ArrayBuffer>;
export declare const PREVIOUS_TIMESTAMP_PLACEHOLDER: Uint8Array<ArrayBuffer>;
export declare const NEW_TIMESTAMP_PLACEHOLDER: Uint8Array<ArrayBuffer>;
export declare const LOCAL_TIMESTAMP: unique symbol;
export declare const METADATA: unique symbol;
export declare const ENTRY: unique symbol;
export declare const NO_TIMESTAMP = 0;
export declare const TIMESTAMP_ASSIGN_NEW = 0;
export declare const TIMESTAMP_ASSIGN_LAST = 1;
export declare const TIMESTAMP_ASSIGN_PREVIOUS = 3;
export declare const TIMESTAMP_RECORD_PREVIOUS = 4;
export declare const HAS_EXPIRATION = 16;
export declare const HAS_RESIDENCY_ID = 32;
export declare const HAS_NODE_ID = 64;
export declare const PENDING_LOCAL_TIME = 1;
export declare const HAS_STRUCTURE_UPDATE = 256;
export declare const HAS_ADDITIONAL_AUDIT_REFS = 128;
export declare const entryMap: WeakMap<any, Entry>;
export declare let lastMetadata: Entry | null;
export declare class RecordEncoder extends Encoder {
    structureUpdate?: any;
    isRocksDB: boolean;
    name: string;
    constructor(options: any);
    decode(buffer: any, options: any): any;
}
export declare function handleLocalTimeForGets(store: any, rootStore: any): any;
export declare function recordUpdater(store: any, tableId: any, auditStore: any): (id: any, record: any, existingEntry: any, newVersion: any, assignMetadata?: number, // when positive, this has a set of metadata flags for the record
audit?: boolean, // true -> audit this record. false -> do not. null -> retain any audit timestamp
options?: any, type?: string, resolveRecord?: boolean, // indicates that we are resolving (from source) record that was previously invalidated
auditRecord?: any) => Promise<void>;
export declare function setAdditionalAuditRefs(refs: Array<{
    version: number;
    nodeId: number;
}> | undefined): void;
export declare function removeEntry(store: any, entry: any, options?: any): any;
export interface RecordObject {
    getUpdatedTime(): number;
    getExpiresAt(): number;
}
