mirror of
https://github.com/kennethnym/aris.git
synced 2026-03-20 00:51:20 +00:00
Expose the user's current feed via GET /api/feed. Returns cached feed from engine.lastFeed(), falling back to engine.refresh() when no cache exists. Auth middleware is injected as a dependency to allow test substitution via mockAuthSessionMiddleware. Co-authored-by: Ona <no-reply@ona.com>
42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import type { Context, Hono } from "hono"
|
|
|
|
import { createMiddleware } from "hono/factory"
|
|
|
|
import type { AuthSessionMiddleware } from "../auth/session-middleware.ts"
|
|
import type { UserSessionManager } from "../session/index.ts"
|
|
|
|
type Env = { Variables: { sessionManager: UserSessionManager } }
|
|
|
|
interface FeedHttpHandlersDeps {
|
|
sessionManager: UserSessionManager
|
|
authSessionMiddleware: AuthSessionMiddleware
|
|
}
|
|
|
|
export function registerFeedHttpHandlers(
|
|
app: Hono,
|
|
{ sessionManager, authSessionMiddleware }: FeedHttpHandlersDeps,
|
|
) {
|
|
const inject = createMiddleware<Env>(async (c, next) => {
|
|
c.set("sessionManager", sessionManager)
|
|
await next()
|
|
})
|
|
|
|
app.get("/api/feed", inject, authSessionMiddleware, handleGetFeed)
|
|
}
|
|
|
|
async function handleGetFeed(c: Context<Env>) {
|
|
const user = c.get("user")!
|
|
const sessionManager = c.get("sessionManager")
|
|
const session = sessionManager.getOrCreate(user.id)
|
|
|
|
const feed = session.engine.lastFeed() ?? (await session.engine.refresh())
|
|
|
|
return c.json({
|
|
items: feed.items,
|
|
errors: feed.errors.map((e) => ({
|
|
sourceId: e.sourceId,
|
|
error: e.error.message,
|
|
})),
|
|
})
|
|
}
|