/** * Helper for writing objects to IndexedDB after extraction * Centralizes the pattern of extract + writeObject with default parameters * Optimizes imports by loading writeService once */ import type { Event } from 'nostr-tools' import type { ObjectType } from '../objectCache' import { extractTagsFromEvent } from '../nostrTagSystem' let writeServiceCache: typeof import('../writeService').writeService | null = null async function getWriteService(): Promise { if (!writeServiceCache) { const { writeService } = await import('../writeService') writeServiceCache = writeService } return writeServiceCache } export interface WriteObjectParams { objectType: ObjectType hash: string event: Event parsed: unknown version?: number hidden?: boolean index?: number published?: false | string[] } /** * Write an object to IndexedDB cache * Uses default values for version, hidden, index, and published if not provided */ export async function writeObjectToCache(params: WriteObjectParams): Promise { const { objectType, hash, event, parsed, version, hidden, index, published, } = params const tags = extractTagsFromEvent(event) const writeService = await getWriteService() await writeService.writeObject( objectType, hash, event, parsed, version ?? tags.version ?? 0, hidden ?? tags.hidden ?? false, index ?? 0, published ?? false ) } /** * Extract and write an object from an event * Combines extraction and writing in a single call */ export async function extractAndWriteObject( event: Event, objectType: ObjectType, extractor: (event: Event) => Promise ): Promise { const extracted = await extractor(event) if (!extracted) { return false } const {hash} = extracted if (!hash) { return false } await writeObjectToCache({ objectType, hash, event, parsed: extracted, index: extracted.index, }) return true }