From 508e18cf2a44bab2d6c3434e0554a65e3e11470f Mon Sep 17 00:00:00 2001 From: osamu <46447427+sam-osamu@users.noreply.github.com> Date: Sun, 26 Nov 2023 15:48:51 +0900 Subject: [PATCH] =?UTF-8?q?Ajv=E3=81=AB=E6=80=92=E3=82=89=E3=82=8C?= =?UTF-8?q?=E3=81=A6=E8=B5=B7=E5=8B=95=E3=81=A7=E3=81=8D=E3=81=AA=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=A8=E3=81=93=E3=82=8D=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/server/api/endpoint-base.ts | 4 +++- .../server/api/endpoints/federation/instances.ts | 2 +- packages/backend/src/server/api/openapi/schemas.ts | 13 +++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/server/api/endpoint-base.ts b/packages/backend/src/server/api/endpoint-base.ts index d5279faa1c..bae68c93dc 100644 --- a/packages/backend/src/server/api/endpoint-base.ts +++ b/packages/backend/src/server/api/endpoint-base.ts @@ -9,6 +9,7 @@ import type { Schema, SchemaType } from '@/misc/json-schema.js'; import type { MiLocalUser } from '@/models/User.js'; import type { MiAccessToken } from '@/models/AccessToken.js'; import { ApiError } from './error.js'; +import { omitAjvNotSupportProperty } from './openapi/schemas.js'; import type { IEndpointMeta } from './endpoints.js'; const Ajv = _Ajv.default; @@ -35,7 +36,8 @@ export abstract class Endpoint { public exec: (params: any, user: T['requireCredential'] extends true ? MiLocalUser : MiLocalUser | null, token: MiAccessToken | null, file?: File, ip?: string | null, headers?: Record | null) => Promise; constructor(meta: T, paramDef: Ps, cb: Executor) { - const validate = ajv.compile(paramDef); + const ajvSchema = omitAjvNotSupportProperty(paramDef); + const validate = ajv.compile(ajvSchema); this.exec = (params: any, user: T['requireCredential'] extends true ? MiLocalUser : MiLocalUser | null, token: MiAccessToken | null, file?: File, ip?: string | null, headers?: Record | null) => { let cleanup: undefined | (() => void) = undefined; diff --git a/packages/backend/src/server/api/endpoints/federation/instances.ts b/packages/backend/src/server/api/endpoints/federation/instances.ts index f6fb0c6de5..e5a90715f5 100644 --- a/packages/backend/src/server/api/endpoints/federation/instances.ts +++ b/packages/backend/src/server/api/endpoints/federation/instances.ts @@ -44,7 +44,7 @@ export const paramDef = { offset: { type: 'integer', default: 0 }, sort: { type: 'string', - optional: true, nullable: true, + nullable: true, enum: [ '+pubSub', '-pubSub', diff --git a/packages/backend/src/server/api/openapi/schemas.ts b/packages/backend/src/server/api/openapi/schemas.ts index 2716f5f162..e970b3f824 100644 --- a/packages/backend/src/server/api/openapi/schemas.ts +++ b/packages/backend/src/server/api/openapi/schemas.ts @@ -43,6 +43,19 @@ export function convertSchemaToOpenApiSchema(schema: Schema) { return res; } +export function omitAjvNotSupportProperty(schema: Schema): Schema { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { optional, ref, ...res } = JSON.parse(JSON.stringify(schema)) as Schema; + + if (res.type === 'object' && res.properties) { + for (const k of Object.keys(res.properties)) { + res.properties[k] = omitAjvNotSupportProperty(res.properties[k]); + } + } + + return res; +} + export const schemas = { Error: { type: 'object',