fix(openapi): openapi document empty (#5579)

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Meier LukasandCopilot authored and GitHub committed 2026-04-29 23:29:42 +02:00
1 parent 0e7b9fa2d4
commit ce8e330c82
8 files changed
+26 -18

No files matched your search

@@ -2,7 +2,7 @@ import { headers } from "next/headers";
import { notFound } from "next/navigation"; import { notFound } from "next/navigation";
import { Stack, Tabs, TabsList, TabsPanel, TabsTab } from "@mantine/core"; import { Stack, Tabs, TabsList, TabsPanel, TabsTab } from "@mantine/core";
import { openApiDocument } from "@homarr/api"; import { openApiDocument } from "@homarr/api/open-api";
import { api } from "@homarr/api/server"; import { api } from "@homarr/api/server";
import { auth } from "@homarr/auth/next"; import { auth } from "@homarr/auth/next";
import { extractBaseUrlFromHeaders } from "@homarr/common"; import { extractBaseUrlFromHeaders } from "@homarr/common";
@@ -30,7 +30,7 @@ export const FirstDayOfWeek = ({ user }: FirstDayOfWeekProps) => {
}, },
onSuccess(_, variables) { onSuccess(_, variables) {
form.setInitialValues({ form.setInitialValues({
firstDayOfWeek: variables.firstDayOfWeek, firstDayOfWeek: variables.firstDayOfWeek as DayOfWeek,
}); });
showSuccessNotification({ showSuccessNotification({
message: t("user.action.changeFirstDayOfWeek.notification.success.message"), message: t("user.action.changeFirstDayOfWeek.notification.success.message"),
+3 -2
View File
@@ -2,7 +2,8 @@ import type { NextRequest } from "next/server";
import { userAgent } from "next/server"; import { userAgent } from "next/server";
import { createOpenApiFetchHandler } from "trpc-to-openapi"; import { createOpenApiFetchHandler } from "trpc-to-openapi";
import { appRouter, createTRPCContext } from "@homarr/api"; import { createTRPCContext } from "@homarr/api";
import { openApiRouter } from "@homarr/api/open-api";
import { API_KEY_HEADER_NAME, getSessionFromApiKeyAsync } from "@homarr/auth/api-key"; import { API_KEY_HEADER_NAME, getSessionFromApiKeyAsync } from "@homarr/auth/api-key";
import { ipAddressFromHeaders } from "@homarr/common/server"; import { ipAddressFromHeaders } from "@homarr/common/server";
import { createLogger } from "@homarr/core/infrastructure/logs"; import { createLogger } from "@homarr/core/infrastructure/logs";
@@ -30,7 +31,7 @@ const handlerAsync = async (req: NextRequest) => {
return createOpenApiFetchHandler({ return createOpenApiFetchHandler({
req, req,
endpoint: "/", endpoint: "/",
router: appRouter, router: openApiRouter,
createContext: () => createTRPCContext({ session, headers: req.headers }), createContext: () => createTRPCContext({ session, headers: req.headers }),
onError({ error, path, type }) { onError({ error, path, type }) {
logger.error(new ErrorWithMetadata("tRPC Error occured", { path, type }, { cause: error })); logger.error(new ErrorWithMetadata("tRPC Error occured", { path, type }, { cause: error }));
+1 -1
View File
@@ -1,6 +1,6 @@
import { NextResponse } from "next/server"; import { NextResponse } from "next/server";
import { openApiDocument } from "@homarr/api"; import { openApiDocument } from "@homarr/api/open-api";
import { extractBaseUrlFromHeaders } from "@homarr/common"; import { extractBaseUrlFromHeaders } from "@homarr/common";
export function GET(request: Request) { export function GET(request: Request) {
+2 -1
View File
@@ -9,7 +9,8 @@
"./client": "./src/client.ts", "./client": "./src/client.ts",
"./server": "./src/server.ts", "./server": "./src/server.ts",
"./websocket": "./src/websocket.ts", "./websocket": "./src/websocket.ts",
"./shared": "./src/shared.ts" "./shared": "./src/shared.ts",
"./open-api": "./src/open-api.ts"
}, },
"main": "./index.ts", "main": "./index.ts",
"types": "./index.ts", "types": "./index.ts",
+1 -2
View File
@@ -1,6 +1,5 @@
import type { inferRouterInputs, inferRouterOutputs } from "@trpc/server"; import type { inferRouterInputs, inferRouterOutputs } from "@trpc/server";
import { openApiDocument } from "./open-api";
import type { AppRouter } from "./root"; import type { AppRouter } from "./root";
import { appRouter } from "./root"; import { appRouter } from "./root";
import { createCallerFactory, createTRPCContext } from "./trpc"; import { createCallerFactory, createTRPCContext } from "./trpc";
@@ -30,5 +29,5 @@ type RouterInputs = inferRouterInputs<AppRouter>;
**/ **/
type RouterOutputs = inferRouterOutputs<AppRouter>; type RouterOutputs = inferRouterOutputs<AppRouter>;
export { createTRPCContext, appRouter, createCaller, openApiDocument }; export { createTRPCContext, appRouter, createCaller };
export type { AppRouter, RouterInputs, RouterOutputs }; export type { AppRouter, RouterInputs, RouterOutputs };
+13 -2
View File
@@ -2,10 +2,21 @@ import { generateOpenApiDocument } from "trpc-to-openapi";
import { API_KEY_HEADER_NAME } from "@homarr/auth/api-key"; import { API_KEY_HEADER_NAME } from "@homarr/auth/api-key";
import { appRouter } from "./root"; import { appRouter } from "./router/app";
import { infoRouter } from "./router/info";
import { inviteRouter } from "./router/invite";
import { userRouter } from "./router/user";
import { createTRPCRouter } from "./trpc";
export const openApiRouter = createTRPCRouter({
appRouter,
infoRouter,
inviteRouter,
userRouter,
});
export const openApiDocument = (base: string) => export const openApiDocument = (base: string) =>
generateOpenApiDocument(appRouter, { generateOpenApiDocument(openApiRouter, {
title: "Homarr API documentation", title: "Homarr API documentation",
version: "1.0.0", version: "1.0.0",
baseUrl: base, baseUrl: base,
+4 -8
View File
@@ -138,14 +138,10 @@ export const userChangeColorSchemeSchema = z.object({
export const userFirstDayOfWeekSchema = z.object({ export const userFirstDayOfWeekSchema = z.object({
firstDayOfWeek: z firstDayOfWeek: z
.custom<DayOfWeek>((value) => z.number().min(0).max(6).safeParse(value).success) .number()
.meta({ .min(0)
override: { .max(6)
type: "integer", .transform((value) => value as DayOfWeek),
minimum: 0,
maximum: 6,
},
}),
}); });
export const userPingIconsEnabledSchema = z.object({ export const userPingIconsEnabledSchema = z.object({