diff --git a/lib/shared/farcaster/farcaster-hooks.js b/lib/shared/farcaster/farcaster-hooks.js --- a/lib/shared/farcaster/farcaster-hooks.js +++ b/lib/shared/farcaster/farcaster-hooks.js @@ -757,19 +757,24 @@ ); } -function useFetchInboxes(): ( - category?: 'archived' | 'request', -) => Promise<$ReadOnlyArray> { +function useFetchInboxes(): (category?: 'archived' | 'request') => Promise<{ + +conversations: $ReadOnlyArray, + +fetchSuccessful: boolean, +}> { const fetchFarcasterInbox = useFetchFarcasterInbox(); const { addLog } = useDebugLogs(); return React.useCallback( async ( category?: 'archived' | 'request', - ): Promise<$ReadOnlyArray> => { + ): Promise<{ + +conversations: $ReadOnlyArray, + +fetchSuccessful: boolean, + }> => { const allConversations: Array = []; let currentCursor = null; let pageNumber = 0; + let fetchSuccessful = true; while (true) { pageNumber++; @@ -820,24 +825,31 @@ }), new Set([logTypes.FARCASTER]), ); + fetchSuccessful = false; break; } } - return allConversations; + return { conversations: allConversations, fetchSuccessful }; }, [addLog, fetchFarcasterInbox], ); } -function useFetchInboxIDs(): ( - category?: 'archived' | 'request', -) => Promise<$ReadOnlyArray> { +function useFetchInboxIDs(): (category?: 'archived' | 'request') => Promise<{ + +conversationIDs: $ReadOnlyArray, + +fetchSuccessful: boolean, +}> { const fetchInboxes = useFetchInboxes(); return React.useCallback( async (category?: 'archived' | 'request') => { - const conversations = await fetchInboxes(category); - return conversations.map(conversation => conversation.conversationId); + const { conversations, fetchSuccessful } = await fetchInboxes(category); + return { + conversationIDs: conversations.map( + conversation => conversation.conversationId, + ), + fetchSuccessful, + }; }, [fetchInboxes], ); @@ -908,9 +920,16 @@ fetchInboxes('request'), fetchInboxes('archived'), ]); - const conversations = inboxResults.flat(); + const allFetchSuccessful = inboxResults.every( + result => result.fetchSuccessful, + ); + const conversations = inboxResults.flatMap( + result => result.conversationIDs, + ); - removeDeadThreads(conversations); + if (allFetchSuccessful) { + removeDeadThreads(conversations); + } if (conversations.length === 0) { addLog( @@ -980,12 +999,19 @@ fetchInboxes('request'), fetchInboxes('archived'), ]); - const conversations = inboxResults.flat(); + const allFetchSuccessful = inboxResults.every( + result => result.fetchSuccessful, + ); + const conversations = inboxResults.flatMap( + result => result.conversations, + ); const conversationIDs = conversations.map( conversation => conversation.conversationId, ); - removeDeadThreads(conversationIDs); + if (allFetchSuccessful) { + removeDeadThreads(conversationIDs); + } const threadIDs = new Set(Object.keys(threadInfos)); const newConversationIDs = [];