85 lines
2.5 KiB
TypeScript
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,
|
|
},
|
|
})
|
|
}
|
|
}
|
|
}
|