story-research-zapwall/lib/helpers/syncCacheHelpers.ts
2026-01-07 03:45:01 +01:00

85 lines
2.5 KiB
TypeScript

/**
* Helper functions for caching synced events
* Centralizes the logic for caching purchases, sponsoring, review tips, and payment notes
*/
import type { Event } from 'nostr-tools'
import { extractTagsFromEvent } from '../nostrTagSystem'
import { extractPurchaseFromEvent, extractSponsoringFromEvent, extractReviewTipFromEvent } from '../metadataExtractor'
import { writeObjectToCache } from './writeObjectHelper'
export async function cachePurchases(events: Event[]): Promise<void> {
const { parsePurchaseFromEvent } = await import('../nostrEventParsing')
for (const event of events) {
const extracted = await extractPurchaseFromEvent(event)
if (extracted) {
const purchase = await parsePurchaseFromEvent(event)
if (purchase?.hash) {
await writeObjectToCache({
objectType: 'purchase',
hash: purchase.hash,
event,
parsed: purchase,
index: purchase.index,
})
}
}
}
}
export async function cacheSponsoring(events: Event[]): Promise<void> {
const { parseSponsoringFromEvent } = await import('../nostrEventParsing')
for (const event of events) {
const extracted = await extractSponsoringFromEvent(event)
if (extracted) {
const sponsoring = await parseSponsoringFromEvent(event)
if (sponsoring?.hash) {
await writeObjectToCache({
objectType: 'sponsoring',
hash: sponsoring.hash,
event,
parsed: sponsoring,
index: sponsoring.index,
})
}
}
}
}
export async function cacheReviewTips(events: Event[]): Promise<void> {
const { parseReviewTipFromEvent } = await import('../nostrEventParsing')
for (const event of events) {
const extracted = await extractReviewTipFromEvent(event)
if (extracted) {
const reviewTip = await parseReviewTipFromEvent(event)
if (reviewTip?.hash) {
await writeObjectToCache({
objectType: 'review_tip',
hash: reviewTip.hash,
event,
parsed: reviewTip,
index: reviewTip.index,
})
}
}
}
}
export async function cachePaymentNotes(events: Event[]): Promise<void> {
for (const event of events) {
const tags = extractTagsFromEvent(event)
if (tags.type === 'payment' && tags.payment) {
await writeObjectToCache({
objectType: 'payment_note',
hash: event.id,
event,
parsed: {
id: event.id,
type: 'payment_note',
eventId: event.id,
},
})
}
}
}