import { and, eq } from "drizzle-orm"; import { notFound } from "next/navigation"; import { WorldSharePage } from "@/components/canvas/world3d/WorldSharePage"; import { db } from "@/lib/db"; import { model3dAsset } from "@/lib/db/schema"; import { pickBestWorldLabsSplatUrl } from "@/lib/worldlabs/splat-utils"; export const dynamic = "force-dynamic"; function readAssetPayload( value: unknown ): { displayName?: string | null; model?: string | null; caption?: string | null; worldUrl?: string | null; thumbnailUrl?: string | null; panoUrl?: string | null; meshUrl?: string | null; spzUrls?: Record | null; semanticsMetadata?: Record | null; } | null { return value && typeof value === "object" && !Array.isArray(value) ? (value as { displayName?: string | null; model?: string | null; caption?: string | null; worldUrl?: string | null; thumbnailUrl?: string | null; panoUrl?: string | null; meshUrl?: string | null; spzUrls?: Record | null; semanticsMetadata?: Record | null; }) : null; } export default async function SharedWorldPage({ params, }: { params: Promise<{ token: string }>; }) { const { token } = await params; const shareToken = String(token || "").trim(); if (!shareToken) { notFound(); } const [asset] = await db .select({ taskId: model3dAsset.taskId, prompt: model3dAsset.prompt, modelVersion: model3dAsset.modelVersion, previewImageUrl: model3dAsset.previewImageUrl, modelUrl: model3dAsset.modelUrl, assetPayload: model3dAsset.assetPayload, }) .from(model3dAsset) .where( and( eq(model3dAsset.shareEnabled, true), eq(model3dAsset.shareToken, shareToken), eq(model3dAsset.provider, "worldlabs-3d"), eq(model3dAsset.status, "success") ) ) .limit(1); if (!asset) { notFound(); } const assetPayload = readAssetPayload(asset.assetPayload); const sharePath = `/worlds/share/${shareToken}`; return ( ); }