/** * Helper functions for caching publications and series by hash */ import type { Event } from 'nostr-tools' import { parseObjectId } from '../urlGenerator' import { extractTagsFromEvent } from '../nostrTagSystem' import { extractPublicationFromEvent, extractSeriesFromEvent } from '../metadataExtractor' import { groupAndCacheEventsByHash } from './eventCacheHelper' export async function cachePublicationsByHash(events: Event[]): Promise { await groupAndCacheEventsByHash(events, { objectType: 'publication', extractor: extractPublicationFromEvent, getHash: (extracted: unknown): string | null => { const id = (extracted as { id?: string })?.id if (!id) { return null } const parsed = parseObjectId(id) return parsed.hash ?? id }, getIndex: (extracted: unknown): number => { return (extracted as { index?: number })?.index ?? 0 }, getVersion: (event: Event): number => { return extractTagsFromEvent(event).version ?? 0 }, getHidden: (event: Event): boolean => { return extractTagsFromEvent(event).hidden ?? false }, }) } export async function cacheSeriesByHash(events: Event[]): Promise { await groupAndCacheEventsByHash(events, { objectType: 'series', extractor: extractSeriesFromEvent, getHash: (extracted: unknown): string | null => { const id = (extracted as { id?: string })?.id if (!id) { return null } const parsed = parseObjectId(id) return parsed.hash ?? id }, getIndex: (extracted: unknown): number => { return (extracted as { index?: number })?.index ?? 0 }, getVersion: (event: Event): number => { return extractTagsFromEvent(event).version ?? 0 }, getHidden: (event: Event): boolean => { return extractTagsFromEvent(event).hidden ?? false }, }) }