export class ConversationService {
/** In-memory cache for last message previews — avoids decrypting on every list() call */
private previewCache = new Map<ConversationId, string>();
constructor(
private db: Db,
private connections: ConnectionManager,
private resolveContactPolicy: ContactPolicyResolver = () => null,
) {}
/** Writes the plaintext preview before message-part encryption. */
updatePreviewCache(
conversationId: ConversationId,
firstPartText: string,
): void {
this.previewCache.delete(conversationId);
this.previewCache.set(
conversationId,
firstPartText.slice(0, PREVIEW_CACHE_TEXT_CHARS),
);
if (this.previewCache.size > PREVIEW_CACHE_MAX) {
const oldest = this.previewCache.keys().next().value!;
this.previewCache.delete(oldest);
}
}