From e2a4de3f45d10aab546cf8911120c0eb6c72826a Mon Sep 17 00:00:00 2001 From: CPTProgrammer <46586216+CPTProgrammer@users.noreply.github.com> Date: Mon, 6 Jul 2026 23:38:30 +0800 Subject: [PATCH] Include request body in CurseForge and Modrinth upload errors --- src/lib/curseforge/client.ts | 5 +++-- src/lib/modrinth/client.ts | 5 +++-- src/lib/utils/fetch.ts | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/lib/curseforge/client.ts b/src/lib/curseforge/client.ts index 7a55539..24f55b0 100644 --- a/src/lib/curseforge/client.ts +++ b/src/lib/curseforge/client.ts @@ -1,4 +1,4 @@ -import { readErrorBody } from "../utils/fetch"; +import { readErrorBody, summarizeFormData } from "../utils/fetch"; /** CurseForge API 客户端,封装两套 API 的鉴权与 User-Agent。 */ export class CurseForgeClient { @@ -73,9 +73,10 @@ export class CurseForgeClient { body, }); if (!res.ok) { + const reqBody = summarizeFormData(body); const resBody = await readErrorBody(res); throw new Error( - `CurseForge Upload POST ${path} failed: ${res.status} ${res.statusText}\n${resBody}`, + `CurseForge Upload POST ${path} failed: ${res.status} ${res.statusText}\n\n--Request--:\n${reqBody}\n\n--Response--:\n${resBody}`, ); } return res.json() as Promise; diff --git a/src/lib/modrinth/client.ts b/src/lib/modrinth/client.ts index 89cd472..69f9424 100644 --- a/src/lib/modrinth/client.ts +++ b/src/lib/modrinth/client.ts @@ -1,4 +1,4 @@ -import { readErrorBody } from "../utils/fetch"; +import { readErrorBody, summarizeFormData } from "../utils/fetch"; /** Modrinth API v2 的基础请求客户端,封装鉴权与 User-Agent。 */ export class ModrinthClient { @@ -47,9 +47,10 @@ export class ModrinthClient { body, }); if (!res.ok) { + const reqBody = summarizeFormData(body); const resBody = await readErrorBody(res); throw new Error( - `Modrinth API POST ${path} failed: ${res.status} ${res.statusText}\n${resBody}`, + `Modrinth API POST ${path} failed: ${res.status} ${res.statusText}\n\n--Request--:\n${reqBody}\n\n--Response--:\n${resBody}`, ); } return res.json() as Promise; diff --git a/src/lib/utils/fetch.ts b/src/lib/utils/fetch.ts index 885bce9..ce9d9a0 100644 --- a/src/lib/utils/fetch.ts +++ b/src/lib/utils/fetch.ts @@ -10,3 +10,18 @@ export async function readErrorBody(res: Response): Promise { return "(unable to read response body)"; } } + +/** 将 FormData 内容转为可读摘要字符串,用于拼入错误信息。 */ +export function summarizeFormData(form: FormData): string { + const parts: string[] = []; + for (const [key, value] of form.entries()) { + if (typeof value === "string") { + parts.push(`${key}: ${value.slice(0, 2048)}`); + } else { + parts.push( + `${key}: `, + ); + } + } + return parts.length > 0 ? parts.join("\n") : "(empty body)"; +}