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