From 3519ba5ec828a9db36976a40482ba79b63dfa2a7 Mon Sep 17 00:00:00 2001 From: Silberengel Date: Fri, 10 Oct 2025 20:56:16 +0200 Subject: [PATCH] fixed superzaps --- src/components/KindFilter/index.tsx | 3 +- src/components/Note/Zap.tsx | 11 ++- src/components/ReplyNote/index.tsx | 1 + src/components/ReplyNoteList/index.tsx | 103 ++----------------------- src/services/local-storage.service.ts | 9 ++- 5 files changed, 25 insertions(+), 102 deletions(-) diff --git a/src/components/KindFilter/index.tsx b/src/components/KindFilter/index.tsx index 78d146c..4003c3e 100644 --- a/src/components/KindFilter/index.tsx +++ b/src/components/KindFilter/index.tsx @@ -128,7 +128,8 @@ export default function KindFilter({ )} diff --git a/src/components/ReplyNote/index.tsx b/src/components/ReplyNote/index.tsx index 915173d..bb12958 100644 --- a/src/components/ReplyNote/index.tsx +++ b/src/components/ReplyNote/index.tsx @@ -51,6 +51,7 @@ export default function ReplyNote({ return true }, [showMuted, mutePubkeySet, event, hideContentMentioningMutedUsers]) + return (
(undefined) const { repliesMap, addReplies } = useReply() - const [zapEvents, setZapEvents] = useState([]) - const { zapReplyThreshold } = useZap() // Helper function to get vote score for a reply const getReplyVoteScore = (reply: NEvent) => { @@ -87,10 +83,6 @@ function ReplyNoteList({ index, event, sort = 'oldest' }: { index?: number; even return totalAmount } const replies = useMemo(() => { - console.log(`[ReplyNoteList] Processing replies for event ${event.id.slice(0, 8)}...`) - console.log(`[ReplyNoteList] zapEvents.length: ${zapEvents.length}`) - console.log(`[ReplyNoteList] zapReplyThreshold: ${zapReplyThreshold}`) - const replyIdSet = new Set() const replyEvents: NEvent[] = [] const currentEventKey = isReplaceableEvent(event.kind) @@ -110,44 +102,6 @@ function ReplyNoteList({ index, event, sort = 'oldest' }: { index?: number; even parentEventKeys = events.map((evt) => evt.id) } - // Add zap receipts that are above the threshold - console.log(`========== ZAP FILTERING START ==========`) - console.log(`Processing ${zapEvents.length} zap events with threshold ${zapReplyThreshold} sats`) - zapEvents.forEach((zapEvt) => { - console.log(`\n--- Processing zap: ${zapEvt.id.slice(0, 8)}... ---`) - console.log(`Created: ${new Date(zapEvt.created_at * 1000).toISOString()}`) - - if (replyIdSet.has(zapEvt.id)) { - console.log(`❌ Already in set, skipping`) - return - } - if (mutePubkeySet.has(zapEvt.pubkey)) { - console.log(`❌ From muted user, skipping`) - return - } - - const zapInfo = getZapInfoFromEvent(zapEvt) - - if (!zapInfo) { - console.log(`❌ No valid zapInfo`) - return - } - - console.log(`💰 Zap amount: ${zapInfo.amount} sats`) - console.log(`🎯 Threshold: ${zapReplyThreshold} sats`) - console.log(`🔢 Comparison: ${zapInfo.amount} >= ${zapReplyThreshold} = ${zapInfo.amount >= zapReplyThreshold}`) - - if (zapInfo.amount >= zapReplyThreshold) { - console.log(`✅ PASSED - Adding to replies`) - replyIdSet.add(zapEvt.id) - replyEvents.push(zapEvt) - } else { - console.log(`❌ FILTERED OUT - ${zapInfo.amount} < ${zapReplyThreshold}`) - } - }) - console.log(`\n========== ZAP FILTERING END ==========`) - console.log(`Total zaps that passed: ${replyEvents.filter(e => e.kind === kinds.Zap).length}`) - console.log(`Total reply events: ${replyEvents.length}`) // Apply sorting based on the sort parameter switch (sort) { @@ -188,7 +142,7 @@ function ReplyNoteList({ index, event, sort = 'oldest' }: { index?: number; even default: return replyEvents.sort((a, b) => b.created_at - a.created_at) } - }, [event.id, repliesMap, zapEvents, zapReplyThreshold, mutePubkeySet, hideContentMentioningMutedUsers, sort]) + }, [event.id, repliesMap, mutePubkeySet, hideContentMentioningMutedUsers, sort]) const [timelineKey, setTimelineKey] = useState(undefined) const [until, setUntil] = useState(undefined) const [loading, setLoading] = useState(false) @@ -267,7 +221,6 @@ function ReplyNoteList({ index, event, sort = 'oldest' }: { index?: number; even setLoading(true) try { - console.log(`[ReplyNoteList] Starting init with rootInfo:`, rootInfo) // Privacy: Only use user's own relays + defaults, never connect to other users' relays const userRelays = userRelayList?.read || [] @@ -324,27 +277,6 @@ function ReplyNoteList({ index, event, sort = 'oldest' }: { index?: number; even }) } - // Fetch zap receipts for the event - if (rootInfo.type === 'E') { - console.log(`[ReplyNoteList] Adding zap filter for E type: #e=[${rootInfo.id}], kinds=[${kinds.Zap}]`) - filters.push({ - '#e': [rootInfo.id], - kinds: [kinds.Zap], - limit: LIMIT - }) - } else if (rootInfo.type === 'A') { - console.log(`[ReplyNoteList] Adding zap filter for A type: #a=[${rootInfo.id}], kinds=[${kinds.Zap}]`) - filters.push({ - '#a': [rootInfo.id], - kinds: [kinds.Zap], - limit: LIMIT - }) - } - - console.log(`[ReplyNoteList] Total filters: ${filters.length}`) - filters.forEach((filter, i) => { - console.log(`[ReplyNoteList] Filter ${i}:`, filter) - }) const { closer, timelineKey } = await client.subscribeTimeline( filters.map((filter) => ({ @@ -352,41 +284,18 @@ function ReplyNoteList({ index, event, sort = 'oldest' }: { index?: number; even filter })), { - onEvents: (evts, eosed) => { - if (evts.length > 0) { - const regularReplies = evts.filter((evt) => isReplyNoteEvent(evt)) - const zaps = evts.filter((evt) => evt.kind === kinds.Zap) - - console.log(`[ReplyNoteList] Received ${evts.length} events: ${regularReplies.length} regular replies, ${zaps.length} zaps`) - - addReplies(regularReplies) - if (zaps.length > 0) { - console.log(`[ReplyNoteList] Adding ${zaps.length} new zap events`) - setZapEvents(prev => { - const zapIdSet = new Set(prev.map(z => z.id)) - const newZaps = zaps.filter(z => !zapIdSet.has(z.id)) - console.log(`[ReplyNoteList] ${newZaps.length} are actually new (not duplicates)`) - return [...prev, ...newZaps] - }) + onEvents: (evts, eosed) => { + if (evts.length > 0) { + const regularReplies = evts.filter((evt) => isReplyNoteEvent(evt)) + addReplies(regularReplies) } - } if (eosed) { setUntil(evts.length >= LIMIT ? evts[evts.length - 1].created_at - 1 : undefined) setLoading(false) } }, onNew: (evt) => { - if (evt.kind === kinds.Zap) { - console.log(`[ReplyNoteList] New zap event received: ${evt.id.slice(0, 8)}...`) - setZapEvents(prev => { - if (prev.some(z => z.id === evt.id)) { - console.log(`[ReplyNoteList] Zap ${evt.id.slice(0, 8)} already exists, skipping`) - return prev - } - console.log(`[ReplyNoteList] Adding new zap: ${evt.id.slice(0, 8)}...`) - return [...prev, evt] - }) - } else if (isReplyNoteEvent(evt)) { + if (isReplyNoteEvent(evt)) { addReplies([evt]) } } diff --git a/src/services/local-storage.service.ts b/src/services/local-storage.service.ts index ea128bc..3639ce0 100644 --- a/src/services/local-storage.service.ts +++ b/src/services/local-storage.service.ts @@ -178,10 +178,17 @@ class LocalStorageService { if (showKindsVersion < 2) { showKinds.push(ExtendedKind.ZAP_RECEIPT) } + if (showKindsVersion < 3) { + // Remove reposts from existing users' filters + const repostIndex = showKinds.indexOf(kinds.Repost) + if (repostIndex !== -1) { + showKinds.splice(repostIndex, 1) + } + } this.showKinds = showKinds } window.localStorage.setItem(StorageKey.SHOW_KINDS, JSON.stringify(this.showKinds)) - window.localStorage.setItem(StorageKey.SHOW_KINDS_VERSION, '2') + window.localStorage.setItem(StorageKey.SHOW_KINDS_VERSION, '3') this.hideContentMentioningMutedUsers = window.localStorage.getItem(StorageKey.HIDE_CONTENT_MENTIONING_MUTED_USERS) === 'true'