From 4bd4df7b096710301bd5be5d8dc9e5746395629042df11dc8b676b0d947aece4 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Wed, 3 Jun 2026 15:21:55 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4=20=D0=B2=20?= =?UTF-8?q?server=20UI=20=D0=B8=20DEVNET=20topup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ..._кнопка_настроить_сервер_и_devnet_topup.md | 20 +++++++++++++++++++ VERSION.properties | 4 ++-- shine-UI/js/pages/entry-settings-view.js | 11 +++++++++- shine-UI/server-ui/create-server-pda.html | 2 ++ .../server-ui/js/create-server-pda-page.js | 9 +++++++++ shine-UI/server-ui/js/server-ui-shared.js | 17 ++++++++++++++++ .../server-ui/js/update-server-pda-page.js | 9 +++++++++ shine-UI/server-ui/update-server-pda.html | 2 ++ 8 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 Dev_Docs/Pending_Features/2026-06-03_1521_кнопка_настроить_сервер_и_devnet_topup.md diff --git a/Dev_Docs/Pending_Features/2026-06-03_1521_кнопка_настроить_сервер_и_devnet_topup.md b/Dev_Docs/Pending_Features/2026-06-03_1521_кнопка_настроить_сервер_и_devnet_topup.md new file mode 100644 index 0000000..b23d816 --- /dev/null +++ b/Dev_Docs/Pending_Features/2026-06-03_1521_кнопка_настроить_сервер_и_devnet_topup.md @@ -0,0 +1,20 @@ +# Кнопка настройки сервера и DEVNET topup + +- краткое описание фичи: + На экране `entry-settings-view` добавлена кнопка `Настроить свой сервер`, открывающая `server-ui.html` в новой вкладке. + На страницах серверного UI добавлена кнопка открытия `devnet-topup-view` в новой вкладке с автоматической передачей `wallet` из device-адреса. + +- что именно проверять: + 1. На странице настроек входа есть кнопка `Настроить свой сервер`. + 2. Кнопка открывает `shine-UI/server-ui.html` в новой вкладке. + 3. На страницах `create-server-pda.html` и `update-server-pda.html` есть кнопка `Открыть пополнение DEVNET`. + 4. Если device public key заполнен, новая вкладка открывает `devnet-topup-view?wallet=...` с правильным адресом. + 5. Если device-адрес не введён, серверный UI показывает понятную ошибку и не открывает пустую ссылку. + +- ожидаемый результат: + 1. Переход в серверный UI с клиентской страницы настроек работает. + 2. Пополнение devnet из серверного UI открывается сразу на нужный адрес. + 3. Основной клиентский UI и серверные страницы не получают JS-ошибок при загрузке. + +- статус: + pending diff --git a/VERSION.properties b/VERSION.properties index e21b073..74bf9e1 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.117 -server.version=1.2.109 +client.version=1.2.118 +server.version=1.2.110 diff --git a/shine-UI/js/pages/entry-settings-view.js b/shine-UI/js/pages/entry-settings-view.js index ec1d2ab..8c59f48 100644 --- a/shine-UI/js/pages/entry-settings-view.js +++ b/shine-UI/js/pages/entry-settings-view.js @@ -129,6 +129,15 @@ export function render({ navigate }) { const actions = document.createElement('div'); actions.className = 'auth-footer-actions'; + const serverUiButton = document.createElement('button'); + serverUiButton.className = 'ghost-btn'; + serverUiButton.type = 'button'; + serverUiButton.textContent = 'Настроить свой сервер'; + serverUiButton.addEventListener('click', () => { + const url = new URL('server-ui.html', window.location.href); + window.open(url.toString(), '_blank', 'noopener'); + }); + const cancelButton = document.createElement('button'); cancelButton.className = 'ghost-btn'; cancelButton.type = 'button'; @@ -144,7 +153,7 @@ export function render({ navigate }) { navigate('start-view'); }); - actions.append(cancelButton, saveButton); + actions.append(serverUiButton, cancelButton, saveButton); const help = document.createElement('button'); help.className = 'help-fab'; diff --git a/shine-UI/server-ui/create-server-pda.html b/shine-UI/server-ui/create-server-pda.html index df42d52..8745eab 100644 --- a/shine-UI/server-ui/create-server-pda.html +++ b/shine-UI/server-ui/create-server-pda.html @@ -28,6 +28,7 @@ .sol-ttl { font-size:12px; font-weight:600; color:#7dcc7d; } .sol-adr { font-family:monospace; font-size:12px; word-break:break-all; margin-top:4px; } .sol-ht { font-size:11px; color:var(--text-muted); margin-top:4px; } + .sol-topup-btn { margin-top:10px; width:100%; } @@ -112,6 +113,7 @@
Положите SOL на этот адрес перед регистрацией:
Это Solana-адрес device-ключа (public key в base58 = Solana-адрес). С него оплачивается создание PDA.
+ diff --git a/shine-UI/server-ui/js/create-server-pda-page.js b/shine-UI/server-ui/js/create-server-pda-page.js index 550c50c..d6d80c5 100644 --- a/shine-UI/server-ui/js/create-server-pda-page.js +++ b/shine-UI/server-ui/js/create-server-pda-page.js @@ -4,6 +4,7 @@ import { buildKeyBundleFromForm, clearGenMessage, clearStatus, + openDevnetTopup, deriveKeyBundleFromPassword, fillKeyFields, parseLoginList, @@ -30,6 +31,14 @@ const fieldMap = { setupPasswordEye($('btnEye'), $('password')); wireDeviceAddressPreview(fieldMap); +$('btnTopupDevnet').addEventListener('click', () => { + try { + openDevnetTopup($('devPub').value); + } catch (error) { + setStatus($('status'), error?.message || String(error), 'error'); + } +}); + $('btnGen').addEventListener('click', async () => { clearGenMessage($('genMsg')); clearStatus($('status')); diff --git a/shine-UI/server-ui/js/server-ui-shared.js b/shine-UI/server-ui/js/server-ui-shared.js index 2ef9ee6..7cb8841 100644 --- a/shine-UI/server-ui/js/server-ui-shared.js +++ b/shine-UI/server-ui/js/server-ui-shared.js @@ -194,3 +194,20 @@ export function wireDeviceAddressPreview(fieldMap) { $(fieldMap.devPub).addEventListener('input', update); update(); } + +export function buildDevnetTopupUrl(walletAddress) { + const cleanWallet = String(walletAddress || '').trim(); + const url = new URL('../devnet-topup-view', window.location.href); + if (cleanWallet) { + url.searchParams.set('wallet', cleanWallet); + } + return url.toString(); +} + +export function openDevnetTopup(walletAddress) { + const cleanWallet = String(walletAddress || '').trim(); + if (!cleanWallet) { + throw new Error('Сначала укажите device-адрес'); + } + window.open(buildDevnetTopupUrl(cleanWallet), '_blank', 'noopener'); +} diff --git a/shine-UI/server-ui/js/update-server-pda-page.js b/shine-UI/server-ui/js/update-server-pda-page.js index bdc406a..41ad284 100644 --- a/shine-UI/server-ui/js/update-server-pda-page.js +++ b/shine-UI/server-ui/js/update-server-pda-page.js @@ -8,6 +8,7 @@ import { fillKeyFields, formatBigInt, formatTimestamp, + openDevnetTopup, parseLoginList, setGenMessage, setStatus, @@ -34,6 +35,14 @@ let currentPda = null; setupPasswordEye($('btnEye'), $('password')); wireDeviceAddressPreview(fieldMap); +$('btnTopupDevnet').addEventListener('click', () => { + try { + openDevnetTopup($('devPub').value); + } catch (error) { + setStatus($('status'), error?.message || String(error), 'error'); + } +}); + $('btnGen').addEventListener('click', async () => { clearGenMessage($('genMsg')); clearStatus($('status')); diff --git a/shine-UI/server-ui/update-server-pda.html b/shine-UI/server-ui/update-server-pda.html index 93080c1..7c9c817 100644 --- a/shine-UI/server-ui/update-server-pda.html +++ b/shine-UI/server-ui/update-server-pda.html @@ -29,6 +29,7 @@ .sol-adr { font-family:monospace; font-size:12px; word-break:break-all; margin-top:4px; } .sol-ht { font-size:11px; color:var(--text-muted); margin-top:4px; } .muted { font-size:12px; color:var(--text-muted); margin-bottom:14px; line-height:1.6; } + .sol-topup-btn { margin-top:10px; width:100%; } @@ -126,6 +127,7 @@
Положите SOL на этот адрес перед обновлением:
Это Solana-адрес (base58) device-ключа. С него оплачивается транзакция.
+