Files
NODEDC_MISSION_CORE/plugins/xgrids-k1/frontend/src/hostDiagnosticPresentation.ts
T
DCCONSTRUCTIONS 0ca7316a24 wip(k1): checkpoint connection recovery rewrite
Capture the current unreleased K1 connection, recovery, lifecycle, viewer, and test work as a single known-bad baseline for subsequent fixes.
2026-08-14 14:57:50 +03:00

133 lines
7.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import {
isXgridsHostFailureDiagnostic,
type XgridsHostDiagnosticCode,
type XgridsHostDiagnosticAction,
type XgridsHostDiagnosticDomain,
type XgridsHostDiagnosticImpact,
type XgridsHostFailureDiagnostic,
type XgridsOperation,
} from "./api";
const CODE_LABELS: Record<XgridsHostDiagnosticCode, string> = {
"host.bluetooth.permission-denied":
"macOS не разрешила Mission Core использовать Bluetooth.",
"host.bluetooth.adapter-powered-off":
"Bluetooth на этом Mac выключен.",
"host.bluetooth.adapter-unavailable":
"Системный Bluetooth-адаптер сейчас недоступен.",
"host.bluetooth.runtime-unavailable":
"Локальный Bluetooth runtime не готов к новой операции.",
"host.bluetooth.operation-timeout":
"Bluetooth-операция не завершилась за ограниченное время.",
"host.wifi.permission-denied":
"macOS не разрешила Mission Core читать состояние Wi‑Fi.",
"host.wifi.adapter-powered-off":
"Wi‑Fi на этом Mac выключен.",
"host.wifi.interface-unavailable":
"Системный Wi‑Fi-интерфейс сейчас недоступен.",
"host.wifi.ssid-unavailable":
"macOS не сообщила имя текущей Wi‑Fi-сети.",
"host.wifi.operation-timeout":
"Операция с Wi‑Fi не завершилась за ограниченное время.",
"host.wifi.association-failed":
"Mac не подтвердил подключение к ожидаемой Wi‑Fi-сети.",
"host.keychain.interaction-required":
"Связка ключей требует явного подтверждения оператора.",
"host.keychain.permission-denied":
"macOS запретила чтение профиля подключения.",
"host.keychain.unavailable":
"Профиль подключения сейчас недоступен в связке ключей.",
"host.route.unavailable":
"Прямой локальный маршрут к адресу подключения не найден.",
"host.tcp.connection-refused":
"Управляющий TCP endpoint отклонил соединение.",
"host.tcp.connection-timeout":
"Управляющий TCP endpoint не ответил за ограниченное время.",
"host.tcp.endpoint-unavailable":
"Управляющий TCP endpoint недоступен из текущей сети.",
"host.mqtt.connection-timeout":
"Управляющий MQTT-канал не открылся за ограниченное время.",
"host.mqtt.connection-refused":
"Управляющий MQTT-канал отклонил соединение.",
"host.mqtt.transport-unavailable":
"Транспорт управляющего MQTT-канала недоступен.",
"host.filesystem.permission-denied":
"Mission Core не может записать обязательные данные операции в локальное хранилище.",
"host.filesystem.ledger-unavailable":
"Журнал безопасного результата операции недоступен или не подтверждён.",
};
const DOMAIN_LABELS: Record<XgridsHostDiagnosticDomain, string> = {
corebluetooth: "Bluetooth macOS",
corewlan: "Wi‑Fi macOS",
keychain: "Связка ключей macOS",
route: "Локальный сетевой маршрут",
tcp: "Управляющий TCP endpoint",
mqtt: "Управляющий канал MQTT",
filesystem: "Локальное хранилище Mission Core",
};
const IMPACT_LABELS: Record<XgridsHostDiagnosticImpact, string> = {
discovery: "Поиск Bluetooth сейчас недоступен.",
"host-network": "Сетевой путь между этим компьютером и локальным контуром недоступен.",
control: "Управляющая связь не установлена; команды не повторяются автоматически.",
"durable-safety": "Надёжная фиксация результата операции недоступна; новая команда заблокирована.",
};
const ACTION_LABELS: Record<XgridsHostDiagnosticAction, string> = {
"grant-bluetooth-permission":
"Разрешите Mission Core доступ к Bluetooth в системных настройках macOS, затем повторите действие вручную.",
"power-on-bluetooth":
"Включите Bluetooth на этом Mac и запустите новый поиск вручную.",
"restore-bluetooth-adapter":
"Восстановите доступность Bluetooth-адаптера macOS и перезапустите локальный сервис перед новой попыткой.",
"grant-wifi-permission":
"Разрешите Mission Core доступ к данным Wi‑Fi в системных настройках macOS, затем повторите действие вручную.",
"power-on-wifi":
"Включите Wi‑Fi на этом Mac и заново выберите требуемый способ подключения.",
"restore-wifi-interface":
"Восстановите системный Wi‑Fi-интерфейс macOS перед новой попыткой подключения.",
"unlock-or-authorize-keychain":
"Разблокируйте связку ключей macOS и подтвердите доступ Mission Core к профилю подключения.",
"review-keychain-access":
"Разрешите Mission Core чтение профиля подключения в связке ключей macOS.",
"join-expected-network":
"Установите связь этого Mac с ожидаемой локальной сетью и повторите действие.",
"inspect-host-route":
"Восстановите прямой локальный маршрут к адресу подключения.",
"verify-broker-endpoint":
"Восстановите доступность управляющего endpoint из текущей сети; команда автоматически не повторяется.",
"inspect-local-storage":
"Освободите место и восстановите доступ к локальному хранилищу Mission Core до следующей операции.",
"restart-local-service":
"Перезапустите канонический локальный сервис Mission Core и после загрузки обновите состояние.",
"explicit-retry":
"После устранения причины повторите действие отдельным нажатием; автоматического повтора нет.",
};
export interface HostFailureDiagnosticPresentation {
codeLabel: string;
domainLabel: string;
impactLabel: string;
operatorActionLabel: string;
}
export function hostFailureDiagnosticPresentation(
value: unknown,
): HostFailureDiagnosticPresentation | null {
if (!isXgridsHostFailureDiagnostic(value)) return null;
return {
codeLabel: CODE_LABELS[value.code],
domainLabel: DOMAIN_LABELS[value.domain],
impactLabel: IMPACT_LABELS[value.impact],
operatorActionLabel: ACTION_LABELS[value.operator_action],
};
}
export function operationHostFailureDiagnostic(
operation: XgridsOperation | null | undefined,
): XgridsHostFailureDiagnostic | null {
const diagnostic = operation?.error?.host_diagnostic;
return isXgridsHostFailureDiagnostic(diagnostic) ? diagnostic : null;
}