diff --git a/js/services/hashtagPreferencesService.js b/js/services/hashtagPreferencesService.js index bc481a51..d39189ec 100644 --- a/js/services/hashtagPreferencesService.js +++ b/js/services/hashtagPreferencesService.js @@ -775,19 +775,21 @@ class HashtagPreferencesService { const decryptPromise = this.decryptEvent(latest, normalized, { allowPermissionPrompt, }); - const timeoutPromise = new Promise((_, reject) => - setTimeout( - () => { - const timeoutError = new Error( - `Decryption timed out after ${DECRYPT_TIMEOUT_MS / 1000}s`, - ); - timeoutError.code = "hashtag-preferences-decrypt-timeout"; - reject(timeoutError); - }, - DECRYPT_TIMEOUT_MS, - ), - ); - decryptResult = await Promise.race([decryptPromise, timeoutPromise]); + let timeoutId; + const timeoutPromise = new Promise((_, reject) => { + timeoutId = setTimeout(() => { + const timeoutError = new Error( + `Decryption timed out after ${DECRYPT_TIMEOUT_MS / 1000}s`, + ); + timeoutError.code = "hashtag-preferences-decrypt-timeout"; + reject(timeoutError); + }, DECRYPT_TIMEOUT_MS); + }); + try { + decryptResult = await Promise.race([decryptPromise, timeoutPromise]); + } finally { + if (timeoutId) clearTimeout(timeoutId); + } } catch (error) { decryptResult = { ok: false, error }; } diff --git a/tests/hashtag-preferences.test.mjs b/tests/hashtag-preferences.test.mjs index e82e2a56..fb88471f 100644 --- a/tests/hashtag-preferences.test.mjs +++ b/tests/hashtag-preferences.test.mjs @@ -251,7 +251,7 @@ test( let fetchCalls = 0; nostrClient.fetchListIncrementally = async () => { fetchCalls += 1; - return [event]; + return fetchCalls <= 4 ? [event] : []; }; nostrClient.relays = relayUrls; nostrClient.writeRelays = relayUrls;