Capture the current unreleased K1 connection, recovery, lifecycle, viewer, and test work as a single known-bad baseline for subsequent fixes.
71 lines
3.7 KiB
TypeScript
71 lines
3.7 KiB
TypeScript
// Vendor message normalization belongs to the XGRIDS frontend contribution.
|
|
const runtimeMessageReplacements: Array<[RegExp, string]> = [
|
|
[
|
|
/^control MQTT connect call failed(?::.*)?$/gi,
|
|
"Управляющее соединение со сканером не открылось: устройство не приняло MQTT-соединение. Команды сканирования не отправлялись.",
|
|
],
|
|
[
|
|
/macOS Keychain authority is unavailable/gi,
|
|
"Локальный допуск управления K1 не подготовлен. Команды сканеру не отправлялись.",
|
|
],
|
|
[
|
|
/macOS Keychain authority lookup failed/gi,
|
|
"Локальный допуск управления K1 недоступен. Команды сканеру не отправлялись.",
|
|
],
|
|
[
|
|
/control MQTT connect call failed/gi,
|
|
"Управляющее соединение с K1 не открылось. Команды сканеру не отправлялись.",
|
|
],
|
|
[
|
|
/^Device plugin returned an invalid non-JSON action result$/gi,
|
|
"Плагин устройства сформировал некорректное внутреннее состояние. Запрос к K1 не повторялся.",
|
|
],
|
|
[
|
|
/^bootstrap response correlation failed.*$/gi,
|
|
"Ответ K1 на подготовительном этапе не совпал с ожидаемой операцией. Диалог остановлен без автоматического повтора.",
|
|
],
|
|
[
|
|
/^live DeviceInfo is incompatible with the selected.*$/gi,
|
|
"Устройство ответило, но его живые данные не соответствуют выбранному профилю совместимости. START и STOP не отправлялись.",
|
|
],
|
|
[
|
|
/^K1 did not confirm bound SCANNING initialization.*$/gi,
|
|
"После START устройство не подтвердило завершение инициализации в безопасный срок. Автоматический STOP не отправлялся.",
|
|
],
|
|
[
|
|
/^stale control response makes the next command outcome ambiguous$/gi,
|
|
"Получен запоздавший ответ предыдущего этапа. Диалог остановлен, следующая команда не отправлялась.",
|
|
],
|
|
[
|
|
/control MQTT connection\/subscription timed out/gi,
|
|
"Управляющее соединение с K1 не подтвердилось вовремя. Команды сканеру не отправлялись.",
|
|
],
|
|
[/broker connection ended/gi, "соединение с брокером завершено"],
|
|
[/Unspecified error/gi, "неуказанная ошибка"],
|
|
[
|
|
/Device was not rediscovered; keep the K1 powered and nearby\.?/gi,
|
|
"Устройство не обнаружено повторно; оставьте его включённым и рядом.",
|
|
],
|
|
[/Foxglove/gi, "локальный мост визуализации"],
|
|
[/MacBook/gi, "компьютер"],
|
|
];
|
|
|
|
export function localizeRuntimeMessage(message: string | null | undefined): string | null {
|
|
if (!message) return null;
|
|
|
|
const localized = runtimeMessageReplacements.reduce(
|
|
(localized, [pattern, replacement]) => localized.replace(pattern, replacement),
|
|
message,
|
|
);
|
|
|
|
const withoutTechnicalTerms = localized.replace(
|
|
/\b(?:API|BLE|Bluetooth|gRPC|IP|JSON|K1MQTT|MQTT|Rerun|RRD|TSV|UUID|Wi-Fi)\b/gi,
|
|
"",
|
|
);
|
|
if (/[A-Za-z]{3,}/.test(withoutTechnicalTerms)) {
|
|
return "Операция не выполнена. Технические подробности сохранены в журнале сервера.";
|
|
}
|
|
|
|
return localized;
|
|
}
|