security(errors): 5xx без утечки err.message клиенту

Шаг 0.7 плана production-готовности:
- глобальный error handler: нейтральный текст + код инцидента, детали в лог
- route-уровень: зачистка err.message/String(err) в 5xx по 12 файлам,
  оригинальные ошибки логируются с контекстом
This commit is contained in:
2026-09-07 20:42:39 +03:00
parent b3d7923b23
commit 26419f395f
14 changed files with 73 additions and 44 deletions

View File

@@ -256,7 +256,7 @@ export function registerMcpRagRoutes(app: import("express").Express): void {
failed: prev?.failed ?? 0,
status: 'error',
startedAt: prev?.startedAt ?? Date.now(),
error: String(err),
error: 'Ошибка переиндексации',
});
setTimeout(() => reindexProgressStore.delete(organizationId), 5 * 60 * 1000);
});
@@ -322,7 +322,8 @@ export function registerMcpRagRoutes(app: import("express").Express): void {
const reminders = await storage.getTaskReminders(taskId, req.organizationId!);
return res.json({ success: true, reminders });
} catch (err: any) {
return res.status(500).json({ success: false, error: err.message });
console.error('Get task reminders error:', err);
return res.status(500).json({ success: false, error: 'Ошибка загрузки напоминаний' });
}
});
@@ -383,7 +384,8 @@ export function registerMcpRagRoutes(app: import("express").Express): void {
});
return res.json({ success: true, reminder });
} catch (err: any) {
return res.status(500).json({ success: false, error: err.message });
console.error('Create task reminder error:', err);
return res.status(500).json({ success: false, error: 'Ошибка создания напоминания' });
}
});
@@ -394,7 +396,8 @@ export function registerMcpRagRoutes(app: import("express").Express): void {
await storage.deleteTaskReminder(id, req.organizationId!);
return res.json({ success: true });
} catch (err: any) {
return res.status(500).json({ success: false, error: err.message });
console.error('Delete task reminder error:', err);
return res.status(500).json({ success: false, error: 'Ошибка удаления напоминания' });
}
});