@@ -1,4 +1,5 @@
|
||||
import type { IUserReadyData } from "#shared/types";
|
||||
import { isUnauthorizedError } from "~~/server/utils";
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
try {
|
||||
@@ -17,20 +18,3 @@ export default defineEventHandler(async (event) => {
|
||||
return createUpstreamErrorResponse(error, "环境准备失败");
|
||||
}
|
||||
});
|
||||
|
||||
/** 鉴权失败时清理本地 cookie,避免继续携带失效的 NewAPI 登录态 */
|
||||
const isUnauthorizedError = (error: unknown): boolean => {
|
||||
const fetchError = error as {
|
||||
response?: {
|
||||
status?: number;
|
||||
};
|
||||
status?: number;
|
||||
statusCode?: number;
|
||||
};
|
||||
|
||||
return (
|
||||
fetchError.statusCode === 401 ||
|
||||
fetchError.status === 401 ||
|
||||
fetchError.response?.status === 401
|
||||
);
|
||||
};
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
import { consola } from "consola";
|
||||
|
||||
import type {
|
||||
IImageGenerateData,
|
||||
IImageGenerateRequest
|
||||
} from "#shared/types/openai";
|
||||
import { isUnauthorizedError } from "~~/server/utils";
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const requestBody = await readBody<Partial<IImageGenerateRequest> | null>(
|
||||
event
|
||||
);
|
||||
|
||||
// 只接受 JSON 对象,避免数组、字符串等无效 body 被用于生成请求。
|
||||
if (
|
||||
requestBody !== null &&
|
||||
(typeof requestBody !== "object" || Array.isArray(requestBody))
|
||||
) {
|
||||
return createErrorResponse(400, "请求体必须是 JSON 对象");
|
||||
}
|
||||
|
||||
const prompt = requestBody?.prompt?.trim();
|
||||
if (!prompt) {
|
||||
return createErrorResponse(400, "请输入图片描述");
|
||||
}
|
||||
|
||||
try {
|
||||
const apiKey = await getAiArtStudioTokenKey(event);
|
||||
const result = await askImg({
|
||||
apiKey,
|
||||
prompt
|
||||
});
|
||||
|
||||
consola.info("图片生成成功", { prompt, imageUrl: result.imageUrl });
|
||||
return createSuccessResponse<IImageGenerateData>(result, "图片生成成功");
|
||||
} catch (error) {
|
||||
if (isUnauthorizedError(error)) {
|
||||
clearNewApiAuthCookies(event);
|
||||
return createErrorResponse(401, "未登录");
|
||||
}
|
||||
|
||||
return createUpstreamErrorResponse(error, "图片生成失败");
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user