import client, { ensureAuthenticated } from '../lib/directus'; import { deleteCollection, deleteFile, readFiles, updateSettings, uploadFiles } from '@directus/sdk'; import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; // Helper for ESM __dirname const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); async function revertAndRestoreBranding() { console.log('🚨 REVERTING EVERYTHING - RESTORING BRANDING ONLY 🚨'); await ensureAuthenticated(); // 1. DELETE ALL COLLECTIONS const collectionsToDelete = [ 'categories_link', 'categories_translations', 'categories', 'products_translations', 'products', 'posts_translations', 'posts', 'pages_translations', 'pages', 'globals_translations', 'globals' ]; console.log('đŸ—‘ī¸ Deleting custom collections...'); for (const col of collectionsToDelete) { try { await client.request(deleteCollection(col)); console.log(`✅ Deleted collection: ${col}`); } catch (e: any) { console.log(`â„šī¸ Collection ${col} not found or already deleted.`); } } // 2. DELETE ALL FILES console.log('đŸ—‘ī¸ Deleting ALL files...'); try { const files = await client.request(readFiles({ limit: -1 })); if (files && files.length > 0) { const ids = files.map(f => f.id); await client.request(deleteFile(ids)); // Batch delete if supported by SDK version, else loop console.log(`✅ Deleted ${ids.length} files.`); } else { console.log('â„šī¸ No files to delete.'); } } catch (e: any) { // Fallback to loop if batch fails try { const files = await client.request(readFiles({ limit: -1 })); for (const f of files) { await client.request(deleteFile(f.id)); } console.log(`✅ Deleted files individually.`); } catch (err) { } } // 3. RESTORE BRANDING (Exact copy of setup-directus-branding.ts logic) console.log('🎨 Restoring Premium Branding...'); try { const getMimeType = (filePath: string) => { const ext = path.extname(filePath).toLowerCase(); switch (ext) { case '.svg': return 'image/svg+xml'; case '.png': return 'image/png'; case '.jpg': case '.jpeg': return 'image/jpeg'; case '.ico': return 'image/x-icon'; default: return 'application/octet-stream'; } }; const uploadAsset = async (filePath: string, title: string) => { if (!fs.existsSync(filePath)) { console.warn(`âš ī¸ File not found: ${filePath}`); return null; } const mimeType = getMimeType(filePath); const form = new FormData(); const fileBuffer = fs.readFileSync(filePath); const blob = new Blob([fileBuffer], { type: mimeType }); form.append('file', blob, path.basename(filePath)); form.append('title', title); const res = await client.request(uploadFiles(form)); return res.id; }; const logoWhiteId = await uploadAsset(path.resolve(__dirname, '../public/logo-white.svg'), 'Logo White'); const logoBlueId = await uploadAsset(path.resolve(__dirname, '../public/logo-blue.svg'), 'Logo Blue'); const faviconId = await uploadAsset(path.resolve(__dirname, '../public/favicon.ico'), 'Favicon'); // Smoother Background SVG const bgSvgPath = path.resolve(__dirname, '../public/login-bg.svg'); fs.writeFileSync(bgSvgPath, ` `); const backgroundId = await uploadAsset(bgSvgPath, 'Login Bg'); if (fs.existsSync(bgSvgPath)) fs.unlinkSync(bgSvgPath); // Update Settings const COLOR_PRIMARY = '#001a4d'; const COLOR_ACCENT = '#82ed20'; const COLOR_SECONDARY = '#003d82'; const cssInjection = `

KLZ INFRASTRUCTURE ENGINE

Sustainable Energy. Industrial Reliability.

`; await client.request(updateSettings({ project_name: 'KLZ Cables', project_url: 'https://klz-cables.com', project_color: COLOR_ACCENT, project_descriptor: 'Sustainable Energy Infrastructure', project_owner: 'KLZ Cables', project_logo: logoWhiteId as any, public_foreground: logoWhiteId as any, public_background: backgroundId as any, public_note: cssInjection, public_favicon: faviconId as any, theme_light_overrides: { "primary": COLOR_ACCENT, "secondary": COLOR_SECONDARY, "background": "#f1f3f7", "backgroundNormal": "#ffffff", "backgroundAccent": "#eef2ff", "navigationBackground": COLOR_PRIMARY, "navigationForeground": "#ffffff", "navigationBackgroundHover": "rgba(255,255,255,0.05)", "navigationForegroundHover": "#ffffff", "navigationBackgroundActive": "rgba(130, 237, 32, 0.15)", "navigationForegroundActive": COLOR_ACCENT, "moduleBarBackground": "#000d26", "moduleBarForeground": "#ffffff", "moduleBarForegroundActive": COLOR_ACCENT, "borderRadius": "16px", "borderWidth": "1px", "borderColor": "#e2e8f0", "formFieldHeight": "48px" } as any, theme_dark_overrides: { "primary": COLOR_ACCENT, "background": "#0a0a0a", "navigationBackground": "#000000", "moduleBarBackground": COLOR_PRIMARY, "borderRadius": "16px", "formFieldHeight": "48px" } as any })); console.log('✨ System Cleaned & Branding Restored Successfully'); } catch (error: any) { console.error('❌ Error restoring branding:', JSON.stringify(error, null, 2)); } } revertAndRestoreBranding().catch(console.error);