story-research-zapwall/lib/helpers/syncContentCacheHelpers.ts
2026-01-07 03:10:40 +01:00

58 lines
1.8 KiB
TypeScript

/**
* 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<void> {
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<void> {
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
},
})
}