import { AppContext } from '../../../../context' import { Server } from '../../../../lexicon' import { ids } from '../../../../lexicon/lexicons' import { OutputSchema } from '../../../../lexicon/types/app/bsky/feed/getTimeline' import { computeProxyTo } from '../../../../pipethrough' import { LocalRecords, LocalViewer, pipethroughReadAfterWrite, } from '../../../../read-after-write' export default function (server: Server, ctx: AppContext) { if (!ctx.bskyAppView) return server.app.bsky.feed.getTimeline({ auth: ctx.authVerifier.authorization({ authorize: (permissions, { req }) => { const lxm = ids.AppBskyFeedGetTimeline const aud = computeProxyTo(ctx, req, lxm) permissions.assertRpc({ aud, lxm }) }, }), handler: async (reqCtx) => { return pipethroughReadAfterWrite(ctx, reqCtx, getTimelineMunge) }, }) } const getTimelineMunge = async ( localViewer: LocalViewer, original: OutputSchema, local: LocalRecords, ): Promise => { const feed = await localViewer.formatAndInsertPostsInFeed( [...original.feed], local.posts, ) return { ...original, feed, } }