51 lines
1.6 KiB
TypeScript
51 lines
1.6 KiB
TypeScript
import "server-only";
|
||
|
||
import { getEnabledAiProviders } from "@/lib/db/queries";
|
||
import type { WorldLabsProviderConfig } from "./types";
|
||
|
||
const DEFAULT_WORLDLABS_BASE_URL = "https://api.worldlabs.ai";
|
||
|
||
function sanitizeWorldLabsApiKey(value: string): string {
|
||
return String(value || "")
|
||
.replace(/[\u2028\u2029]/g, "")
|
||
.replace(/[\u0000-\u001F\u007F]/g, "")
|
||
.replace(/\s+/g, "")
|
||
.trim();
|
||
}
|
||
|
||
function sanitizeWorldLabsBaseUrl(value: string): string {
|
||
return String(value || "")
|
||
.replace(/[\u2028\u2029]/g, "")
|
||
.replace(/[\u0000-\u001F\u007F]/g, "")
|
||
.trim();
|
||
}
|
||
|
||
export async function getWorldLabsProviderConfig(): Promise<WorldLabsProviderConfig> {
|
||
const providers = await getEnabledAiProviders();
|
||
const worldLabsProvider = providers.find((item) => item.type === "worldlabs-3d");
|
||
|
||
const providerApiKey = sanitizeWorldLabsApiKey(String(worldLabsProvider?.apiKey || ""));
|
||
if (worldLabsProvider && providerApiKey) {
|
||
return {
|
||
apiKey: providerApiKey,
|
||
baseUrl:
|
||
sanitizeWorldLabsBaseUrl(String(worldLabsProvider?.baseUrl || "")) ||
|
||
DEFAULT_WORLDLABS_BASE_URL,
|
||
providerId: worldLabsProvider.id,
|
||
providerName: worldLabsProvider.name,
|
||
};
|
||
}
|
||
|
||
const envApiKey = sanitizeWorldLabsApiKey(String(process.env.WORLDLABS_API_KEY || ""));
|
||
if (!envApiKey) {
|
||
throw new Error("未配置 World Labs API,请在系统设置-本地AI新增 World Labs 提供商");
|
||
}
|
||
|
||
return {
|
||
apiKey: envApiKey,
|
||
baseUrl:
|
||
sanitizeWorldLabsBaseUrl(String(process.env.WORLDLABS_BASE_URL || "")) ||
|
||
DEFAULT_WORLDLABS_BASE_URL,
|
||
};
|
||
}
|