about summary refs log tree commit diff
path: root/src/lib/api/feed
diff options
context:
space:
mode:
authorSamuel Newman <mozzius@protonmail.com>2025-07-02 00:36:04 +0300
committerGitHub <noreply@github.com>2025-07-01 14:36:04 -0700
commitbc072570d27e1f397406daea355570f5aec95647 (patch)
tree0d698c0bababd9b5e221df763a1ab15744ebdb71 /src/lib/api/feed
parent8f9a8ddce022e328b07b793c3f1500e1c423ef73 (diff)
downloadvoidsky-bc072570d27e1f397406daea355570f5aec95647.tar.zst
Activity notification settings (#8485)
Co-authored-by: Eric Bailey <git@esb.lol>
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
Co-authored-by: hailey <me@haileyok.com>
Diffstat (limited to 'src/lib/api/feed')
-rw-r--r--src/lib/api/feed/list.ts12
-rw-r--r--src/lib/api/feed/posts.ts52
2 files changed, 58 insertions, 6 deletions
diff --git a/src/lib/api/feed/list.ts b/src/lib/api/feed/list.ts
index 9744e3d4c..9697b0aaf 100644
--- a/src/lib/api/feed/list.ts
+++ b/src/lib/api/feed/list.ts
@@ -1,20 +1,20 @@
 import {
-  AppBskyFeedDefs,
-  AppBskyFeedGetListFeed as GetListFeed,
-  BskyAgent,
+  type Agent,
+  type AppBskyFeedDefs,
+  type AppBskyFeedGetListFeed as GetListFeed,
 } from '@atproto/api'
 
-import {FeedAPI, FeedAPIResponse} from './types'
+import {type FeedAPI, type FeedAPIResponse} from './types'
 
 export class ListFeedAPI implements FeedAPI {
-  agent: BskyAgent
+  agent: Agent
   params: GetListFeed.QueryParams
 
   constructor({
     agent,
     feedParams,
   }: {
-    agent: BskyAgent
+    agent: Agent
     feedParams: GetListFeed.QueryParams
   }) {
     this.agent = agent
diff --git a/src/lib/api/feed/posts.ts b/src/lib/api/feed/posts.ts
new file mode 100644
index 000000000..33eff5099
--- /dev/null
+++ b/src/lib/api/feed/posts.ts
@@ -0,0 +1,52 @@
+import {
+  type Agent,
+  type AppBskyFeedDefs,
+  type AppBskyFeedGetPosts,
+} from '@atproto/api'
+
+import {logger} from '#/logger'
+import {type FeedAPI, type FeedAPIResponse} from './types'
+
+export class PostListFeedAPI implements FeedAPI {
+  agent: Agent
+  params: AppBskyFeedGetPosts.QueryParams
+  peek: AppBskyFeedDefs.FeedViewPost | null = null
+
+  constructor({
+    agent,
+    feedParams,
+  }: {
+    agent: Agent
+    feedParams: AppBskyFeedGetPosts.QueryParams
+  }) {
+    this.agent = agent
+    if (feedParams.uris.length > 25) {
+      logger.warn(
+        `Too many URIs provided - expected 25, got ${feedParams.uris.length}`,
+      )
+    }
+    this.params = {
+      uris: feedParams.uris.slice(0, 25),
+    }
+  }
+
+  async peekLatest(): Promise<AppBskyFeedDefs.FeedViewPost> {
+    if (this.peek) return this.peek
+    throw new Error('Has not fetched yet')
+  }
+
+  async fetch({}: {}): Promise<FeedAPIResponse> {
+    const res = await this.agent.app.bsky.feed.getPosts({
+      ...this.params,
+    })
+    if (res.success) {
+      this.peek = {post: res.data.posts[0]}
+      return {
+        feed: res.data.posts.map(post => ({post})),
+      }
+    }
+    return {
+      feed: [],
+    }
+  }
+}