mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-10 00:16:59 +00:00
Relay targeting is fully distributed: every feed, loader, finder and broadcast path builds its own relay set and hands it to the shared INostrClient. Only the follow-outbox flows and the top-nav feed filters subtracted the NIP-51 kind:10006 blocked list, so blocked relays still leaked in through the event/thread loaders (FilterMissingEvents / FilterMissingAddressables), the user-metadata finder (pickRelaysToLoadUsers), channel finder, DM targeting, the one-shot fetch helpers, and the publish path (Account.computeRelayListToBroadcast) — none of which consulted the blocked set. Add BlockedRelayFilteringClient, a thin INostrClient decorator that strips the active account's blocked relays from subscribe, count and publish right before they reach the pool. Because the one-shot fetch helpers route through subscribe/count, wrapping the client covers them too. The blocked set is read per-call so account switches and list edits apply with nothing to invalidate. Wire it around the shared app client (blocked set from the logged-in account) and around the per-account crawl client used by Event Sync and Cashu discovery. Add commonTest coverage for the filtering, pass-through, fully-blocked, and per-call-read behaviors. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JNMPdC2eGUwTrt3XkQefuf