This commit is contained in:
2026-07-23 16:37:12 +02:00
parent 99c345f2f2
commit 0da75c1311
2159 changed files with 230833 additions and 0 deletions

View File

@@ -0,0 +1,113 @@
<!-- file: kb_app_demo/frontend/demo_ws.html -->
<!-- version: 5 -->
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Khadhroony Bot2 - WebSocket standard</title>
<link rel="stylesheet" href="sass/main.scss" />
</head>
<body class="bg-body-tertiary">
<header class="app-header">
<nav class="navbar navbar-expand-lg h-100 py-0 bg-light text-dark">
<div class="container my-0">
<a class="navbar-brand d-flex align-items-center" href="#">
<img alt="Logo" src="imgs/logo.png" class="app-logo" />
<span class="ps-2 fs-4 fw-bold text-primary font-logo">WebSocket standard</span>
</a>
</div>
</nav>
</header>
<main class="app-main">
<div class="osb-scrollable pt-1 pb-4" data-simplebar>
<div class="container py-4">
<div class="row g-4">
<div class="col-12 col-xl-5">
<div class="card shadow-sm border-0">
<div class="card-body">
<h1 class="h4 card-title">Souscription WebSocket Solana standard</h1>
<p class="text-body-secondary">Cette démo garde une connexion WebSocket ouverte dans AppState. Le bouton Souscrire réutilise la même connexion tant que lendpoint reste identique ; la déconnexion est explicite ou réalisée à la fermeture globale de lapplication.</p>
<p class="small text-warning mb-3">Les notifications très fréquentes sont limitées côté Rust puis bornées côté interface pour éviter de bloquer la WebView.</p>
<div class="mb-3">
<label class="form-label" for="wsRoleSelect">Rôle</label>
<select id="wsRoleSelect" class="form-select"></select>
</div>
<div class="mb-3">
<label class="form-label" for="wsMethodSelect">Méthode</label>
<select id="wsMethodSelect" class="form-select"></select>
</div>
<div class="mb-3">
<label class="form-label" for="wsTargetInput">Target</label>
<input id="wsTargetInput" class="form-control" placeholder="Pubkey, program id ou signature" />
</div>
<div class="mb-3">
<label class="form-label" for="wsFilterInput">Filter JSON</label>
<textarea id="wsFilterInput" class="form-control font-monospace" rows="4" placeholder='{"mentions":["..."]}'></textarea>
</div>
<div class="mb-3">
<label class="form-label" for="wsConfigInput">Config JSON</label>
<textarea id="wsConfigInput" class="form-control font-monospace" rows="4" placeholder='{"commitment":"confirmed"}'></textarea>
</div>
<div class="mb-3">
<label class="form-label" for="wsSubscriptionSelect">Subscriptions actives</label>
<select id="wsSubscriptionSelect" class="form-select"></select>
</div>
<div class="d-flex flex-wrap gap-2">
<button id="connectWsButton" class="btn btn-primary">Souscrire</button>
<button id="unsubscribeWsButton" class="btn btn-outline-warning">Unsubscribe sélectionnée</button>
<button id="disconnectWsButton" class="btn btn-outline-danger">Déconnecter socket</button>
<button id="refreshWsPoolButton" class="btn btn-outline-secondary">Rafraîchir endpoints</button>
</div>
</div>
</div>
</div>
<div class="col-12 col-xl-7">
<div class="card shadow-sm border-0 mb-4">
<div class="card-body">
<div class="d-flex justify-content-between align-items-center mb-2">
<h2 class="h5 card-title mb-0">Statut</h2>
<span id="wsStatusBadge" class="badge text-bg-secondary">Déconnecté</span>
</div>
<textarea id="wsStatusOutput" class="form-control font-monospace" rows="6" readonly>Déconnecté.</textarea>
</div>
</div>
<div class="card shadow-sm border-0 mb-4">
<div class="card-body">
<div class="d-flex justify-content-between align-items-center mb-2">
<h2 class="h5 card-title mb-0">Endpoints WebSocket</h2>
<button id="copyWsPoolButton" class="btn btn-sm btn-outline-secondary">Copier</button>
</div>
<textarea id="wsPoolOutput" class="form-control font-monospace" rows="8" readonly>Chargement...</textarea>
</div>
</div>
<div class="card shadow-sm border-0">
<div class="card-body">
<div class="d-flex justify-content-between align-items-center mb-2">
<h2 class="h5 card-title mb-0">Messages</h2>
<button id="copyWsResultButton" class="btn btn-sm btn-outline-secondary">Copier</button>
</div>
<textarea id="wsResultOutput" class="form-control font-monospace" rows="16" readonly>Aucune connexion active.</textarea>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
<footer class="app-footer bg-dark text-light">
<div class="container h-100 d-flex align-items-center">
<div class="row flex-grow-1 align-items-center">
<div class="col-12 text-center text-small my-1 my-md-0">&copy; 2026 SASEDEV</div>
</div>
</div>
</footer>
<script type="module" src="ts/demo_ws.ts" defer></script>
</body>
</html>