From ff46cf61a55d44a0dec114e678c18d6801421f14 Mon Sep 17 00:00:00 2001 From: Hermann_Kitio Date: Sat, 25 Apr 2026 06:50:48 +0300 Subject: [PATCH] fix(eo): normalize MIME type before validation (strip codec params) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - "audio/webm;codecs=opus" → "audio/webm" before isAcceptedAudioMime check - Normalized MIME propagated to Gemini transcribeAudio Typecheck: OK · Tests: 248/248 ✅ Co-Authored-By: Claude Opus 4.7 (1M context) --- src/controllers/correctionController.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/controllers/correctionController.ts b/src/controllers/correctionController.ts index c289368..69099e9 100644 --- a/src/controllers/correctionController.ts +++ b/src/controllers/correctionController.ts @@ -394,7 +394,11 @@ export async function correctEO( // 3. Mode batch audio : transcrire d'abord. Mode transcript direct : passer. let transcript: string; if (input.audioBase64 && input.mimeType) { - if (!isAcceptedAudioMime(input.mimeType)) { + // Normalisation du MIME : `MediaRecorder` côté navigateur produit souvent + // un type complet `audio/webm;codecs=opus`. La whitelist Gemini compare + // par égalité stricte → on conserve uniquement la partie principale. + const normalizedMime = input.mimeType.split(";", 1)[0]!.trim(); + if (!isAcceptedAudioMime(normalizedMime)) { return { error: true, code: "VALIDATION_ERROR", @@ -404,7 +408,7 @@ export async function correctEO( }; } try { - transcript = await transcribeAudio(input.audioBase64, input.mimeType); + transcript = await transcribeAudio(input.audioBase64, normalizedMime); } catch (err) { const message = err instanceof Error ? err.message : String(err); console.error("[correctionController.correctEO] transcription failed", {