ai-chatbot/lib/canvas/three-asset-url.ts
Your Name 5864e9f4cf
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
fix: proxy tripo texture assets in 3d viewer
2026-05-14 14:34:29 +08:00

41 lines
1.1 KiB
TypeScript

const THREE_ASSET_PROXY_PATH = "/api/canvas/3d/model-proxy";
const PROXY_HOST_KEYWORDS = [
"bbyy.ai",
"tripo3d.ai",
"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)}`;
}