Bpistle/src/lib/notification.ts
2025-12-31 18:22:23 +08:00

33 lines
906 B
TypeScript

import { kinds, NostrEvent } from 'nostr-tools'
import { isMentioningMutedUsers } from './event'
import { tagNameEquals } from './tag'
export async function notificationFilter(
event: NostrEvent,
{
pubkey,
mutePubkeySet,
hideContentMentioningMutedUsers,
meetsMinTrustScore
}: {
pubkey?: string | null
mutePubkeySet: Set<string>
hideContentMentioningMutedUsers?: boolean
meetsMinTrustScore: (pubkey: string, minScore?: number) => Promise<boolean>
}
): Promise<boolean> {
if (
mutePubkeySet.has(event.pubkey) ||
(hideContentMentioningMutedUsers && isMentioningMutedUsers(event, mutePubkeySet)) ||
!(await meetsMinTrustScore(event.pubkey))
) {
return false
}
if (pubkey && event.kind === kinds.Reaction) {
const targetPubkey = event.tags.findLast(tagNameEquals('p'))?.[1]
if (targetPubkey !== pubkey) return false
}
return true
}