58 lines
1.8 KiB
TypeScript
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
|
|
},
|
|
})
|
|
}
|