{"record":{"id":"fe3a96e0e10c0a0f","repo":"RocketChat/Rocket.Chat","slug":"invalid-setting","errorCode":null,"errorMessage":"invalid-setting","messagePattern":"invalid-setting","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"apps/meteor/server/api/v1/omnichannel/appearance.ts","lineNumber":62,"sourceCode":"\t\t\t\t'Livechat_offline_email',\n\t\t\t\t'Livechat_conversation_finished_message',\n\t\t\t\t'Livechat_conversation_finished_text',\n\t\t\t\t'Livechat_registration_form',\n\t\t\t\t'Livechat_name_field_registration_form',\n\t\t\t\t'Livechat_email_field_registration_form',\n\t\t\t\t'Livechat_registration_form_message',\n\t\t\t\t'Livechat_hide_watermark',\n\t\t\t\t'Livechat_background',\n\t\t\t\t'Livechat_widget_position',\n\t\t\t\t'Livechat_hide_system_messages',\n\t\t\t\t'Omnichannel_allow_visitors_to_close_conversation',\n\t\t\t\t'Livechat_hide_expand_chat',\n\t\t\t];\n\n\t\t\tconst valid = settings.every((setting) => validSettingList.includes(setting._id));\n\n\t\t\tif (!valid) {\n\t\t\t\tthrow new Error('invalid-setting');\n\t\t\t}\n\n\t\t\tconst dbSettings = await Settings.findByIds(validSettingList, { projection: { _id: 1, value: 1, type: 1, values: 1 } })\n\t\t\t\t.map((dbSetting) => {\n\t\t\t\t\tconst setting = settings.find(({ _id }) => _id === dbSetting._id);\n\t\t\t\t\tif (!setting || dbSetting.value === setting.value) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (dbSetting.type === 'multiSelect' && (!Array.isArray(setting.value) || !validateValues(setting.value, dbSetting.values))) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (dbSetting?.type) {\n\t\t\t\t\t\tcase 'boolean':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t_id: dbSetting._id,\n\t\t\t\t\t\t\t\tvalue: setting.value === 'true' || setting.value === true,","sourceCodeStart":44,"sourceCodeEnd":80,"githubUrl":"https://github.com/RocketChat/Rocket.Chat/blob/f9d3ec372bb580fa8d036f94cf03925a478ef768/apps/meteor/server/api/v1/omnichannel/appearance.ts#L44-L80","documentation":"Thrown by the livechat appearance settings endpoint when one or more submitted setting _id values are not in the hardcoded validSettingList whitelist (approximately 25 known Livechat_* / Omnichannel_* appearance settings). The endpoint validates every submitted setting _id against this list before writing to the database.","triggerScenarios":"Submitting an appearance update that includes a setting _id not in the validSettingList array — either a typo, a renamed setting from a version upgrade, or an attempt to modify a non-appearance setting through this endpoint.","commonSituations":"Frontend sends a setting ID that was renamed or removed in a Rocket.Chat version upgrade; typo in the setting name in the request payload; client attempts to set a non-appearance setting (e.g., a server-level setting) through the appearance endpoint.","solutions":["Cross-reference the submitted setting _id values against the validSettingList array defined in apps/meteor/server/api/v1/omnichannel/appearance.ts.","Remove the invalid setting _id from the request payload.","Use the correct endpoint (e.g., PUT /api/v1/settings/:_id) for settings not in the appearance whitelist."],"exampleFix":"// before: includes a non-whitelisted setting\nPUT /api/v1/livechat/appearance\n{\n  \"settings\": [\n    { \"_id\": \"Livechat_title\", \"value\": \"My Chat\" },\n    { \"_id\": \"SMTP_Host\", \"value\": \"smtp.local\" }\n  ]\n}\n// after: only whitelisted appearance settings\nPUT /api/v1/livechat/appearance\n{\n  \"settings\": [\n    { \"_id\": \"Livechat_title\", \"value\": \"My Chat\" }\n  ]\n}","handlingStrategy":"validation","validationCode":"// Validate all setting _id values against the known whitelist before submitting\nconst VALID_LIVECHAT_APPEARANCE_SETTINGS = [\n  'Livechat_title', 'Livechat_title_color', 'Livechat_enable_message_character_limit',\n  'Livechat_message_character_limit', 'Livechat_show_agent_info', 'Livechat_show_agent_email',\n  'Livechat_display_offline_form', 'Livechat_offline_form_unavailable', 'Livechat_offline_message',\n  'Livechat_offline_success_message', 'Livechat_offline_title', 'Livechat_offline_title_color',\n  'Livechat_offline_email', 'Livechat_conversation_finished_message', 'Livechat_conversation_finished_text',\n  'Livechat_registration_form', 'Livechat_name_field_registration_form', 'Livechat_email_field_registration_form',\n  'Livechat_registration_form_message', 'Livechat_hide_watermark', 'Livechat_background',\n  'Livechat_widget_position', 'Livechat_hide_system_messages',\n  'Omnichannel_allow_visitors_to_close_conversation', 'Livechat_hide_expand_chat',\n];\n\nfunction filterValidSettings(settings) {\n  return settings.filter(s => VALID_LIVECHAT_APPEARANCE_SETTINGS.includes(s._id));\n}\n\nconst validSettings = filterValidSettings(submittedSettings);\nif (validSettings.length !== submittedSettings.length) {\n  console.warn('Some settings were filtered out — not in the appearance whitelist');\n}","typeGuard":"function isValidAppearanceSettingId(id: string): boolean {\n  const valid = new Set([\n    'Livechat_title', 'Livechat_title_color', 'Livechat_enable_message_character_limit',\n    'Livechat_message_character_limit', 'Livechat_show_agent_info', 'Livechat_show_agent_email',\n    'Livechat_display_offline_form', 'Livechat_offline_form_unavailable', 'Livechat_offline_message',\n    'Livechat_offline_success_message', 'Livechat_offline_title', 'Livechat_offline_title_color',\n    'Livechat_offline_email', 'Livechat_conversation_finished_message', 'Livechat_conversation_finished_text',\n    'Livechat_registration_form', 'Livechat_name_field_registration_form', 'Livechat_email_field_registration_form',\n    'Livechat_registration_form_message', 'Livechat_hide_watermark', 'Livechat_background',\n    'Livechat_widget_position', 'Livechat_hide_system_messages',\n    'Omnichannel_allow_visitors_to_close_conversation', 'Livechat_hide_expand_chat',\n  ]);\n  return valid.has(id);\n}","tryCatchPattern":"try {\n  await updateLivechatAppearance(settings);\n} catch (e) {\n  if (e.message === 'invalid-setting') {\n    console.error('One or more setting IDs are not in the appearance whitelist.');\n    console.error('Valid IDs:', VALID_LIVECHAT_APPEARANCE_SETTINGS);\n    return;\n  }\n  throw e;\n}","preventionTips":["Validate setting IDs against the hardcoded validSettingList before submitting appearance updates.","Keep the client-side whitelist in sync with the server's validSettingList after version upgrades.","Use the generic settings endpoint (PUT /api/v1/settings/:_id) for non-appearance settings."],"tags":["omnichannel","livechat","settings","validation"],"backgroundTag":null,"analyzedSha":"f9d3ec372bb580fa8d036f94cf03925a478ef768","analyzedAt":"2026-08-12T19:07:17.372Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}