@atproto/repo
Version:
atproto repo and MST implementation
48 lines (43 loc) • 1.71 kB
text/typescript
import type { Readable } from 'node:stream'
import { check } from '@atproto/common-web'
import { Cid, LexMap } from '@atproto/lex-data'
import { BlockMap } from '../block-map.js'
import { CommitData } from '../types.js'
export interface RepoStorage {
// Writable
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)
// Readable
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<LexMap | null>
readRecord(cid: Cid): Promise<LexMap>
}
// @TODO make this less node-js specific by using AsyncIterable<Uint8Array> instead of Readable
export interface BlobStore {
putTemp(bytes: Uint8Array | Readable): Promise<string>
makePermanent(key: string, cid: Cid): Promise<void>
putPermanent(cid: Cid, bytes: Uint8Array | Readable): Promise<void>
quarantine(cid: Cid): Promise<void>
unquarantine(cid: Cid): Promise<void>
getBytes(cid: Cid): Promise<Uint8Array>
getStream(cid: Cid): Promise<Readable>
hasTemp(key: string): Promise<boolean>
hasStored(cid: Cid): Promise<boolean>
delete(cid: Cid): Promise<void>
deleteMany(cid: Cid[]): Promise<void>
}
export class BlobNotFoundError extends Error {}