Skip to content

Commit 8a57990

Browse files
committed
fix: improve session endpoint error handling and response structure
1 parent 51747ce commit 8a57990

2 files changed

Lines changed: 22 additions & 12 deletions

File tree

endpoints/sessions.ts

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,10 @@ export function setupSessionEndpoints(ctx: SessionEndpointsContext, server: IHtt
4747
method: 'POST',
4848
path: `/agent/get-session-info`,
4949
handler: async ({body, adminUser, response }) => {
50-
const parsedBody = sessionIdBodySchema.safeParse(body);
51-
if (!parsedBody.success) {
52-
response.setStatus(422, parsedBody.error.message);
53-
return;
54-
}
50+
const data = ctx.parseBody(sessionIdBodySchema, body, response);
51+
if (!data) return;
5552
const userId = adminUser!.pk;
56-
const sessionId = parsedBody.data.sessionId;
53+
const sessionId = data.sessionId;
5754
const session = await ctx.adminforth.resource(ctx.options.sessionResource.resourceId).get(
5855
[Filters.EQ(ctx.options.sessionResource.idField, sessionId)]
5956
);
@@ -108,11 +105,11 @@ export function setupSessionEndpoints(ctx: SessionEndpointsContext, server: IHtt
108105
[ctx.options.sessionResource.titleField]: title,
109106
[ctx.options.sessionResource.askerIdField]: userId,
110107
};
111-
await ctx.adminforth.resource(ctx.options.sessionResource.resourceId).create(newSession);
108+
const { createdRecord } = await ctx.adminforth.resource(ctx.options.sessionResource.resourceId).create(newSession);
112109
return {
113-
sessionId: newSession[ctx.options.sessionResource.idField],
114-
title: newSession[ctx.options.sessionResource.titleField],
115-
timestamp: newSession[ctx.options.sessionResource.createdAtField],
110+
sessionId: createdRecord[ctx.options.sessionResource.idField],
111+
title: createdRecord[ctx.options.sessionResource.titleField],
112+
timestamp: createdRecord[ctx.options.sessionResource.createdAtField],
116113
messages: []
117114
};
118115
}
@@ -155,9 +152,22 @@ export function setupSessionEndpoints(ctx: SessionEndpointsContext, server: IHtt
155152
server.endpoint({
156153
method: 'POST',
157154
path: `/agent/add-system-message-to-turns`,
158-
handler: async ({body, response }) => {
155+
handler: async ({body, adminUser, response }) => {
159156
const data = ctx.parseBody(addSystemMessageBodySchema, body, response);
160157
if (!data) return;
158+
const session = await ctx.adminforth.resource(ctx.options.sessionResource.resourceId).get(
159+
[Filters.EQ(ctx.options.sessionResource.idField, data.sessionId)]
160+
);
161+
if (!session) {
162+
return {
163+
error: 'Session not found'
164+
};
165+
}
166+
if (session[ctx.options.sessionResource.askerIdField] !== adminUser!.pk) {
167+
return {
168+
error: 'Unauthorized'
169+
};
170+
}
161171
await ctx.createNewTurn(data.sessionId, data.systemMessage);
162172
return {
163173
ok: true

sessionStore.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export class AgentSessionStore {
1717
[this.options.turnResource.idField]: turnId,
1818
[this.options.turnResource.sessionIdField]: sessionId,
1919
[this.options.turnResource.promptField]: prompt,
20-
[this.options.turnResource.responseField]: response || "not_finished",
20+
[this.options.turnResource.responseField]: response ?? "not_finished",
2121
};
2222
const newTurn = await this.getAdminforth().resource(this.options.turnResource.resourceId).create(turnRecord);
2323
return newTurn.createdRecord[this.options.turnResource.idField];

0 commit comments

Comments
 (0)