Checkpoint: Création de connecteur web : l’URL est normalisée, la table est présente sur les trois environnements et le flux HTTPS de production a été validé avec le même profil utilisateur (création puis suppression sans résidu). Toute erreur de persistance est désormais remplacée côté navigateur par un message générique ; les logs ne conservent que le code technique MySQL/Drizzle, jamais la requête ni ses paramètres. Recette et production déployées, santé, MySQL, routes HTTP 200 et volumes PDF vérifiés. Suite validée : 75 tests, TypeScript et build.
This commit is contained in:
@@ -14,12 +14,24 @@ export function getSafeWebImportSourceError(_error: unknown): TRPCError {
|
||||
});
|
||||
}
|
||||
|
||||
/** Extrait uniquement le code du pilote, sans conserver son message ni ses paramètres. */
|
||||
export function getWebImportSourceTechnicalCode(error: unknown): string {
|
||||
if (!error || typeof error !== "object") return "unknown";
|
||||
|
||||
const directCode = "code" in error && typeof error.code === "string" ? error.code : null;
|
||||
if (directCode) return directCode;
|
||||
|
||||
const cause = "cause" in error ? error.cause : null;
|
||||
if (cause && typeof cause === "object" && "code" in cause && typeof cause.code === "string") {
|
||||
return cause.code;
|
||||
}
|
||||
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
/** Journalise uniquement les métadonnées techniques non sensibles. */
|
||||
export function logWebImportSourceSaveFailure(error: unknown): void {
|
||||
const technicalCode =
|
||||
error && typeof error === "object" && "code" in error && typeof error.code === "string"
|
||||
? error.code
|
||||
: "unknown";
|
||||
const technicalCode = getWebImportSourceTechnicalCode(error);
|
||||
|
||||
console.error("[WebImportSources] Échec d’enregistrement", { technicalCode });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user