From ed2feda974805721f0b0a8c95910a244333cdd27 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Tue, 7 Oct 2025 00:38:17 -0400 Subject: [PATCH] validate "required" property when generating schemas --- .../backend/src/server/api/openapi/schemas.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/backend/src/server/api/openapi/schemas.ts b/packages/backend/src/server/api/openapi/schemas.ts index 25e0659006..f43a870090 100644 --- a/packages/backend/src/server/api/openapi/schemas.ts +++ b/packages/backend/src/server/api/openapi/schemas.ts @@ -13,6 +13,22 @@ export function convertSchemaToOpenApiSchema(schema: Schema, type: 'param' | 're const { optional, nullable, ref, selfRef, ..._res }: any = schema; const res = deepClone(_res); + // "required" must be an array of strings, or undefined. + if (res.required !== undefined) { + // Single-item must be wrapped in array + if (!Array.isArray(res.required)) { + res.required = [res.required]; + } + + // Array must contain only strings + res.required = res.required.filter((required: unknown) => typeof(required) === 'string'); + + // Can't be an empty array + if (res.required.length === 0) { + delete res.required; + } + } + if (schema.type === 'object' && schema.properties) { if (type === 'res') { const required = Object.entries(schema.properties).filter(([k, v]) => !v.optional).map(([k]) => k);