/** * 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' export async function cachePurchases(events: Event[]): Promise { const { writeService } = await import('../writeService') const { parsePurchaseFromEvent } = await import('../nostrEventParsing') for (const event of events) { const extracted = await extractPurchaseFromEvent(event) if (extracted) { const purchase = await parsePurchaseFromEvent(event) if (purchase) { const purchaseTyped = purchase if (purchaseTyped.hash) { await writeService.writeObject('purchase', purchaseTyped.hash, event, purchaseTyped, 0, false, purchaseTyped.index ?? 0, false) } } } } } export async function cacheSponsoring(events: Event[]): Promise { const { writeService } = await import('../writeService') const { parseSponsoringFromEvent } = await import('../nostrEventParsing') for (const event of events) { const extracted = await extractSponsoringFromEvent(event) if (extracted) { const sponsoring = await parseSponsoringFromEvent(event) if (sponsoring) { const sponsoringTyped = sponsoring if (sponsoringTyped.hash) { await writeService.writeObject('sponsoring', sponsoringTyped.hash, event, sponsoringTyped, 0, false, sponsoringTyped.index ?? 0, false) } } } } } export async function cacheReviewTips(events: Event[]): Promise { const { writeService } = await import('../writeService') const { parseReviewTipFromEvent } = await import('../nostrEventParsing') for (const event of events) { const extracted = await extractReviewTipFromEvent(event) if (extracted) { const reviewTip = await parseReviewTipFromEvent(event) if (reviewTip) { const reviewTipTyped = reviewTip if (reviewTipTyped.hash) { await writeService.writeObject('review_tip', reviewTipTyped.hash, event, reviewTipTyped, 0, false, reviewTipTyped.index ?? 0, false) } } } } } export async function cachePaymentNotes(events: Event[]): Promise { const { writeService } = await import('../writeService') for (const event of events) { const tags = extractTagsFromEvent(event) if (tags.type === 'payment' && tags.payment) { await writeService.writeObject('payment_note', event.id, event, { id: event.id, type: 'payment_note', eventId: event.id, }, 0, false, 0, false) } } }