diff --git a/server/api/api/v1/statuses/:id/reblog.ts b/server/api/api/v1/statuses/:id/reblog.ts index e06f2a8c..b01e7af7 100644 --- a/server/api/api/v1/statuses/:id/reblog.ts +++ b/server/api/api/v1/statuses/:id/reblog.ts @@ -1,4 +1,4 @@ -import { applyConfig, auth, handleZodError } from "@api"; +import { applyConfig, auth, handleZodError, jsonOrForm } from "@api"; import { zValidator } from "@hono/zod-validator"; import { errorResponse, jsonResponse } from "@response"; import { and, eq } from "drizzle-orm"; @@ -33,6 +33,7 @@ export default (app: Hono) => app.on( meta.allowedMethods, meta.route, + jsonOrForm(), zValidator("param", schemas.param, handleZodError), zValidator("form", schemas.form, handleZodError), auth(meta.auth), diff --git a/server/api/api/v2/filters/:id/index.ts b/server/api/api/v2/filters/:id/index.ts index 6b3cd9ec..0b23d1e4 100644 --- a/server/api/api/v2/filters/:id/index.ts +++ b/server/api/api/v2/filters/:id/index.ts @@ -1,4 +1,4 @@ -import { applyConfig, auth, handleZodError, qs } from "@api"; +import { applyConfig, auth, handleZodError, jsonOrForm, qs } from "@api"; import { zValidator } from "@hono/zod-validator"; import { errorResponse, jsonResponse } from "@response"; import { and, eq, inArray } from "drizzle-orm"; @@ -70,7 +70,7 @@ export default (app: Hono) => app.on( meta.allowedMethods, meta.route, - qs(), + jsonOrForm(), zValidator("param", schemas.param, handleZodError), zValidator("form", schemas.form, handleZodError), auth(meta.auth), diff --git a/server/api/api/v2/filters/index.ts b/server/api/api/v2/filters/index.ts index edf86a8d..61f279df 100644 --- a/server/api/api/v2/filters/index.ts +++ b/server/api/api/v2/filters/index.ts @@ -1,4 +1,4 @@ -import { applyConfig, auth, handleZodError, qs } from "@api"; +import { applyConfig, auth, handleZodError, jsonOrForm, qs } from "@api"; import { zValidator } from "@hono/zod-validator"; import { errorResponse, jsonResponse } from "@response"; import type { Hono } from "hono"; @@ -61,7 +61,7 @@ export default (app: Hono) => app.on( meta.allowedMethods, meta.route, - qs(), + jsonOrForm(), zValidator("form", schemas.form, handleZodError), auth(meta.auth), async (context) => { diff --git a/server/api/oauth/authorize/index.ts b/server/api/oauth/authorize/index.ts index 29b4f7ed..1bc027c9 100644 --- a/server/api/oauth/authorize/index.ts +++ b/server/api/oauth/authorize/index.ts @@ -1,5 +1,5 @@ import { randomBytes } from "node:crypto"; -import { applyConfig, handleZodError } from "@api"; +import { applyConfig, handleZodError, jsonOrForm } from "@api"; import { zValidator } from "@hono/zod-validator"; import { response } from "@response"; import type { Hono } from "hono"; @@ -76,6 +76,7 @@ export default (app: Hono) => app.on( meta.allowedMethods, meta.route, + jsonOrForm(), zValidator("query", schemas.query, handleZodError), zValidator("form", schemas.form, handleZodError), async (context) => { diff --git a/utils/api.ts b/utils/api.ts index 63bf64e2..2a652be6 100644 --- a/utils/api.ts +++ b/utils/api.ts @@ -207,12 +207,16 @@ export const jsonOrForm = () => { context.req.parseBody = async () => (await context.req.json()) as T; context.req.bodyCache.formData = await context.req.json(); + context.req.formData = async () => + context.req.bodyCache.formData as FormData; } else if (contentType?.includes("application/x-www-form-urlencoded")) { const parsed = parse(await context.req.text(), { parseArrays: true, interpretNumericEntities: true, }); + context.req.parseBody = () => + Promise.resolve(parsed as T); // @ts-ignore Very bad hack context.req.formData = () => Promise.resolve(parsed); // @ts-ignore I'm so sorry for this