From 61072aef4018249d64624e8402ce45bc8f13042c Mon Sep 17 00:00:00 2001 From: Gigi Date: Fri, 17 Oct 2025 20:44:48 +0200 Subject: [PATCH] refactor: remove concurrent decryption in favor of sequential Removed mapWithConcurrency hack: - Simpler code with plain for loop - More predictable behavior - Better for bunker signers (network round-trips) - Each decrypt happens in order, no race conditions Sequential processing is cleaner and works better with remote signers. --- src/services/bookmarkProcessing.ts | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/services/bookmarkProcessing.ts b/src/services/bookmarkProcessing.ts index 7d9ce059..fe04f346 100644 --- a/src/services/bookmarkProcessing.ts +++ b/src/services/bookmarkProcessing.ts @@ -5,7 +5,7 @@ import { } from '../types/bookmarks' import { BookmarkHiddenSymbol, hasNip04Decrypt, hasNip44Decrypt, processApplesauceBookmarks } from './bookmarkHelpers' import type { NostrEvent } from './bookmarkHelpers' -import { mapWithConcurrency, withTimeout } from '../utils/async' +import { withTimeout } from '../utils/async' type DecryptFn = (pubkey: string, content: string) => Promise type UnlockHiddenTagsFn = typeof Helpers.unlockHiddenTags @@ -193,19 +193,15 @@ export async function collectBookmarksFromEvents( } } - // Run decrypt jobs with limited concurrency (6 parallel at most) + // Decrypt events sequentially const privateItemsAll: IndividualBookmark[] = [] if (decryptJobs.length > 0 && signerCandidate) { - const privateChunks = await mapWithConcurrency( - decryptJobs, - 6, - async (job) => decryptEvent(job.evt, activeAccount, signerCandidate, job.metadata) - ) - privateChunks.forEach(chunk => { - if (chunk && chunk.length > 0) { - privateItemsAll.push(...chunk) + for (const job of decryptJobs) { + const privateItems = await decryptEvent(job.evt, activeAccount, signerCandidate, job.metadata) + if (privateItems && privateItems.length > 0) { + privateItemsAll.push(...privateItems) } - }) + } } return { publicItemsAll, privateItemsAll, newestCreatedAt, latestContent, allTags }