about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/state/queries/feed.ts53
1 files changed, 33 insertions, 20 deletions
diff --git a/src/state/queries/feed.ts b/src/state/queries/feed.ts
index 75aac5cdb..e431643e7 100644
--- a/src/state/queries/feed.ts
+++ b/src/state/queries/feed.ts
@@ -15,6 +15,7 @@ import {
   AppBskyUnspeccedGetPopularFeedGenerators,
 } from '@atproto/api'
 
+import {logger} from '#/logger'
 import {router} from '#/routes'
 import {sanitizeDisplayName} from '#/lib/strings/display-names'
 import {sanitizeHandle} from '#/lib/strings/handles'
@@ -289,30 +290,42 @@ export function usePinnedFeedsInfos(): {
           reqs.push(cached)
         } else {
           reqs.push(
-            queryClient.fetchQuery({
-              queryKey: feedSourceInfoQueryKey({uri}),
-              queryFn: async () => {
-                const type = getFeedTypeFromUri(uri)
-
-                if (type === 'feed') {
-                  const res = await getAgent().app.bsky.feed.getFeedGenerator({
-                    feed: uri,
-                  })
-                  return hydrateFeedGenerator(res.data.view)
-                } else {
-                  const res = await getAgent().app.bsky.graph.getList({
-                    list: uri,
-                    limit: 1,
-                  })
-                  return hydrateList(res.data.list)
-                }
-              },
-            }),
+            (async () => {
+              // these requests can fail, need to filter those out
+              try {
+                return await queryClient.fetchQuery({
+                  queryKey: feedSourceInfoQueryKey({uri}),
+                  queryFn: async () => {
+                    const type = getFeedTypeFromUri(uri)
+
+                    if (type === 'feed') {
+                      const res =
+                        await getAgent().app.bsky.feed.getFeedGenerator({
+                          feed: uri,
+                        })
+                      return hydrateFeedGenerator(res.data.view)
+                    } else {
+                      const res = await getAgent().app.bsky.graph.getList({
+                        list: uri,
+                        limit: 1,
+                      })
+                      return hydrateList(res.data.list)
+                    }
+                  },
+                })
+              } catch (e) {
+                logger.warn(`usePinnedFeedsInfos: failed to fetch ${uri}`, {
+                  error: e,
+                })
+              }
+            })(),
           )
         }
       }
 
-      const views = await Promise.all(reqs)
+      const views = (await Promise.all(reqs)).filter(
+        Boolean,
+      ) as FeedSourceInfo[]
 
       setTabs([FOLLOWING_FEED_STUB].concat(views))
     }