Files
khadhroony-bot3/kb-app-demo-desktop/frontend/demo_ws.html
2026-07-26 13:58:14 +02:00

113 lines
7.3 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- file: kb-app-demo-desktop/frontend/demo_ws.html -->
<!-- version: 7 -->
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<link rel="icon" href="imgs/favicon.png">
<link rel="stylesheet" href="sass/main.scss">
<title>Khadhroony Bot3 — WebSocket standard</title>
</head>
<body>
<header class="app-header">
<nav class="navbar navbar-expand-lg h-100 py-0 bg-light text-dark">
<div class="container-fluid px-4 my-0">
<div class="navbar-brand d-flex align-items-center">
<img alt="Logo" src="imgs/logo.png" class="app-logo">
<span class="ps-2 fs-4 fw-bold text-primary font-logo">Bot3 — <span class="badge text-bg-primary">WebSocket standard</span></span>
</div>
</div>
</nav>
</header>
<main class="app-main">
<div class="osb-scrollable pt-1 pb-4" data-simplebar>
<div class="container-fluid px-4 py-4">
<div class="row g-4 justify-content-center">
<div class="col-12">
<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 data-json-viewer="true">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>