const path = require("path"); const fs = require("fs"); const { getType } = require("mime"); const { v4 } = require("uuid"); const { SystemSettings } = require("../../models/systemSettings"); const LIGHT_LOGO_FILENAME = "anything-llm-light.png"; const DARK_LOGO_FILENAME = "anything-llm-dark.png"; function validFilename(newFilename = "") { return ![DARK_LOGO_FILENAME, LIGHT_LOGO_FILENAME].includes(newFilename); } function getDefaultFilename(mode = "dark") { return mode === "light" ? DARK_LOGO_FILENAME : LIGHT_LOGO_FILENAME; } async function determineLogoFilepath(defaultFilename = DARK_LOGO_FILENAME) { const currentLogoFilename = await SystemSettings.currentLogoFilename(); const basePath = path.join(__dirname, "../../storage/assets"); const defaultFilepath = path.join(basePath, defaultFilename); if (currentLogoFilename && validFilename(currentLogoFilename)) { customLogoPath = path.join(basePath, currentLogoFilename); return fs.existsSync(customLogoPath) ? customLogoPath : defaultFilepath; } return defaultFilepath; } function fetchLogo(logoPath) { const mime = getType(logoPath); const buffer = fs.readFileSync(logoPath); return { buffer, size: buffer.length, mime, }; } async function renameLogoFile(originalFilename = null) { const extname = path.extname(originalFilename) || ".png"; const newFilename = `${v4()}${extname}`; const originalFilepath = path.join( __dirname, `../../storage/assets/${originalFilename}` ); const outputFilepath = path.join( __dirname, `../../storage/assets/${newFilename}` ); fs.renameSync(originalFilepath, outputFilepath); return newFilename; } async function removeCustomLogo(logoFilename = DARK_LOGO_FILENAME) { if (!logoFilename || !validFilename(logoFilename)) return false; const logoPath = path.join(__dirname, `../../storage/assets/${logoFilename}`); if (fs.existsSync(logoPath)) fs.unlinkSync(logoPath); return true; } module.exports = { fetchLogo, renameLogoFile, removeCustomLogo, validFilename, getDefaultFilename, determineLogoFilepath, LIGHT_LOGO_FILENAME, DARK_LOGO_FILENAME, };