ai-chatbot/lib/canvas/three-asset-url.ts
Your Name 48c6cd0f87
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
fix: stabilize world 3d asset preview
2026-04-30 14:35:17 +08:00

39 lines
1.0 KiB
TypeScript

const THREE_ASSET_PROXY_PATH = "/api/canvas/3d/model-proxy";
const PROXY_HOST_KEYWORDS = [
"tripo3d.com",
"worldlabs",
"marble",
"s3.1080p.hk",
"img.yydd.ai",
"blob.vercel-storage.com",
"aliyuncs.com",
"amazonaws.com",
"googleapis.com",
"googleusercontent.com",
"cloudfront.net",
];
export function shouldProxyThreeAssetUrl(value?: string | null) {
const raw = String(value || "").trim();
if (!raw || raw.startsWith("/") || raw.startsWith("blob:") || raw.startsWith("data:")) {
return false;
}
try {
const parsed = new URL(raw);
if (parsed.protocol !== "https:" && parsed.protocol !== "http:") return false;
const hostname = parsed.hostname.toLowerCase();
return PROXY_HOST_KEYWORDS.some((keyword) => hostname.includes(keyword));
} catch {
return false;
}
}
export function buildThreeAssetUrl(value?: string | null) {
const raw = String(value || "").trim();
if (!raw) return "";
if (!shouldProxyThreeAssetUrl(raw)) return raw;
return `${THREE_ASSET_PROXY_PATH}?url=${encodeURIComponent(raw)}`;
}