import { createMintelDirectusClient, ensureDirectusAuthenticated, } from "@mintel/next-utils"; import { createCollection, createField, updateSettings } from "@directus/sdk"; const client = createMintelDirectusClient(); async function setupBranding() { const prjName = process.env.PROJECT_NAME || "MB Grid Solutions"; const prjColor = process.env.PROJECT_COLOR || "#82ed20"; console.log(`🎨 Refining Directus Branding for ${prjName}...`); await ensureDirectusAuthenticated(client); const cssInjection = `

Mintel Infrastructure Engine

${prjName.toUpperCase()} SYNC.

`; try { await client.request( updateSettings({ project_name: prjName, project_color: prjColor, public_note: cssInjection, module_bar_background: "#00081a", theme_light_overrides: { primary: prjColor, borderRadius: "12px", navigationBackground: "#000c24", navigationForeground: "#ffffff", moduleBarBackground: "#00081a", }, // eslint-disable-next-line @typescript-eslint/no-explicit-any } as any), ); console.log("✨ Branding applied!"); await createCollectionAndFields(); console.log("đŸ—ī¸ Schema alignment complete!"); } catch (error) { console.error("❌ Error during bootstrap:", error); } } async function createCollectionAndFields() { const collectionName = "contact_submissions"; try { await client.request( createCollection({ collection: collectionName, schema: {}, meta: { icon: "contact_mail", display_template: "{{name}} <{{email}}>", group: null, sort: null, collapse: "open", }, }), ); // Add ID field await client.request( createField(collectionName, { field: "id", type: "integer", meta: { hidden: true }, schema: { is_primary_key: true, has_auto_increment: true }, }), ); console.log(`✅ Collection ${collectionName} created.`); } catch { console.log(`â„šī¸ Collection ${collectionName} exists.`); } const safeAddField = async ( field: string, type: string, meta: Record = {}, ) => { try { await client.request(createField(collectionName, { field, type, meta })); console.log(`✅ Field ${field} added.`); } catch { // Ignore if exists } }; await safeAddField("name", "string", { interface: "input", display: "raw", width: "half", }); await safeAddField("email", "string", { interface: "input", display: "raw", width: "half", }); await safeAddField("company", "string", { interface: "input", display: "raw", width: "half", }); await safeAddField("message", "text", { interface: "textarea", display: "raw", width: "full", }); await safeAddField("date_created", "timestamp", { interface: "datetime", special: ["date-created"], display: "datetime", display_options: { relative: true }, width: "half", }); } setupBranding() .then(() => { process.exit(0); }) .catch((err) => { console.error("🚨 Fatal bootstrap error:", err); process.exit(1); });