Промежуточная версия

в которой надо дорабоать

1. Исправить ошибки и сделать что бы работала вторая слева вкладка. ТОесть АПИ для сервера я сделал (пока они возвращают весь список сообщений целиком - всем большим списком сообщений в канал - для мвп это устраивает,и по этому только три АПИ функции добавилось)

  Там какието ошибки на клиенте ( я только сгенерил код - но гдето вылетает) по UI можешь исправлять переделывать - моешь оставить калечное как есть - мне пока не важно. Важно увидить что каналы и сообщения и публичная переписка в каналах блокчейна работает

2. потестировать и сделать корректное завершение сессии (там есть глюки при завершении сесии)
This commit is contained in:
AidarKC 2026-04-03 11:45:42 +03:00
parent c25393e3b6
commit cf5460c5c7
36 changed files with 106 additions and 106 deletions

View File

@ -4,9 +4,9 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<title>Shine UI Demo</title> <title>Shine UI Demo</title>
<link rel="stylesheet" href="./styles/main.css?v=20260330210201" /> <link rel="stylesheet" href="./styles/main.css?v=20260403081123" />
<link rel="stylesheet" href="./styles/layout.css?v=20260330210201" /> <link rel="stylesheet" href="./styles/layout.css?v=20260403081123" />
<link rel="stylesheet" href="./styles/components.css?v=20260330210201" /> <link rel="stylesheet" href="./styles/components.css?v=20260403081123" />
</head> </head>
<body> <body>
<div class="app-shell"> <div class="app-shell">
@ -15,6 +15,6 @@
<div id="toolbar-slot" class="toolbar-slot"></div> <div id="toolbar-slot" class="toolbar-slot"></div>
</div> </div>
<div id="modal-root"></div> <div id="modal-root"></div>
<script type="module" src="./js/app.js?v=20260330210201"></script> <script type="module" src="./js/app.js?v=20260403081123"></script>
</body> </body>
</html> </html>

View File

@ -1,7 +1,7 @@
import { navigate, getRoute, PRE_AUTH_PAGES } from './router.js?v=20260330210201'; import { navigate, getRoute, PRE_AUTH_PAGES } from './router.js?v=20260403081123';
import { renderToolbar } from './components/toolbar.js?v=20260330210201'; import { renderToolbar } from './components/toolbar.js?v=20260403081123';
import { renderPageLabel } from './components/page-label.js?v=20260330210201'; import { renderPageLabel } from './components/page-label.js?v=20260403081123';
import { captureClientError, setClientErrorTransport } from './services/client-error-reporter.js?v=20260331000100'; import { captureClientError, setClientErrorTransport } from './services/client-error-reporter.js?v=20260403081123';
import { import {
authService, authService,
authorizeSession, authorizeSession,
@ -11,38 +11,38 @@ import {
state, state,
terminateCurrentSession, terminateCurrentSession,
togglePageLabel, togglePageLabel,
} from './state.js?v=20260330210201'; } from './state.js?v=20260403081123';
import * as startView from './pages/start-view.js?v=20260330210201'; import * as startView from './pages/start-view.js?v=20260403081123';
import * as entrySettingsView from './pages/entry-settings-view.js?v=20260330210201'; import * as entrySettingsView from './pages/entry-settings-view.js?v=20260403081123';
import * as registerView from './pages/register-view.js?v=20260330210201'; import * as registerView from './pages/register-view.js?v=20260403081123';
import * as registrationPaymentView from './pages/registration-payment-view.js?v=20260330210201'; import * as registrationPaymentView from './pages/registration-payment-view.js?v=20260403081123';
import * as registrationKeysView from './pages/registration-keys-view.js?v=20260330210201'; import * as registrationKeysView from './pages/registration-keys-view.js?v=20260403081123';
import * as topupView from './pages/topup-view.js?v=20260330210201'; import * as topupView from './pages/topup-view.js?v=20260403081123';
import * as loginView from './pages/login-view.js?v=20260330210201'; import * as loginView from './pages/login-view.js?v=20260403081123';
import * as loginCameraView from './pages/login-camera-view.js?v=20260330210201'; import * as loginCameraView from './pages/login-camera-view.js?v=20260403081123';
import * as loginPasswordView from './pages/login-password-view.js?v=20260330210201'; import * as loginPasswordView from './pages/login-password-view.js?v=20260403081123';
import * as keyStorageView from './pages/key-storage-view.js?v=20260330210201'; import * as keyStorageView from './pages/key-storage-view.js?v=20260403081123';
import * as profileView from './pages/profile-view.js?v=20260330210201'; import * as profileView from './pages/profile-view.js?v=20260403081123';
import * as walletView from './pages/wallet-view.js?v=20260330210201'; import * as walletView from './pages/wallet-view.js?v=20260403081123';
import * as settingsView from './pages/settings-view.js?v=20260330210201'; import * as settingsView from './pages/settings-view.js?v=20260403081123';
import * as serverSettingsView from './pages/server-settings-view.js?v=20260330210201'; import * as serverSettingsView from './pages/server-settings-view.js?v=20260403081123';
import * as deviceView from './pages/device-view.js?v=20260330210201'; import * as deviceView from './pages/device-view.js?v=20260403081123';
import * as connectDeviceView from './pages/connect-device-view.js?v=20260330210201'; import * as connectDeviceView from './pages/connect-device-view.js?v=20260403081123';
import * as deviceQrView from './pages/device-qr-view.js?v=20260330210201'; import * as deviceQrView from './pages/device-qr-view.js?v=20260403081123';
import * as deviceCameraView from './pages/device-camera-view.js?v=20260330210201'; import * as deviceCameraView from './pages/device-camera-view.js?v=20260403081123';
import * as showKeysView from './pages/show-keys-view.js?v=20260330210201'; import * as showKeysView from './pages/show-keys-view.js?v=20260403081123';
import * as deviceSessionView from './pages/device-session-view.js?v=20260330210201'; import * as deviceSessionView from './pages/device-session-view.js?v=20260403081123';
import * as languageView from './pages/language-view.js?v=20260330210201'; import * as languageView from './pages/language-view.js?v=20260403081123';
import * as messagesList from './pages/messages-list.js?v=20260330210201'; import * as messagesList from './pages/messages-list.js?v=20260403081123';
import * as contactSearchView from './pages/contact-search-view.js?v=20260330210201'; import * as contactSearchView from './pages/contact-search-view.js?v=20260403081123';
import * as chatView from './pages/chat-view.js?v=20260330210201'; import * as chatView from './pages/chat-view.js?v=20260403081123';
import * as channelsList from './pages/channels-list.js?v=20260330210201'; import * as channelsList from './pages/channels-list.js?v=20260403081123';
import * as channelView from './pages/channel-view.js?v=20260330210201'; import * as channelView from './pages/channel-view.js?v=20260403081123';
import * as addChannelView from './pages/add-channel-view.js?v=20260330210201'; import * as addChannelView from './pages/add-channel-view.js?v=20260403081123';
import * as networkView from './pages/network-view.js?v=20260330210201'; import * as networkView from './pages/network-view.js?v=20260403081123';
import * as notificationsView from './pages/notifications-view.js?v=20260330210201'; import * as notificationsView from './pages/notifications-view.js?v=20260403081123';
const routes = { const routes = {
'start-view': startView, 'start-view': startView,

View File

@ -1,4 +1,4 @@
import { resolveToolbarActive } from '../router.js?v=20260330210201'; import { resolveToolbarActive } from '../router.js?v=20260403081123';
const ITEMS = [ const ITEMS = [
{ pageId: 'messages-list', label: 'Личные сообщения', icon: '💬' }, { pageId: 'messages-list', label: 'Личные сообщения', icon: '💬' },

View File

@ -1,4 +1,4 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
export const pageMeta = { id: 'add-channel-view', title: 'Добавить канал' }; export const pageMeta = { id: 'add-channel-view', title: 'Добавить канал' };

View File

@ -1,6 +1,6 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { channelPosts, channels } from '../mock-data.js?v=20260330210201'; import { channelPosts, channels } from '../mock-data.js?v=20260403081123';
import { addLocalChannelPost, authService, getLocalChannelPosts, state } from '../state.js?v=20260330210201'; import { addLocalChannelPost, authService, getLocalChannelPosts, state } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'channel-view', title: 'Канал' }; export const pageMeta = { id: 'channel-view', title: 'Канал' };

View File

@ -1,6 +1,6 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { channels as mockChannels } from '../mock-data.js?v=20260330210201'; import { channels as mockChannels } from '../mock-data.js?v=20260403081123';
import { authService, setChannelsFeed, state } from '../state.js?v=20260330210201'; import { authService, setChannelsFeed, state } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'channels-list', title: 'Каналы' }; export const pageMeta = { id: 'channels-list', title: 'Каналы' };

View File

@ -1,6 +1,6 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { directMessages } from '../mock-data.js?v=20260330210201'; import { directMessages } from '../mock-data.js?v=20260403081123';
import { addChatMessage, getChatMessages } from '../state.js?v=20260330210201'; import { addChatMessage, getChatMessages } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'chat-view', title: 'Чат' }; export const pageMeta = { id: 'chat-view', title: 'Чат' };

View File

@ -1,5 +1,5 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { state } from '../state.js?v=20260330210201'; import { state } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'connect-device-view', title: 'Подключить устройство' }; export const pageMeta = { id: 'connect-device-view', title: 'Подключить устройство' };

View File

@ -1,6 +1,6 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { contactDirectory, directMessages } from '../mock-data.js?v=20260330210201'; import { contactDirectory, directMessages } from '../mock-data.js?v=20260403081123';
import { ensureChat } from '../state.js?v=20260330210201'; import { ensureChat } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'contact-search-view', title: 'Поиск контактов' }; export const pageMeta = { id: 'contact-search-view', title: 'Поиск контактов' };

View File

@ -1,4 +1,4 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
export const pageMeta = { id: 'device-camera-view', title: 'Подключить через камеру' }; export const pageMeta = { id: 'device-camera-view', title: 'Подключить через камеру' };

View File

@ -1,6 +1,6 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { profile } from '../mock-data.js?v=20260330210201'; import { profile } from '../mock-data.js?v=20260403081123';
import { state } from '../state.js?v=20260330210201'; import { state } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'device-qr-view', title: 'Показать QR-код' }; export const pageMeta = { id: 'device-qr-view', title: 'Показать QR-код' };

View File

@ -1,4 +1,4 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { import {
authService, authService,
isSessionInvalidError, isSessionInvalidError,
@ -6,7 +6,7 @@ import {
setAuthError, setAuthError,
state, state,
terminateCurrentSession, terminateCurrentSession,
} from '../state.js?v=20260330210201'; } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'device-session-view', title: 'Сеанс устройства' }; export const pageMeta = { id: 'device-session-view', title: 'Сеанс устройства' };

View File

@ -1,4 +1,4 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { import {
authService, authService,
isSessionInvalidError, isSessionInvalidError,
@ -7,7 +7,7 @@ import {
setAuthInfo, setAuthInfo,
state, state,
terminateCurrentSession, terminateCurrentSession,
} from '../state.js?v=20260330210201'; } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'device-view', title: 'Устройства' }; export const pageMeta = { id: 'device-view', title: 'Устройства' };

View File

@ -1,5 +1,5 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { checkServerAvailability, saveEntrySettings, state } from '../state.js?v=20260330210201'; import { checkServerAvailability, saveEntrySettings, state } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'entry-settings-view', title: 'Настройки входа', showAppChrome: false }; export const pageMeta = { id: 'entry-settings-view', title: 'Настройки входа', showAppChrome: false };

View File

@ -1,5 +1,5 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { authorizeSession, state } from '../state.js?v=20260330210201'; import { authorizeSession, state } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'key-storage-view', title: 'Какие ключи сохранить', showAppChrome: false }; export const pageMeta = { id: 'key-storage-view', title: 'Какие ключи сохранить', showAppChrome: false };

View File

@ -1,5 +1,5 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { state } from '../state.js?v=20260330210201'; import { state } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'language-view', title: 'Язык' }; export const pageMeta = { id: 'language-view', title: 'Язык' };

View File

@ -1,4 +1,4 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
export const pageMeta = { id: 'login-camera-view', title: 'Войти по камере', showAppChrome: false }; export const pageMeta = { id: 'login-camera-view', title: 'Войти по камере', showAppChrome: false };

View File

@ -1,11 +1,11 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { import {
authService, authService,
clearAuthMessages, clearAuthMessages,
setAuthBusy, setAuthBusy,
setAuthError, setAuthError,
state, state,
} from '../state.js?v=20260330210201'; } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'login-password-view', title: 'Войти по логину', showAppChrome: false }; export const pageMeta = { id: 'login-password-view', title: 'Войти по логину', showAppChrome: false };

View File

@ -1,4 +1,4 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
export const pageMeta = { id: 'login-view', title: 'Войти', showAppChrome: false }; export const pageMeta = { id: 'login-view', title: 'Войти', showAppChrome: false };

View File

@ -1,5 +1,5 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { directMessages } from '../mock-data.js?v=20260330210201'; import { directMessages } from '../mock-data.js?v=20260403081123';
export const pageMeta = { id: 'messages-list', title: 'Личные сообщения' }; export const pageMeta = { id: 'messages-list', title: 'Личные сообщения' };

View File

@ -1,5 +1,5 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { networkGraph } from '../mock-data.js?v=20260330210201'; import { networkGraph } from '../mock-data.js?v=20260403081123';
export const pageMeta = { id: 'network-view', title: 'Связи' }; export const pageMeta = { id: 'network-view', title: 'Связи' };

View File

@ -1,6 +1,6 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { notifications } from '../mock-data.js?v=20260330210201'; import { notifications } from '../mock-data.js?v=20260403081123';
import { state } from '../state.js?v=20260330210201'; import { state } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'notifications-view', title: 'Уведомления' }; export const pageMeta = { id: 'notifications-view', title: 'Уведомления' };

View File

@ -1,5 +1,5 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { profile } from '../mock-data.js?v=20260330210201'; import { profile } from '../mock-data.js?v=20260403081123';
export const pageMeta = { id: 'profile-view', title: 'Профиль' }; export const pageMeta = { id: 'profile-view', title: 'Профиль' };

View File

@ -1,5 +1,5 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { authService, clearAuthMessages, state } from '../state.js?v=20260330210201'; import { authService, clearAuthMessages, state } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'register-view', title: 'Зарегистрироваться', showAppChrome: false }; export const pageMeta = { id: 'register-view', title: 'Зарегистрироваться', showAppChrome: false };

View File

@ -1,4 +1,4 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { import {
authService, authService,
authorizeSession, authorizeSession,
@ -6,7 +6,7 @@ import {
setAuthError, setAuthError,
setAuthInfo, setAuthInfo,
state, state,
} from '../state.js?v=20260330210201'; } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'registration-keys-view', title: 'Сохранение ключей', showAppChrome: false }; export const pageMeta = { id: 'registration-keys-view', title: 'Сохранение ключей', showAppChrome: false };

View File

@ -1,11 +1,11 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { import {
authService, authService,
refreshRegistrationBalance, refreshRegistrationBalance,
setAuthError, setAuthError,
setAuthInfo, setAuthInfo,
state, state,
} from '../state.js?v=20260330210201'; } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'registration-payment-view', title: 'Оплата регистрации', showAppChrome: false }; export const pageMeta = { id: 'registration-payment-view', title: 'Оплата регистрации', showAppChrome: false };

View File

@ -1,5 +1,5 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { checkServerAvailability, saveEntrySettings, state } from '../state.js?v=20260330210201'; import { checkServerAvailability, saveEntrySettings, state } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'server-settings-view', title: 'Настройки серверов' }; export const pageMeta = { id: 'server-settings-view', title: 'Настройки серверов' };

View File

@ -1,4 +1,4 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
export const pageMeta = { id: 'settings-view', title: 'Настройки' }; export const pageMeta = { id: 'settings-view', title: 'Настройки' };

View File

@ -1,6 +1,6 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { state } from '../state.js?v=20260330210201'; import { state } from '../state.js?v=20260403081123';
import { loadEncryptedUserSecrets } from '../services/key-vault.js?v=20260330210201'; import { loadEncryptedUserSecrets } from '../services/key-vault.js?v=20260403081123';
export const pageMeta = { id: 'show-keys-view', title: 'Показать ключи' }; export const pageMeta = { id: 'show-keys-view', title: 'Показать ключи' };

View File

@ -1,4 +1,4 @@
import { clearStartHint, state } from '../state.js?v=20260330210201'; import { clearStartHint, state } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'start-view', title: 'Старт', showAppChrome: false }; export const pageMeta = { id: 'start-view', title: 'Старт', showAppChrome: false };

View File

@ -1,5 +1,5 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { state } from '../state.js?v=20260330210201'; import { state } from '../state.js?v=20260403081123';
export const pageMeta = { id: 'topup-view', title: 'Пополнение счета', showAppChrome: false }; export const pageMeta = { id: 'topup-view', title: 'Пополнение счета', showAppChrome: false };

View File

@ -1,5 +1,5 @@
import { renderHeader } from '../components/header.js?v=20260330210201'; import { renderHeader } from '../components/header.js?v=20260403081123';
import { wallet } from '../mock-data.js?v=20260330210201'; import { wallet } from '../mock-data.js?v=20260403081123';
export const pageMeta = { id: 'wallet-view', title: 'Кошелёк' }; export const pageMeta = { id: 'wallet-view', title: 'Кошелёк' };

View File

@ -1,4 +1,4 @@
import { WsJsonClient } from './ws-client.js?v=20260330210201'; import { WsJsonClient } from './ws-client.js?v=20260403081123';
import { import {
deriveEd25519FromPassword, deriveEd25519FromPassword,
exportEd25519PublicKeyB64, exportEd25519PublicKeyB64,
@ -7,8 +7,8 @@ import {
importPkcs8Ed25519, importPkcs8Ed25519,
randomBase64, randomBase64,
signBase64, signBase64,
} from './crypto-utils.js?v=20260330210201'; } from './crypto-utils.js?v=20260403081123';
import { loadSessionMaterial, saveEncryptedUserSecrets, saveSessionMaterial } from './key-vault.js?v=20260330210201'; import { loadSessionMaterial, saveEncryptedUserSecrets, saveSessionMaterial } from './key-vault.js?v=20260403081123';
const BCH_SUFFIX = '001'; const BCH_SUFFIX = '001';

View File

@ -1,7 +1,7 @@
import { import {
decryptJsonWithStoragePwd, decryptJsonWithStoragePwd,
encryptJsonWithStoragePwd, encryptJsonWithStoragePwd,
} from './crypto-utils.js?v=20260330210201'; } from './crypto-utils.js?v=20260403081123';
const DB_NAME = 'shine-ui-auth'; const DB_NAME = 'shine-ui-auth';
const DB_VERSION = 1; const DB_VERSION = 1;

View File

@ -1,4 +1,4 @@
import { captureClientError } from './client-error-reporter.js?v=20260331000100'; import { captureClientError } from './client-error-reporter.js?v=20260403081123';
const DEFAULT_TIMEOUT_MS = 12000; const DEFAULT_TIMEOUT_MS = 12000;

View File

@ -1,6 +1,6 @@
import { chatMessages, wallet } from './mock-data.js?v=20260330210201'; import { chatMessages, wallet } from './mock-data.js?v=20260403081123';
import { AuthService } from './services/auth-service.js?v=20260330210201'; import { AuthService } from './services/auth-service.js?v=20260403081123';
import { clearClientAuthData } from './services/key-vault.js?v=20260330210201'; import { clearClientAuthData } from './services/key-vault.js?v=20260403081123';
const clone = (value) => JSON.parse(JSON.stringify(value)); const clone = (value) => JSON.parse(JSON.stringify(value));
const SESSION_STORAGE_KEY = 'shine-ui-current-session-v1'; const SESSION_STORAGE_KEY = 'shine-ui-current-session-v1';