fix: handle JSON parse error for repost event content
This commit is contained in:
@@ -33,44 +33,47 @@ export default function RepostNoteCard({
|
|||||||
}, [targetEvent, filterMutedNotes, hideContentMentioningMutedUsers, mutePubkeySet])
|
}, [targetEvent, filterMutedNotes, hideContentMentioningMutedUsers, mutePubkeySet])
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetch = async () => {
|
const fetch = async () => {
|
||||||
try {
|
let eventFromContent: Event | null = null
|
||||||
const eventFromContent = event.content ? (JSON.parse(event.content) as Event) : null
|
if (event.content) {
|
||||||
if (eventFromContent && verifyEvent(eventFromContent)) {
|
try {
|
||||||
if (eventFromContent.kind === kinds.Repost) {
|
eventFromContent = JSON.parse(event.content) as Event
|
||||||
return
|
} catch {
|
||||||
}
|
eventFromContent = null
|
||||||
client.addEventToCache(eventFromContent)
|
}
|
||||||
const targetSeenOn = client.getSeenEventRelays(eventFromContent.id)
|
}
|
||||||
if (targetSeenOn.length === 0) {
|
if (eventFromContent && verifyEvent(eventFromContent)) {
|
||||||
const seenOn = client.getSeenEventRelays(event.id)
|
if (eventFromContent.kind === kinds.Repost) {
|
||||||
seenOn.forEach((relay) => {
|
|
||||||
client.trackEventSeenOn(eventFromContent.id, relay)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
setTargetEvent(eventFromContent)
|
|
||||||
return
|
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
|
let targetEventId: string | undefined
|
||||||
const aTag = event.tags.find(tagNameEquals('a'))
|
const aTag = event.tags.find(tagNameEquals('a'))
|
||||||
if (aTag) {
|
if (aTag) {
|
||||||
targetEventId = generateBech32IdFromATag(aTag)
|
targetEventId = generateBech32IdFromATag(aTag)
|
||||||
} else {
|
} else {
|
||||||
const eTag = event.tags.find(tagNameEquals('e'))
|
const eTag = event.tags.find(tagNameEquals('e'))
|
||||||
if (eTag) {
|
if (eTag) {
|
||||||
targetEventId = generateBech32IdFromETag(eTag)
|
targetEventId = generateBech32IdFromETag(eTag)
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!targetEventId) {
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (!targetEventId) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
const targetEvent = await client.fetchEvent(targetEventId)
|
const targetEvent = await client.fetchEvent(targetEventId)
|
||||||
if (targetEvent) {
|
if (targetEvent) {
|
||||||
setTargetEvent(targetEvent)
|
setTargetEvent(targetEvent)
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
// ignore
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fetch()
|
fetch()
|
||||||
|
|||||||
@@ -133,7 +133,14 @@ const NoteList = forwardRef(
|
|||||||
return
|
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 && verifyEvent(eventFromContent)) {
|
||||||
if (eventFromContent.kind === kinds.Repost) {
|
if (eventFromContent.kind === kinds.Repost) {
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user