diff --git a/server/server.ts b/server/server.ts index 4d63bfad..6a844005 100644 --- a/server/server.ts +++ b/server/server.ts @@ -718,16 +718,17 @@ function initializeClient( return; } - if ( - typeof newSetting.value === "object" || - typeof newSetting.name !== "string" || - newSetting.name[0] === "_" - ) { + if (typeof newSetting.name !== "string" || newSetting.name[0] === "_") { + return; + } + + // Allow plain objects for nested settings, but reject arrays and null + if (typeof newSetting.value === "object" && !_.isPlainObject(newSetting.value)) { return; } // We do not need to do write operations and emit events if nothing changed. - if (client.config.clientSettings[newSetting.name] !== newSetting.value) { + if (!_.isEqual(client.config.clientSettings[newSetting.name], newSetting.value)) { client.config.clientSettings[newSetting.name] = newSetting.value; // Pass the setting to all clients.