// Returns a Next.js Metadata `icons` object derived from a Brand. // Apps drop this into their root layout's `metadata` export to ship // the brand logo as the favicon — fixes the "favicon 404" every // consumer of the kit was shipping with. // // import type { Metadata } from "next"; // import { brandIcons } from "@gsc/web-kit/chrome"; // import { brand } from "@/config/brand"; // // export const metadata: Metadata = { // title: brand.product, // icons: brandIcons(brand), // }; import type { Brand } from "./types"; interface BrandMetaIcons { icon: { url: string; type?: string }[]; shortcut?: { url: string; type?: string }[]; apple?: { url: string; type?: string }[]; } export function brandIcons(brand: Brand): BrandMetaIcons { const url = brand.faviconUrl ?? brand.logoUrl; // Heuristic: trust the file extension to set the MIME type. Most // brand logos in the GoSec assets bucket are SVG. const type = /\.svg(\?|$)/i.test(url) ? "image/svg+xml" : /\.png(\?|$)/i.test(url) ? "image/png" : /\.ico(\?|$)/i.test(url) ? "image/x-icon" : undefined; return { icon: [{ url, ...(type ? { type } : {}) }], shortcut: [{ url }], apple: [{ url }], }; }