From 7d278d6fc21e73a3924c7e49a228102678f2018f Mon Sep 17 00:00:00 2001 From: Ashis Kumar Naik Date: Wed, 18 Jun 2025 19:43:42 +0530 Subject: [PATCH] feat(store): add query options and fallback for store queries to improve reliability and limit results Signed-off-by: Ashis Kumar Naik --- src/lib/waku/store.ts | 58 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/src/lib/waku/store.ts b/src/lib/waku/store.ts index 2ffaea8..c51d41c 100644 --- a/src/lib/waku/store.ts +++ b/src/lib/waku/store.ts @@ -12,16 +12,56 @@ class StoreManager { public async queryStore() { const result: (CellMessage | PostMessage | CommentMessage | VoteMessage)[] = []; - - await this.node.store.queryWithOrderedCallback( - Object.values(decoders), - (message: IDecodedMessage) => { - const { payload} = message; - const decodedMessage = decodeMessage(payload); - result.push(decodedMessage); - } - ); + try { + // Add query options to prevent database overload + const queryOptions = { + paginationLimit: 50, // Correct parameter name for page size + timeStart: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000), // Last 7 days + timeEnd: new Date(), // Current time + paginationForward: false, // false = newest first + includeData: true // Include full message data + }; + + // Try with query options first, fallback to no options if it fails + try { + await this.node.store.queryWithOrderedCallback( + Object.values(decoders), + (message: IDecodedMessage) => { + const { payload } = message; + const decodedMessage = decodeMessage(payload); + result.push(decodedMessage); + }, + queryOptions + ); + } catch (queryError) { + console.warn("Query with options failed, trying without options:", queryError); + // Fallback: query without options but add manual limit + let messageCount = 0; + const MAX_MESSAGES = 100; + + await this.node.store.queryWithOrderedCallback( + Object.values(decoders), + (message: IDecodedMessage) => { + if (messageCount >= MAX_MESSAGES) { + return; + } + + const { payload } = message; + const decodedMessage = decodeMessage(payload); + result.push(decodedMessage); + messageCount++; + } + ); + } + + if (result.length > 0) { + console.log(`Store query completed. Found ${result.length} messages`); + } + } catch (error) { + console.error("Store query failed:", error); + throw error; + } return result; }