223845b0ed
Co-authored-by: Copilot <copilot@github.com>
45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
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, "图片生成失败");
|
|
}
|
|
});
|