Логин guard: корректный precheck, company приоритет, hp в trademarks; подробные ошибки UI

This commit is contained in:
AidarKC
2026-05-27 22:15:54 +04:00
parent 101fd2eaa4
commit 775b655aac
7 changed files with 163 additions and 25 deletions
+18 -8
View File
@@ -1,7 +1,7 @@
import { renderHeader } from '../components/header.js';
import { authService, clearAuthMessages, state } from '../state.js';
import { toUserMessage } from '../services/ui-error-texts.js';
import { precheckLoginClassOnSolana } from '../services/solana-register-service.js';
import { formatSolanaErrorDetails, precheckLoginClassOnSolana } from '../services/solana-register-service.js';
export const pageMeta = { id: 'register-view', title: 'Зарегистрироваться', showAppChrome: false };
@@ -90,12 +90,18 @@ export function render({ navigate }) {
await authService.reconnect(state.entrySettings.shineServer);
const isFree = await authService.ensureLoginFree(login);
let className = '';
let precheckWarning = '';
if (isFree) {
const precheck = await precheckLoginClassOnSolana({
login,
solanaEndpoint: state.entrySettings.solanaServer,
});
className = precheck.className;
try {
const precheck = await precheckLoginClassOnSolana({
login,
solanaEndpoint: state.entrySettings.solanaServer,
});
className = precheck.className;
} catch (precheckError) {
className = 'free';
precheckWarning = formatSolanaErrorDetails(precheckError);
}
}
lastCheckedLogin = login;
lastCheckedFree = isFree;
@@ -104,7 +110,9 @@ export function render({ navigate }) {
statusText.textContent = 'Логин уже занят ❌';
statusText.className = 'is-unavailable';
} else if (className === 'free') {
statusText.textContent = 'Логин свободен ✅';
statusText.textContent = precheckWarning
? `Логин свободен ✅ (предпроверка Solana недоступна: ${precheckWarning})`
: 'Логин свободен ✅';
statusText.className = 'is-available';
} else if (className === 'premium') {
statusText.textContent = 'Логин свободен, но это премиум-логин (покупка через DAO) ❌';
@@ -119,7 +127,9 @@ export function render({ navigate }) {
formError.style.display = 'none';
return isFree && className === 'free';
} catch (error) {
statusText.textContent = toUserMessage(error, 'Не удалось проверить логин');
const base = toUserMessage(error, 'Не удалось проверить логин');
const details = formatSolanaErrorDetails(error);
statusText.textContent = `${base}. Детали: ${details}`;
statusText.className = 'is-unavailable';
return false;
} finally {