/// /// import { Readable, Writable } from 'stream'; import { Feed as HypercoreFeed } from 'hypercore'; import { KeyPair, PublicId, DiscoveryId } from './Keys'; import Queue from './Queue'; import { Database } from './SqlDatabase'; import * as Crypto from './Crypto'; export declare type Feed = HypercoreFeed; export declare type FeedId = PublicId; export declare type Block = Uint8Array; interface StorageFn { (path: string): (filename: string) => unknown; } /** * Note: * FeedId should really be the discovery key. The public key should be * PublicId. Reading and writing to existing hypercores does not require the * public key; it's saved to disk. In a future refactor, we plan to remove the * reliance on public keys, and instead only provide the public key when * creating a new hypercore, or opening an unknown hypercore. The ledger keeps * track of which hypercores have already been opened. */ export default class FeedStore { private storage; private loaded; info: FeedInfoStore; constructor(db: Database, storageFn: StorageFn); /** * Create a brand-new writable feed using the given key pair. * Promises the FeedId. */ create(keys: Required): Promise; sign(feedId: FeedId, message: Buffer): Promise>; verify(feedId: FeedId, signedMessage: Crypto.SignedMessage): boolean; append(feedId: FeedId, ...blocks: Block[]): Promise; appendStream(feedId: FeedId): Promise; read(feedId: FeedId, seq: number): Promise; head(feedId: FeedId): Promise; stream(feedId: FeedId, start?: number, end?: number): Promise; closeFeed(feedId: FeedId): Promise; close(): Promise; getFeed(feedId: FeedId): Promise; private open; private openOrCreateFeed; } export interface FeedInfo { publicId: PublicId; discoveryId: DiscoveryId; isWritable: 0 | 1; } export declare class FeedInfoStore { createdQ: Queue; private prepared; constructor(db: Database); save(info: FeedInfo): void; getPublicId(discoveryId: DiscoveryId): PublicId | undefined; hasDiscoveryId(discoveryId: DiscoveryId): boolean; byPublicId(publicId: PublicId): FeedInfo | undefined; byDiscoveryId(discoveryId: DiscoveryId): FeedInfo | undefined; allPublicIds(): PublicId[]; allDiscoveryIds(): DiscoveryId[]; } export {};