From 5325ac1babf2e4fe55a1493bd5b1c8e9d1bf9278 Mon Sep 17 00:00:00 2001 From: Rupak Kumar Goura Date: Mon, 18 May 2026 23:08:40 +0530 Subject: [PATCH 1/2] fix(services): added plain-text MIME type fallback for consistent file detection --- packages/services/src/file/helper.ts | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/services/src/file/helper.ts b/packages/services/src/file/helper.ts index b8e96283986..df7fdc3bacf 100644 --- a/packages/services/src/file/helper.ts +++ b/packages/services/src/file/helper.ts @@ -81,6 +81,18 @@ const detectMimeTypeFromSignature = async (file: File): Promise => { } }; +const PLAIN_TEXT_MIME_MAP: Record = { + md: "text/markdown", + markdown: "text/markdown", + txt: "text/plain", + csv: "text/csv", + json: "application/json", + css: "text/css", + js: "text/javascript", + sql: "application/x-sql", + xml: "text/xml", +}; + /** * @description Validate and detect the MIME type of a file using signature detection * Also performs basic security checks on filename @@ -103,8 +115,14 @@ const validateAndDetectFileType = async (file: File): Promise => { console.warn("Error detecting file type from signature:", _error); } - // fallback for unknown files - return ""; + // Fallback 1: Static extension lookup for whitelisted plain-text files + const extension = file.name.split(".").pop()?.toLowerCase() || ""; + if (extension in PLAIN_TEXT_MIME_MAP) { + return PLAIN_TEXT_MIME_MAP[extension]; + } + + // Fallback 2: Generic browser/OS fallback + return file.type || ""; }; /** From caf690331a820af70f2f85e349df5a92fdb2d99c Mon Sep 17 00:00:00 2001 From: Rupak Kumar Goura Date: Mon, 18 May 2026 23:28:54 +0530 Subject: [PATCH 2/2] fixes --- packages/services/src/file/helper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/services/src/file/helper.ts b/packages/services/src/file/helper.ts index df7fdc3bacf..8c896822453 100644 --- a/packages/services/src/file/helper.ts +++ b/packages/services/src/file/helper.ts @@ -117,7 +117,7 @@ const validateAndDetectFileType = async (file: File): Promise => { // Fallback 1: Static extension lookup for whitelisted plain-text files const extension = file.name.split(".").pop()?.toLowerCase() || ""; - if (extension in PLAIN_TEXT_MIME_MAP) { + if (Object.hasOwn(PLAIN_TEXT_MIME_MAP, extension)) { return PLAIN_TEXT_MIME_MAP[extension]; }