From c242e364bb2d75d4e5da72785b5a8494ce9fcde9 Mon Sep 17 00:00:00 2001 From: CODEX Date: Thu, 2 Jul 2026 20:47:20 +0300 Subject: [PATCH] Fix BIM share settings persistence on server --- server/index.js | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/server/index.js b/server/index.js index fb2d296..9659c4f 100644 --- a/server/index.js +++ b/server/index.js @@ -1940,6 +1940,21 @@ const handleLogout = (req, res, {redirect = true} = {}) => { res.end("NODE.DC BIM session closed."); }; +const normalizeViewerSettings = (value) => ( + value && typeof value === "object" && !Array.isArray(value) + ? value + : null +); + +const readViewerSettingsForModelSrc = async (src) => { + const manifestRef = await findManifestForModelSrc(src).catch(() => null); + if (!manifestRef || !existsSync(manifestRef.manifestPath)) { + return null; + } + const manifest = await readJSONFile(manifestRef.manifestPath); + return normalizeViewerSettings(manifest?.viewerSettings); +}; + const handleCreateShare = async (req, res) => { const session = await getValidatedBimSession(req, res); if (BIM_AUTH_REQUIRED && !session) { @@ -1973,9 +1988,8 @@ const handleCreateShare = async (req, res) => { const name = typeof payload?.name === "string" && payload.name.trim() ? payload.name.trim().slice(0, 240) : path.basename(src); - const viewerSettings = payload?.viewerSettings && typeof payload.viewerSettings === "object" && !Array.isArray(payload.viewerSettings) - ? payload.viewerSettings - : null; + const viewerSettings = normalizeViewerSettings(payload?.viewerSettings) + || await readViewerSettingsForModelSrc(settingsSrc || src); const share = { token, access: "public-readonly", @@ -2058,6 +2072,8 @@ const handleGetShare = async (req, res, token) => { projectId: share.projectId, assetId: share.assetId }).catch(() => null); + const viewerSettings = normalizeViewerSettings(share.viewerSettings) + || await readViewerSettingsForModelSrc(share.settingsSrc || share.src); sendJSON(res, 200, { ok: true, mode: authenticated ? "standard" : "guest", @@ -2077,7 +2093,7 @@ const handleGetShare = async (req, res, token) => { projectId: share.projectId || null, versionId: share.versionId || versionHistory?.currentVersionId || null, selectedLod: share.selectedLod || null, - viewerSettings: share.viewerSettings || null, + viewerSettings, versions: versionHistory?.versions || [] }, share: {