From dd3fbfdae642ea5ebfceffdf82b7b1726efbbe84 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Sun, 14 Jun 2026 16:10:26 -0400 Subject: [PATCH] refactor(blocks): route block-list sub through SubscriptionManager (P4) kind-10000/30002 block-list live subscription now goes through L1 (dedup + reconnect re-issue), handle closed on teardown; relaySubscriptionService kept as manager-less fallback. user-blocks + dm-block-filter suites pass. Co-Authored-By: Claude Opus 4.8 --- js/userBlocks.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/js/userBlocks.js b/js/userBlocks.js index 8a787f4d..c0f0316d 100644 --- a/js/userBlocks.js +++ b/js/userBlocks.js @@ -752,6 +752,14 @@ class UserBlockListManager { } stopBlockListSubscription() { + if (this.blockListSubscriptionHandle) { + try { + this.blockListSubscriptionHandle.close(); + } catch (error) { + devLogger.warn("[UserBlockList] Failed to close block-list subscription handle", error); + } + this.blockListSubscriptionHandle = null; + } if (this.blockListSubscriptionKey) { relaySubscriptionService.stopSubscription( this.blockListSubscriptionKey, @@ -775,6 +783,23 @@ class UserBlockListManager { { kinds: [30002], authors: [normalized], "#d": [BLOCK_LIST_IDENTIFIER] }, ]; + // Route through the L1 SubscriptionManager when available (dedup + reconnect + // re-issue); fall back to relaySubscriptionService in manager-less envs. + const manager = + typeof nostrClient.getSubscriptionManager === "function" + ? nostrClient.getSubscriptionManager() + : null; + if (manager) { + this.blockListSubscriptionHandle = manager.subscribe({ + key, + relays, + filters, + label: "block-list", + onEvent: (event) => this.handleBlockListEvent(event), + }); + return this.blockListSubscriptionHandle; + } + return relaySubscriptionService.ensureSubscription({ key, pool: nostrClient.pool,