Handle rejected subscriptions and add local client compose
Build and Deploy Gateway / build-and-push (push) Successful in 14s
Build and Deploy Gateway / deploy (push) Successful in 6s

This commit is contained in:
2026-07-13 20:23:37 +03:00
parent 8c19f2cba9
commit 56f5e408e3
10 changed files with 306 additions and 443 deletions
+36
View File
@@ -77,6 +77,42 @@ export function localProxyUrls(port = 8082, host = '127.0.0.1') {
};
}
export function routePresentation(route = {}) {
if (route.mode === 'gateway-direct') {
return route.reason === 'gateway-stale'
? {
title: 'Harbor Gateway проверяется',
detail: 'Последняя проверка успешна, но свежего ответа пока нет.',
tone: 'stale',
}
: {
title: 'Через Harbor Gateway',
detail: 'Подпиской и сервером сейчас управляет Gateway.',
tone: 'gateway',
};
}
if (route.mode === 'local-vpn') {
if (route.reason === 'gateway-lost') {
return {
title: 'Локальный VPN · Gateway недоступен',
detail: 'Harbor вернулся к локальному VPN. При восстановлении Gateway авторежим переключится обратно.',
tone: 'lost',
};
}
return {
title: 'Локальный VPN',
detail: route.reason === 'disabled'
? 'Автопереход на домашний Gateway выключен.'
: 'Connect использует выбранный здесь VPN-сервер.',
tone: 'local',
};
}
if (route.mode === 'direct') {
return { title: 'Прямое подключение', detail: 'Трафик не идёт через VPN.', tone: 'direct' };
}
return { title: 'Маршрут неизвестен', detail: 'Harbor ещё не подтвердил текущий маршрут.', tone: 'unknown' };
}
export async function copyText(text, options = {}) {
const clipboard = options.clipboard ?? globalThis.navigator?.clipboard;
const documentRef = options.documentRef ?? globalThis.document;