import type { Readable } from 'node:stream' import { check } from '@atproto/common-web' import { Cid, LexMap } from '@atproto/lex-data' import { BlockMap } from '../block-map' import { CommitData } from '../types' export interface RepoStorage { // Writable getRoot(): Promise putBlock(cid: Cid, block: Uint8Array, rev: string): Promise putMany(blocks: BlockMap, rev: string): Promise updateRoot(cid: Cid, rev: string): Promise applyCommit(commit: CommitData) // Readable getBytes(cid: Cid): Promise has(cid: Cid): Promise getBlocks(cids: Cid[]): Promise<{ blocks: BlockMap; missing: Cid[] }> attemptRead( cid: Cid, def: check.Def, ): Promise<{ obj: T; bytes: Uint8Array } | null> readObjAndBytes( cid: Cid, def: check.Def, ): Promise<{ obj: T; bytes: Uint8Array }> readObj(cid: Cid, def: check.Def): Promise attemptReadRecord(cid: Cid): Promise readRecord(cid: Cid): Promise } // @TODO make this less node-js specific by using AsyncIterable instead of Readable export interface BlobStore { putTemp(bytes: Uint8Array | Readable): Promise makePermanent(key: string, cid: Cid): Promise putPermanent(cid: Cid, bytes: Uint8Array | Readable): Promise quarantine(cid: Cid): Promise unquarantine(cid: Cid): Promise getBytes(cid: Cid): Promise getStream(cid: Cid): Promise hasTemp(key: string): Promise hasStored(cid: Cid): Promise delete(cid: Cid): Promise deleteMany(cid: Cid[]): Promise } export class BlobNotFoundError extends Error {}