From bab2895848ed9ca21fad8abc11a4040071449c66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Lohrer?= Date: Wed, 15 Apr 2026 17:19:21 +0200 Subject: [PATCH] =?UTF-8?q?spa(task=2012):=20replies-loader=20f=C3=BCr=20k?= =?UTF-8?q?ind:1=20mit=20a-tag-filter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fügt `loadReplies(dtag)` an loaders.ts an. Filter `#a` auf das addressable-Event-Format "30023::" findet alle kind:1 Replies auf den Post. Sortiert aufsteigend (älteste zuerst). Co-Authored-By: Claude Opus 4.6 (1M context) --- app/src/lib/nostr/loaders.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/app/src/lib/nostr/loaders.ts b/app/src/lib/nostr/loaders.ts index 58c3b88..fb8213d 100644 --- a/app/src/lib/nostr/loaders.ts +++ b/app/src/lib/nostr/loaders.ts @@ -121,3 +121,26 @@ export async function loadProfile(): Promise { return null; } } + +/** Post-Adresse im `a`-Tag-Format: "30023::" */ +function eventAddress(pubkey: string, dtag: string): string { + return `30023:${pubkey}:${dtag}`; +} + +/** + * Alle kind:1-Replies auf einen Post, chronologisch aufsteigend (älteste zuerst). + * Streamt via onEvent, wenn angegeben. + */ +export async function loadReplies( + dtag: string, + onEvent?: (ev: NostrEvent) => void +): Promise { + const relays = get(readRelays); + const address = eventAddress(AUTHOR_PUBKEY_HEX, dtag); + const events = await collectEvents( + relays, + { kinds: [1], '#a': [address], limit: 500 }, + { onEvent } + ); + return events.sort((a, b) => a.created_at - b.created_at); +}