From 68ce7e73c0336386526c72d39ce2dbffd1020124 Mon Sep 17 00:00:00 2001 From: Thomas Camlong Date: Sat, 11 Jul 2026 19:33:42 +0200 Subject: [PATCH] fix(open-webui): use current request-handler API to fix the build The request handlers were written against an older caching API that dev has since refactored ('TanStack Query as single source of truth'), breaking the Turbopack build with a module-not-found on ./lib/cached-integration-request-handler. - use createIntegrationRequestHandler from ./lib/integration-request-handler - replace cacheDuration(dayjs)/queryKey with cacheTtlMs (ms) - update the router consumers: getCachedOrUpdatedDataAsync -> getDataAsync and per-call invalidateAsync() -> handler-level invalidateCache() --- packages/api/src/router/widgets/open-webui.ts | 22 +++++----- packages/request-handler/src/open-webui.ts | 42 ++++++++----------- 2 files changed, 28 insertions(+), 36 deletions(-) diff --git a/packages/api/src/router/widgets/open-webui.ts b/packages/api/src/router/widgets/open-webui.ts index b7b605264..6837b7a6c 100644 --- a/packages/api/src/router/widgets/open-webui.ts +++ b/packages/api/src/router/widgets/open-webui.ts @@ -170,7 +170,7 @@ export const openWebUiRouter = createTRPCRouter({ getModels: publicProcedure.concat(createOneIntegrationMiddleware("query", "openWebUi")).query(async ({ ctx }) => { throwIfNotCreator(ctx.integration, ctx.session?.user.id); const handler = openWebUiModelsRequestHandler.handler(ctx.integration, {}); - const { data } = await handler.getCachedOrUpdatedDataAsync({ forceUpdate: false }); + const { data } = await handler.getDataAsync(); return data; }), @@ -181,7 +181,7 @@ export const openWebUiRouter = createTRPCRouter({ .query(async ({ ctx }) => { throwIfNotCreator(ctx.integration, ctx.session.user.id); const handler = openWebUiChatsRequestHandler.handler(ctx.integration, {}); - const { data } = await handler.getCachedOrUpdatedDataAsync({ forceUpdate: false }); + const { data } = await handler.getDataAsync(); return data; }), @@ -193,7 +193,7 @@ export const openWebUiRouter = createTRPCRouter({ .query(async ({ ctx }) => { throwIfNotCreator(ctx.integration, ctx.session.user.id); const handler = openWebUiKnowledgeRequestHandler.handler(ctx.integration, {}); - const { data } = await handler.getCachedOrUpdatedDataAsync({ forceUpdate: false }); + const { data } = await handler.getDataAsync(); return data; }), @@ -202,7 +202,7 @@ export const openWebUiRouter = createTRPCRouter({ .query(async ({ ctx }) => { throwIfNotCreator(ctx.integration, ctx.session.user.id); const handler = openWebUiFilesRequestHandler.handler(ctx.integration, {}); - const { data } = await handler.getCachedOrUpdatedDataAsync({ forceUpdate: false }); + const { data } = await handler.getDataAsync(); return data; }), @@ -211,7 +211,7 @@ export const openWebUiRouter = createTRPCRouter({ .query(async ({ ctx }) => { throwIfNotCreator(ctx.integration, ctx.session.user.id); const handler = openWebUiNotesRequestHandler.handler(ctx.integration, {}); - const { data } = await handler.getCachedOrUpdatedDataAsync({ forceUpdate: false }); + const { data } = await handler.getDataAsync(); return data; }), @@ -221,7 +221,7 @@ export const openWebUiRouter = createTRPCRouter({ .query(async ({ ctx, input }) => { throwIfNotCreator(ctx.integration, ctx.session.user.id); const handler = openWebUiNoteRequestHandler.handler(ctx.integration, { noteId: input.noteId }); - const { data } = await handler.getCachedOrUpdatedDataAsync({ forceUpdate: false }); + const { data } = await handler.getDataAsync(); return data; }), @@ -233,7 +233,7 @@ export const openWebUiRouter = createTRPCRouter({ const handler = openWebUiKnowledgeFilesRequestHandler.handler(ctx.integration, { knowledgeId: input.knowledgeId, }); - const { data } = await handler.getCachedOrUpdatedDataAsync({ forceUpdate: false }); + const { data } = await handler.getDataAsync(); return data; }), @@ -281,7 +281,7 @@ export const openWebUiRouter = createTRPCRouter({ .query(async ({ ctx, input }) => { throwIfNotCreator(ctx.integration, ctx.session.user.id); const handler = openWebUiChatRequestHandler.handler(ctx.integration, { chatId: input.chatId }); - const { data } = await handler.getCachedOrUpdatedDataAsync({ forceUpdate: false }); + const { data } = await handler.getDataAsync(); return data; }), @@ -297,7 +297,7 @@ export const openWebUiRouter = createTRPCRouter({ messages: input.messages, meta: { tags: [homarrUserTag(ctx.session.user.id)] }, }); - await openWebUiChatsRequestHandler.handler(ctx.integration, {}).invalidateAsync(); + openWebUiChatsRequestHandler.invalidateCache(); return chat; }), @@ -311,8 +311,8 @@ export const openWebUiRouter = createTRPCRouter({ ...input.chat, meta: { tags: [homarrUserTag(ctx.session.user.id)] }, }); - await openWebUiChatsRequestHandler.handler(ctx.integration, {}).invalidateAsync(); - await openWebUiChatRequestHandler.handler(ctx.integration, { chatId: input.chatId }).invalidateAsync(); + openWebUiChatsRequestHandler.invalidateCache(); + openWebUiChatRequestHandler.invalidateCache(); return chat; }), diff --git a/packages/request-handler/src/open-webui.ts b/packages/request-handler/src/open-webui.ts index 6edbc548f..6e7cf6283 100644 --- a/packages/request-handler/src/open-webui.ts +++ b/packages/request-handler/src/open-webui.ts @@ -10,9 +10,9 @@ import type { OpenWebUiNote, } from "@homarr/integrations/types"; -import { createCachedIntegrationRequestHandler } from "./lib/cached-integration-request-handler"; +import { createIntegrationRequestHandler } from "./lib/integration-request-handler"; -export const openWebUiModelsRequestHandler = createCachedIntegrationRequestHandler< +export const openWebUiModelsRequestHandler = createIntegrationRequestHandler< OpenWebUiModel[], "openWebUi", Record @@ -21,11 +21,10 @@ export const openWebUiModelsRequestHandler = createCachedIntegrationRequestHandl const integrationInstance = await createIntegrationAsync(integration); return await integrationInstance.getModelsAsync(); }, - cacheDuration: dayjs.duration(5, "minutes"), - queryKey: "openWebUiModels", + cacheTtlMs: dayjs.duration(5, "minutes").asMilliseconds(), }); -export const openWebUiKnowledgeRequestHandler = createCachedIntegrationRequestHandler< +export const openWebUiKnowledgeRequestHandler = createIntegrationRequestHandler< OpenWebUiKnowledge[], "openWebUi", Record @@ -34,11 +33,10 @@ export const openWebUiKnowledgeRequestHandler = createCachedIntegrationRequestHa const integrationInstance = await createIntegrationAsync(integration); return await integrationInstance.getKnowledgeAsync(); }, - cacheDuration: dayjs.duration(5, "minutes"), - queryKey: "openWebUiKnowledge", + cacheTtlMs: dayjs.duration(5, "minutes").asMilliseconds(), }); -export const openWebUiKnowledgeFilesRequestHandler = createCachedIntegrationRequestHandler< +export const openWebUiKnowledgeFilesRequestHandler = createIntegrationRequestHandler< OpenWebUiFileSummary[], "openWebUi", { knowledgeId: string } @@ -47,11 +45,10 @@ export const openWebUiKnowledgeFilesRequestHandler = createCachedIntegrationRequ const integrationInstance = await createIntegrationAsync(integration); return await integrationInstance.getKnowledgeFilesAsync(input.knowledgeId); }, - cacheDuration: dayjs.duration(1, "minute"), - queryKey: "openWebUiKnowledgeFiles", + cacheTtlMs: dayjs.duration(1, "minute").asMilliseconds(), }); -export const openWebUiFilesRequestHandler = createCachedIntegrationRequestHandler< +export const openWebUiFilesRequestHandler = createIntegrationRequestHandler< OpenWebUiFileSummary[], "openWebUi", Record @@ -60,11 +57,10 @@ export const openWebUiFilesRequestHandler = createCachedIntegrationRequestHandle const integrationInstance = await createIntegrationAsync(integration); return await integrationInstance.listFilesAsync(); }, - cacheDuration: dayjs.duration(30, "seconds"), - queryKey: "openWebUiFiles", + cacheTtlMs: dayjs.duration(30, "seconds").asMilliseconds(), }); -export const openWebUiNotesRequestHandler = createCachedIntegrationRequestHandler< +export const openWebUiNotesRequestHandler = createIntegrationRequestHandler< OpenWebUiNote[], "openWebUi", Record @@ -73,11 +69,10 @@ export const openWebUiNotesRequestHandler = createCachedIntegrationRequestHandle const integrationInstance = await createIntegrationAsync(integration); return await integrationInstance.listNotesAsync(); }, - cacheDuration: dayjs.duration(30, "seconds"), - queryKey: "openWebUiNotes", + cacheTtlMs: dayjs.duration(30, "seconds").asMilliseconds(), }); -export const openWebUiNoteRequestHandler = createCachedIntegrationRequestHandler< +export const openWebUiNoteRequestHandler = createIntegrationRequestHandler< OpenWebUiNote, "openWebUi", { noteId: string } @@ -86,11 +81,10 @@ export const openWebUiNoteRequestHandler = createCachedIntegrationRequestHandler const integrationInstance = await createIntegrationAsync(integration); return await integrationInstance.getNoteAsync(input.noteId); }, - cacheDuration: dayjs.duration(30, "seconds"), - queryKey: "openWebUiNote", + cacheTtlMs: dayjs.duration(30, "seconds").asMilliseconds(), }); -export const openWebUiChatsRequestHandler = createCachedIntegrationRequestHandler< +export const openWebUiChatsRequestHandler = createIntegrationRequestHandler< OpenWebUiChatListItem[], "openWebUi", Record @@ -99,11 +93,10 @@ export const openWebUiChatsRequestHandler = createCachedIntegrationRequestHandle const integrationInstance = await createIntegrationAsync(integration); return await integrationInstance.listChatsAsync(); }, - cacheDuration: dayjs.duration(15, "seconds"), - queryKey: "openWebUiChats", + cacheTtlMs: dayjs.duration(15, "seconds").asMilliseconds(), }); -export const openWebUiChatRequestHandler = createCachedIntegrationRequestHandler< +export const openWebUiChatRequestHandler = createIntegrationRequestHandler< OpenWebUiChat, "openWebUi", { chatId: string } @@ -112,6 +105,5 @@ export const openWebUiChatRequestHandler = createCachedIntegrationRequestHandler const integrationInstance = await createIntegrationAsync(integration); return await integrationInstance.getChatAsync(input.chatId); }, - cacheDuration: dayjs.duration(15, "seconds"), - queryKey: "openWebUiChat", + cacheTtlMs: dayjs.duration(15, "seconds").asMilliseconds(), });