mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1import { 2 type Agent, 3 type AppBskyFeedDefs, 4 type AppBskyFeedGetPosts, 5} from '@atproto/api' 6 7import {logger} from '#/logger' 8import {type FeedAPI, type FeedAPIResponse} from './types' 9 10export class PostListFeedAPI implements FeedAPI { 11 agent: Agent 12 params: AppBskyFeedGetPosts.QueryParams 13 peek: AppBskyFeedDefs.FeedViewPost | null = null 14 15 constructor({ 16 agent, 17 feedParams, 18 }: { 19 agent: Agent 20 feedParams: AppBskyFeedGetPosts.QueryParams 21 }) { 22 this.agent = agent 23 if (feedParams.uris.length > 25) { 24 logger.warn( 25 `Too many URIs provided - expected 25, got ${feedParams.uris.length}`, 26 ) 27 } 28 this.params = { 29 uris: feedParams.uris.slice(0, 25), 30 } 31 } 32 33 async peekLatest(): Promise<AppBskyFeedDefs.FeedViewPost> { 34 if (this.peek) return this.peek 35 throw new Error('Has not fetched yet') 36 } 37 38 async fetch({}: {}): Promise<FeedAPIResponse> { 39 const res = await this.agent.app.bsky.feed.getPosts({ 40 ...this.params, 41 }) 42 if (res.success) { 43 this.peek = {post: res.data.posts[0]} 44 return { 45 feed: res.data.posts.map(post => ({post})), 46 } 47 } 48 return { 49 feed: [], 50 } 51 } 52}