114 lines
7.2 KiB
HTML
114 lines
7.2 KiB
HTML
<!-- file: kb-app-demo-desktop/frontend/demo_ws.html -->
|
||
<!-- version: 6 -->
|
||
<!DOCTYPE html>
|
||
<html lang="fr">
|
||
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>Khadhroony Bot3 - 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">
|
||
<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">WebSocket standard</span>
|
||
</div>
|
||
</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 l’endpoint reste identique ; la déconnexion est explicite ou réalisée à la fermeture globale de l’application.</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">© 2026 SASEDEV</div>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
<script type="module" src="ts/demo_ws.ts" defer></script>
|
||
</body>
|
||
|
||
</html>
|