fix(k1): harden BLE discovery and bridge recovery
This commit is contained in:
@@ -118,7 +118,7 @@ export function K1ProvisioningPipeline({
|
||||
phaseLabel: string;
|
||||
phaseTone: StatusTone;
|
||||
}) {
|
||||
const { state, pendingAction, scan, connect } = controller;
|
||||
const { state, pendingAction, scan, connect, verifyConnection } = controller;
|
||||
const [powerConfirmed, setPowerConfirmed] = useState(false);
|
||||
const [selectedDeviceId, setSelectedDeviceId] = useState("");
|
||||
const [ssid, setSsid] = useState("");
|
||||
@@ -160,6 +160,11 @@ export function K1ProvisioningPipeline({
|
||||
() => devices.find((device) => device.device_id === selectedDeviceId),
|
||||
[devices, selectedDeviceId],
|
||||
);
|
||||
const canAdoptExistingBridge = connectionMode === "bridge"
|
||||
&& powerConfirmed
|
||||
&& selectedDeviceId.length > 0
|
||||
&& deviceSummary !== undefined
|
||||
&& !isBusy;
|
||||
|
||||
const resetProvisioningIntent = () => {
|
||||
provisioningIntentRef.current = null;
|
||||
@@ -190,6 +195,14 @@ export function K1ProvisioningPipeline({
|
||||
}
|
||||
};
|
||||
|
||||
const submitExistingBridgeAdoption = async () => {
|
||||
if (!canAdoptExistingBridge) return;
|
||||
await verifyConnection({
|
||||
device_id: selectedDeviceId,
|
||||
compatibility_attestation: profileSelectionForConnectionMode("bridge"),
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<GlassSurface className="connection-panel" padding="lg">
|
||||
<header className="panel-heading">
|
||||
@@ -275,6 +288,24 @@ export function K1ProvisioningPipeline({
|
||||
? connectionMode === "quick-connect" ? "Включаем точку и подключаем…" : "Подключаем…"
|
||||
: modeCopy.buttonLabel}
|
||||
</Button>
|
||||
{connectionMode === "bridge" ? (
|
||||
<>
|
||||
<Button
|
||||
width="full"
|
||||
variant="secondary"
|
||||
icon={<Icon name="refresh" />}
|
||||
disabled={!canAdoptExistingBridge}
|
||||
onClick={() => void submitExistingBridgeAdoption()}
|
||||
>
|
||||
{pendingAction === "verify"
|
||||
? "Проверяем существующее подключение…"
|
||||
: "Подхватить существующее подключение"}
|
||||
</Button>
|
||||
<p className="safety-note">
|
||||
Если K1 уже подключён к этой сети другим способом, Mission Core проверит и примет существующее подключение без изменения настроек Wi‑Fi.
|
||||
</p>
|
||||
</>
|
||||
) : null}
|
||||
<p className="safety-note">
|
||||
{modeCopy.safetyNote}
|
||||
{connectionMode === "quick-connect" ? " Это лабораторный путь для уже подготовленного хоста: credential provider должен существовать в системном хранилище заранее. На чистом Mac операция завершится до BLE-записи; браузер, API, журналы и evidence секрета не получают." : " Пароль передаётся только локальному сервису, не сохраняется в браузере и удаляется из формы после успеха."}
|
||||
|
||||
Reference in New Issue
Block a user