const RETIRED_PAGE_KEYS = [ 'planning_upload', 'market_insight', 'agent', 'ai_skill_tags', 'store_checkup', 'review_analysis', 'customer_service_checkup', 'pricing_calculator', 'desktop_client_download', 'ai_buyer_show', 'ai_seeding_video', ]; const RETIRED_ENTRY_KEYS = new Set([ 'market-insight', 'agent', 'ai-skill-tags', 'platform-switch', 'store-management', 'store-checkup', 'review-analysis', 'customer-service-checkup', 'operation-tools', 'pricing-calculator', 'desktop-client-download', 'ai-buyer-show', 'ai-seeding-video', 'desktop-client-releases', ]); const RETIRED_CONFIG_KEYS = [ 'openclaw_chat_config', 'openclaw_chat_skill_tags', 'selection_similar_products_config', 'alibaba_1688_image_search_config', 'cs_quality_ai_config', 'desktop_client_releases', 'ai_buyer_show_ark_api_key', 'ai_buyer_show_ark_base_url', 'ai_buyer_show_vision_model', 'ai_buyer_show_review_model', ]; const RETIRED_DATABASE_CONFIG_NAMES = ['ai_buyer_show_database']; function isRetiredSystemConfigKey(key) { return RETIRED_CONFIG_KEYS.includes(String(key || '').trim()); } function isRetiredDatabaseConfigName(name) { return RETIRED_DATABASE_CONFIG_NAMES.includes(String(name || '').trim()); } function pruneRetiredSidebarConfig(value) { try { const config = typeof value === 'string' ? JSON.parse(value) : value; if (!config || !Array.isArray(config.entries)) return value; const prune = (entries) => entries .filter((entry) => entry && !RETIRED_ENTRY_KEYS.has(entry.key) && !RETIRED_ENTRY_KEYS.has(entry.routeKey)) .map((entry) => ({ ...entry, ...(Array.isArray(entry.children) ? { children: prune(entry.children) } : {}) })); const result = { ...config, entries: prune(config.entries) }; return typeof value === 'string' ? JSON.stringify(result) : result; } catch { return value; } } async function cleanupRetiredFeatureSettings(db) { for (const table of ['permissions', 'department_page_permissions', 'user_page_permissions']) { await db.query(`DELETE FROM ${table} WHERE page_key IN (${RETIRED_PAGE_KEYS.map(() => '?').join(',')})`, RETIRED_PAGE_KEYS); } await db.query(`DELETE FROM system_config WHERE config_key IN (${RETIRED_CONFIG_KEYS.map(() => '?').join(',')})`, RETIRED_CONFIG_KEYS); await db.query(`DELETE FROM database_configs WHERE name IN (${RETIRED_DATABASE_CONFIG_NAMES.map(() => '?').join(',')})`, RETIRED_DATABASE_CONFIG_NAMES); await db.query('DROP TABLE IF EXISTS pricing_calculator_history'); await db.query('DROP TABLE IF EXISTS pricing_calculator_user_prefs'); const rows = await db.query("SELECT config_value FROM system_config WHERE config_key = ?", ['sidebar_navigation']); if (rows.length) { const current = rows[0].config_value; const next = pruneRetiredSidebarConfig(current); if (current !== next) await db.query('UPDATE system_config SET config_value = ? WHERE config_key = ?', [next, 'sidebar_navigation']); } } module.exports = { RETIRED_PAGE_KEYS, RETIRED_CONFIG_KEYS, RETIRED_DATABASE_CONFIG_NAMES, isRetiredSystemConfigKey, isRetiredDatabaseConfigName, pruneRetiredSidebarConfig, cleanupRetiredFeatureSettings, };