From 4965534c3da1500e148764a71d2c00cea4d9a801 Mon Sep 17 00:00:00 2001 From: Aadesh Kheria Date: Mon, 20 Apr 2026 12:24:33 -0700 Subject: [PATCH] refactor: replace callReducer with callReducerStrict for improved error handling in mcp-review routes --- .../internal/mcp-review/add-manual/route.ts | 4 ++-- .../latest/internal/mcp-review/delete/route.ts | 4 ++-- .../internal/mcp-review/mark-reviewed/route.ts | 4 ++-- .../internal/mcp-review/unmark-reviewed/route.ts | 4 ++-- .../mcp-review/update-correction/route.ts | 4 ++-- .../spacetimedb-enroll-reviewer/route.ts | 4 ++-- apps/backend/src/lib/ai/mcp-logger.ts | 16 ++++++++++++++++ 7 files changed, 28 insertions(+), 12 deletions(-) diff --git a/apps/backend/src/app/api/latest/internal/mcp-review/add-manual/route.ts b/apps/backend/src/app/api/latest/internal/mcp-review/add-manual/route.ts index b9134230a..8fa60250e 100644 --- a/apps/backend/src/app/api/latest/internal/mcp-review/add-manual/route.ts +++ b/apps/backend/src/app/api/latest/internal/mcp-review/add-manual/route.ts @@ -1,4 +1,4 @@ -import { callReducer } from "@/lib/ai/mcp-logger"; +import { callReducerStrict } from "@/lib/ai/mcp-logger"; import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler"; import { adaptSchema, yupBoolean, yupNumber, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; import { getEnvVariable } from "@stackframe/stack-shared/dist/utils/env"; @@ -34,7 +34,7 @@ export const POST = createSmartRouteHandler({ } const token = getEnvVariable("STACK_MCP_LOG_TOKEN"); - await callReducer("add_manual_qa", [ + await callReducerStrict("add_manual_qa", [ token, body.question, body.answer, diff --git a/apps/backend/src/app/api/latest/internal/mcp-review/delete/route.ts b/apps/backend/src/app/api/latest/internal/mcp-review/delete/route.ts index ead6eebf5..fc6839aec 100644 --- a/apps/backend/src/app/api/latest/internal/mcp-review/delete/route.ts +++ b/apps/backend/src/app/api/latest/internal/mcp-review/delete/route.ts @@ -1,4 +1,4 @@ -import { callReducer } from "@/lib/ai/mcp-logger"; +import { callReducerStrict } from "@/lib/ai/mcp-logger"; import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler"; import { adaptSchema, yupBoolean, yupNumber, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; import { getEnvVariable } from "@stackframe/stack-shared/dist/utils/env"; @@ -31,7 +31,7 @@ export const POST = createSmartRouteHandler({ } const token = getEnvVariable("STACK_MCP_LOG_TOKEN"); - await callReducer("delete_qa_entry", [ + await callReducerStrict("delete_qa_entry", [ token, body.correlationId, ]); diff --git a/apps/backend/src/app/api/latest/internal/mcp-review/mark-reviewed/route.ts b/apps/backend/src/app/api/latest/internal/mcp-review/mark-reviewed/route.ts index 52288a528..e7ed40874 100644 --- a/apps/backend/src/app/api/latest/internal/mcp-review/mark-reviewed/route.ts +++ b/apps/backend/src/app/api/latest/internal/mcp-review/mark-reviewed/route.ts @@ -1,4 +1,4 @@ -import { callReducer } from "@/lib/ai/mcp-logger"; +import { callReducerStrict } from "@/lib/ai/mcp-logger"; import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler"; import { adaptSchema, yupBoolean, yupNumber, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; import { getEnvVariable } from "@stackframe/stack-shared/dist/utils/env"; @@ -32,7 +32,7 @@ export const POST = createSmartRouteHandler({ } const token = getEnvVariable("STACK_MCP_LOG_TOKEN"); - await callReducer("mark_human_reviewed", [ + await callReducerStrict("mark_human_reviewed", [ token, body.correlationId, user.display_name ?? user.primary_email ?? user.id, diff --git a/apps/backend/src/app/api/latest/internal/mcp-review/unmark-reviewed/route.ts b/apps/backend/src/app/api/latest/internal/mcp-review/unmark-reviewed/route.ts index 5594dbbe0..69db03070 100644 --- a/apps/backend/src/app/api/latest/internal/mcp-review/unmark-reviewed/route.ts +++ b/apps/backend/src/app/api/latest/internal/mcp-review/unmark-reviewed/route.ts @@ -1,4 +1,4 @@ -import { callReducer } from "@/lib/ai/mcp-logger"; +import { callReducerStrict } from "@/lib/ai/mcp-logger"; import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler"; import { adaptSchema, yupBoolean, yupNumber, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; import { getEnvVariable } from "@stackframe/stack-shared/dist/utils/env"; @@ -32,7 +32,7 @@ export const POST = createSmartRouteHandler({ } const token = getEnvVariable("STACK_MCP_LOG_TOKEN"); - await callReducer("unmark_human_reviewed", [ + await callReducerStrict("unmark_human_reviewed", [ token, body.correlationId, ]); diff --git a/apps/backend/src/app/api/latest/internal/mcp-review/update-correction/route.ts b/apps/backend/src/app/api/latest/internal/mcp-review/update-correction/route.ts index 6734a186d..5bfcb37e6 100644 --- a/apps/backend/src/app/api/latest/internal/mcp-review/update-correction/route.ts +++ b/apps/backend/src/app/api/latest/internal/mcp-review/update-correction/route.ts @@ -1,4 +1,4 @@ -import { callReducer } from "@/lib/ai/mcp-logger"; +import { callReducerStrict } from "@/lib/ai/mcp-logger"; import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler"; import { adaptSchema, yupBoolean, yupNumber, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; import { getEnvVariable } from "@stackframe/stack-shared/dist/utils/env"; @@ -35,7 +35,7 @@ export const POST = createSmartRouteHandler({ } const token = getEnvVariable("STACK_MCP_LOG_TOKEN"); - await callReducer("update_human_correction", [ + await callReducerStrict("update_human_correction", [ token, body.correlationId, body.correctedQuestion, diff --git a/apps/backend/src/app/api/latest/internal/spacetimedb-enroll-reviewer/route.ts b/apps/backend/src/app/api/latest/internal/spacetimedb-enroll-reviewer/route.ts index 570fbc437..512f9dd26 100644 --- a/apps/backend/src/app/api/latest/internal/spacetimedb-enroll-reviewer/route.ts +++ b/apps/backend/src/app/api/latest/internal/spacetimedb-enroll-reviewer/route.ts @@ -1,4 +1,4 @@ -import { callReducer } from "@/lib/ai/mcp-logger"; +import { callReducerStrict } from "@/lib/ai/mcp-logger"; import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler"; import { adaptSchema, yupBoolean, yupNumber, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; import { getEnvVariable } from "@stackframe/stack-shared/dist/utils/env"; @@ -35,7 +35,7 @@ export const POST = createSmartRouteHandler({ } const token = getEnvVariable("STACK_MCP_LOG_TOKEN"); - await callReducer("add_operator", [ + await callReducerStrict("add_operator", [ token, [`0x${body.identity}`], user.id, diff --git a/apps/backend/src/lib/ai/mcp-logger.ts b/apps/backend/src/lib/ai/mcp-logger.ts index 6559fefa5..316e2371c 100644 --- a/apps/backend/src/lib/ai/mcp-logger.ts +++ b/apps/backend/src/lib/ai/mcp-logger.ts @@ -79,6 +79,22 @@ export async function callReducer(reducer: string, args: unknown[]): Promise { + const token = await getServiceToken(); + if (!token) { + throw new StackAssertionError( + `SpacetimeDB is not configured (STACK_SPACETIMEDB_URL is empty). Reducer ${reducer} cannot run.` + ); + } + await rawCallReducer(token, reducer, args); +} + /** * Wraps a nullable value in the SpacetimeDB tagged-variant encoding expected * by HTTP reducer calls for `Option` arguments. Use for every reducer arg