import stream from 'node:stream';
import { CID } from 'multiformats/cid';
import { check } from '@atproto/common';
import { RepoRecord } from '@atproto/lexicon';
import { BlockMap } from '../block-map';
import { CommitData } from '../types';
export interface RepoStorage {
    getRoot(): Promise<CID | null>;
    putBlock(cid: CID, block: Uint8Array, rev: string): Promise<void>;
    putMany(blocks: BlockMap, rev: string): Promise<void>;
    updateRoot(cid: CID, rev: string): Promise<void>;
    applyCommit(commit: CommitData): any;
    getBytes(cid: CID): Promise<Uint8Array | null>;
    has(cid: CID): Promise<boolean>;
    getBlocks(cids: CID[]): Promise<{
        blocks: BlockMap;
        missing: CID[];
    }>;
    attemptRead<T>(cid: CID, def: check.Def<T>): Promise<{
        obj: T;
        bytes: Uint8Array;
    } | null>;
    readObjAndBytes<T>(cid: CID, def: check.Def<T>): Promise<{
        obj: T;
        bytes: Uint8Array;
    }>;
    readObj<T>(cid: CID, def: check.Def<T>): Promise<T>;
    attemptReadRecord(cid: CID): Promise<RepoRecord | null>;
    readRecord(cid: CID): Promise<RepoRecord>;
}
export interface BlobStore {
    putTemp(bytes: Uint8Array | stream.Readable): Promise<string>;
    makePermanent(key: string, cid: CID): Promise<void>;
    putPermanent(cid: CID, bytes: Uint8Array | stream.Readable): Promise<void>;
    quarantine(cid: CID): Promise<void>;
    unquarantine(cid: CID): Promise<void>;
    getBytes(cid: CID): Promise<Uint8Array>;
    getStream(cid: CID): Promise<stream.Readable>;
    hasTemp(key: string): Promise<boolean>;
    hasStored(cid: CID): Promise<boolean>;
    delete(cid: CID): Promise<void>;
    deleteMany(cid: CID[]): Promise<void>;
}
export declare class BlobNotFoundError extends Error {
}
//# sourceMappingURL=types.d.ts.map