///
///
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 {};