perf(server): paginate session history (#17134)

This commit is contained in:
Shoubhit Dash
2026-03-13 15:48:43 +05:30
committed by GitHub
parent ff748b82ca
commit 9457493696
10 changed files with 3042 additions and 363 deletions

View File

@@ -569,17 +569,65 @@ export const SessionRoutes = lazy(() =>
),
validator(
"query",
z.object({
limit: z.coerce.number().optional(),
}),
z
.object({
limit: z.coerce
.number()
.int()
.min(0)
.optional()
.meta({ description: "Maximum number of messages to return" }),
before: z
.string()
.optional()
.meta({ description: "Opaque cursor for loading older messages" })
.refine(
(value) => {
if (!value) return true
try {
MessageV2.cursor.decode(value)
return true
} catch {
return false
}
},
{ message: "Invalid cursor" },
),
})
.refine((value) => !value.before || value.limit !== undefined, {
message: "before requires limit",
path: ["before"],
}),
),
async (c) => {
const query = c.req.valid("query")
const messages = await Session.messages({
sessionID: c.req.valid("param").sessionID,
const sessionID = c.req.valid("param").sessionID
if (query.limit === undefined) {
await Session.get(sessionID)
const messages = await Session.messages({ sessionID })
return c.json(messages)
}
if (query.limit === 0) {
await Session.get(sessionID)
const messages = await Session.messages({ sessionID })
return c.json(messages)
}
const page = await MessageV2.page({
sessionID,
limit: query.limit,
before: query.before,
})
return c.json(messages)
if (page.cursor) {
const url = new URL(c.req.url)
url.searchParams.set("limit", query.limit.toString())
url.searchParams.set("before", page.cursor)
c.header("Access-Control-Expose-Headers", "Link, X-Next-Cursor")
c.header("Link", `<${url.toString()}>; rel=\"next\"`)
c.header("X-Next-Cursor", page.cursor)
}
return c.json(page.items)
},
)
.get(