From 2905bbea646584ea9443a4343e361ad980a47e80 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Mon, 20 Oct 2025 12:43:22 -0400 Subject: [PATCH] Refactor admin list relay publishing --- js/adminListStore.js | 102 +++++++------------------------------------ 1 file changed, 16 insertions(+), 86 deletions(-) diff --git a/js/adminListStore.js b/js/adminListStore.js index 59845dc5..153aeab4 100644 --- a/js/adminListStore.js +++ b/js/adminListStore.js @@ -16,6 +16,7 @@ import { buildAdminListEvent, ADMIN_LIST_IDENTIFIERS, } from "./nostrEventSchemas.js"; +import { publishEventToRelays } from "./nostrPublish.js"; const LEGACY_STORAGE_KEYS = { editors: "bitvid_admin_editors", @@ -25,8 +26,6 @@ const LEGACY_STORAGE_KEYS = { blacklistLegacy: "bitvid_blacklist", }; -const PUBLISH_TIMEOUT_MS = 7000; - function createError(code, message, cause) { const error = new Error(message); error.code = code; @@ -534,88 +533,6 @@ function buildListEvent(listKey, npubs, actorHex) { }); } -function publishToRelay(url, signedEvent, listKey) { - return new Promise((resolve) => { - let settled = false; - const timeout = setTimeout(() => { - if (!settled) { - settled = true; - resolve({ url, success: false, error: new Error("timeout") }); - } - }, PUBLISH_TIMEOUT_MS); - - const finalize = (success, error) => { - if (settled) { - return; - } - settled = true; - clearTimeout(timeout); - resolve({ url, success, error }); - }; - - try { - const pub = nostrClient.pool.publish([url], signedEvent); - if (!pub) { - finalize(false, new Error("publish returned no result")); - return; - } - - if (typeof pub.on === "function") { - const registerHandler = (eventName, handler) => { - try { - pub.on(eventName, handler); - return true; - } catch (error) { - devLogger.warn( - `[adminListStore] Relay publish rejected ${eventName} listener:`, - error - ); - return false; - } - }; - - const handleFailure = (reason) => { - const error = - reason instanceof Error - ? reason - : new Error(String(reason || "failed")); - finalize(false, error); - }; - - let handlerRegistered = false; - handlerRegistered = - registerHandler("ok", () => finalize(true)) || handlerRegistered; - handlerRegistered = - registerHandler("seen", () => finalize(true)) || handlerRegistered; - handlerRegistered = - registerHandler("failed", handleFailure) || handlerRegistered; - - if (handlerRegistered) { - return; - } - } - - if (typeof pub.then === "function") { - pub.then(() => finalize(true)).catch((error) => finalize(false, error)); - return; - } - } catch (error) { - finalize(false, error); - return; - } - - finalize(true); - }).then((result) => { - if (!result.success && isDevMode) { - userLogger.warn( - `[adminListStore] Publish failed for ${listKey} on ${result.url}:`, - result.error - ); - } - return result; - }); -} - async function persistNostrState(actorNpub, updates = {}) { ensureNostrReady(); const permissionResult = await requestDefaultExtensionPermissions(); @@ -703,10 +620,23 @@ async function persistNostrState(actorNpub, updates = {}) { } const relays = ensureNostrReady(); - const publishResults = await Promise.all( - relays.map((url) => publishToRelay(url, signedEvent, listKey)) + const publishResults = await publishEventToRelays( + nostrClient.pool, + relays, + signedEvent, ); + if (isDevMode) { + publishResults + .filter((result) => !result.success) + .forEach((result) => { + userLogger.warn( + `[adminListStore] Publish failed for ${listKey} on ${result.url}:`, + result.error, + ); + }); + } + if (!publishResults.some((result) => result.success)) { throw createError( "publish-failed",