fix: clear content when reposting protected events
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import { tagNameEquals } from '@/lib/tag'
|
||||
import { useMuteList } from '@/providers/MuteListProvider'
|
||||
import client from '@/services/client.service'
|
||||
import { Event, kinds, verifyEvent } from 'nostr-tools'
|
||||
import { useMemo } from 'react'
|
||||
import { Event, kinds, nip19, verifyEvent } from 'nostr-tools'
|
||||
import { useEffect, useState } from 'react'
|
||||
import GenericNoteCard from './GenericNoteCard'
|
||||
|
||||
export default function RepostNoteCard({
|
||||
@@ -14,25 +15,47 @@ export default function RepostNoteCard({
|
||||
filterMutedNotes?: boolean
|
||||
}) {
|
||||
const { mutePubkeys } = useMuteList()
|
||||
const targetEvent = useMemo(() => {
|
||||
try {
|
||||
const targetEvent = event.content ? (JSON.parse(event.content) as Event) : null
|
||||
if (!targetEvent || !verifyEvent(targetEvent) || targetEvent.kind === kinds.Repost) {
|
||||
return null
|
||||
}
|
||||
client.addEventToCache(targetEvent)
|
||||
const targetSeenOn = client.getSeenEventRelays(targetEvent.id)
|
||||
if (targetSeenOn.length === 0) {
|
||||
const seenOn = client.getSeenEventRelays(event.id)
|
||||
seenOn.forEach((relay) => {
|
||||
client.trackEventSeenOn(targetEvent.id, relay)
|
||||
const [targetEvent, setTargetEvent] = useState<Event | null>(null)
|
||||
useEffect(() => {
|
||||
const fetch = async () => {
|
||||
try {
|
||||
const eventFromContent = event.content ? (JSON.parse(event.content) as Event) : null
|
||||
if (eventFromContent && verifyEvent(eventFromContent)) {
|
||||
if (eventFromContent.kind === kinds.Repost) {
|
||||
return
|
||||
}
|
||||
client.addEventToCache(eventFromContent)
|
||||
const targetSeenOn = client.getSeenEventRelays(eventFromContent.id)
|
||||
if (targetSeenOn.length === 0) {
|
||||
const seenOn = client.getSeenEventRelays(event.id)
|
||||
seenOn.forEach((relay) => {
|
||||
client.trackEventSeenOn(eventFromContent.id, relay)
|
||||
})
|
||||
}
|
||||
setTargetEvent(eventFromContent)
|
||||
return
|
||||
}
|
||||
|
||||
const [, id, relay, , pubkey] = event.tags.find(tagNameEquals('e')) ?? []
|
||||
if (!id) {
|
||||
return
|
||||
}
|
||||
const targetEventId = nip19.neventEncode({
|
||||
id,
|
||||
relays: relay ? [relay] : [],
|
||||
author: pubkey
|
||||
})
|
||||
const targetEvent = await client.fetchEvent(targetEventId)
|
||||
if (targetEvent) {
|
||||
setTargetEvent(targetEvent)
|
||||
}
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
return targetEvent
|
||||
} catch {
|
||||
return null
|
||||
}
|
||||
fetch()
|
||||
}, [event])
|
||||
|
||||
if (!targetEvent) return null
|
||||
if (filterMutedNotes && mutePubkeys.includes(targetEvent.pubkey)) {
|
||||
return null
|
||||
|
||||
Reference in New Issue
Block a user