fix: handle JSON parse error for repost event content

This commit is contained in:
codytseng
2025-11-02 22:02:01 +08:00
parent 2ae223b552
commit dab47e9a69
2 changed files with 44 additions and 34 deletions

View File

@@ -33,44 +33,47 @@ export default function RepostNoteCard({
}, [targetEvent, filterMutedNotes, hideContentMentioningMutedUsers, mutePubkeySet])
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)
let eventFromContent: Event | null = null
if (event.content) {
try {
eventFromContent = JSON.parse(event.content) as Event
} catch {
eventFromContent = 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
}
let targetEventId: string | undefined
const aTag = event.tags.find(tagNameEquals('a'))
if (aTag) {
targetEventId = generateBech32IdFromATag(aTag)
} else {
const eTag = event.tags.find(tagNameEquals('e'))
if (eTag) {
targetEventId = generateBech32IdFromETag(eTag)
}
}
if (!targetEventId) {
return
let targetEventId: string | undefined
const aTag = event.tags.find(tagNameEquals('a'))
if (aTag) {
targetEventId = generateBech32IdFromATag(aTag)
} else {
const eTag = event.tags.find(tagNameEquals('e'))
if (eTag) {
targetEventId = generateBech32IdFromETag(eTag)
}
}
if (!targetEventId) {
return
}
const targetEvent = await client.fetchEvent(targetEventId)
if (targetEvent) {
setTargetEvent(targetEvent)
}
} catch {
// ignore
const targetEvent = await client.fetchEvent(targetEventId)
if (targetEvent) {
setTargetEvent(targetEvent)
}
}
fetch()

View File

@@ -133,7 +133,14 @@ const NoteList = forwardRef(
return
}
const eventFromContent = evt.content ? (JSON.parse(evt.content) as Event) : null
let eventFromContent: Event | null = null
if (evt.content) {
try {
eventFromContent = JSON.parse(evt.content) as Event
} catch {
eventFromContent = null
}
}
if (eventFromContent && verifyEvent(eventFromContent)) {
if (eventFromContent.kind === kinds.Repost) {
return