import { FeedCache } from "@snort/shared"; import { EventPublisher, RequestBuilder, TaggedNostrEvent } from "@snort/system"; import { LoginSession } from "@/Login"; export type TWithCreated = (T | Readonly) & { created_at: number }; export abstract class RefreshFeedCache extends FeedCache> { abstract buildSub(session: LoginSession, rb: RequestBuilder): void; abstract onEvent(evs: Readonly>, pubKey: string, pub?: EventPublisher): void; /** * Get latest event */ protected newest(filter?: (e: TWithCreated) => boolean) { let ret = 0; this.cache.forEach(v => { if (!filter || filter(v)) { ret = v.created_at > ret ? v.created_at : ret; } }); return ret; } override async preload(): Promise { await super.preload(); // load all dms to memory await this.buffer([...this.onTable]); } }