v0.1.0-pre.071
This commit is contained in:
20
kb-app-demo-desktop/CHANGELOG.md
Normal file
20
kb-app-demo-desktop/CHANGELOG.md
Normal file
@@ -0,0 +1,20 @@
|
||||
<!-- file: kb-app-demo-desktop/CHANGELOG.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# CHANGELOG — kb-app-demo-desktop
|
||||
|
||||
## 0.1.0-pre.071
|
||||
|
||||
- ajout du contrat documentaire complet de la crate mixte ;
|
||||
- documentation de la bibliothèque, du binaire et de l’interface Tauri ;
|
||||
- ajout d’exemples frontend pour les principales familles de commandes ;
|
||||
- clarification de la persistance de l’état WebSocket hors cycle de vie de la fenêtre ;
|
||||
- inscription des travaux ElGamal et Metaplex restants dans le TODO.
|
||||
|
||||
## 0.1.0-pre.062
|
||||
|
||||
- migration de l’application de démonstration vers `kb-app-demo-desktop` ;
|
||||
- maintien d’un package unique bibliothèque et binaire ;
|
||||
- migration des fenêtres HTTP, WebSocket, SQL, backfill, extraction, replay et exécution ;
|
||||
- raccordement aux crates consolidées bot3 ;
|
||||
- validation connue de 117 tests.
|
||||
51
kb-app-demo-desktop/README.md
Normal file
51
kb-app-demo-desktop/README.md
Normal file
@@ -0,0 +1,51 @@
|
||||
<!-- file: kb-app-demo-desktop/README.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# kb-app-demo-desktop
|
||||
|
||||
`kb-app-demo-desktop` est l’application Tauri de démonstration et de validation opérateur de `khadhroony-bot3`.
|
||||
|
||||
La crate reste volontairement mixte :
|
||||
|
||||
- bibliothèque `kb_app_demo_desktop_lib` ;
|
||||
- binaire `kb-app-demo-desktop`.
|
||||
|
||||
## Responsabilités
|
||||
|
||||
- démarrage Tauri et gestion d’une instance unique ;
|
||||
- chargement de la configuration et du logging ;
|
||||
- fenêtres de diagnostic et démonstration ;
|
||||
- commandes Tauri pour HTTP, WebSocket, SQL, backfill, extraction Core et replay ;
|
||||
- commandes de simulation et exécution Devnet ;
|
||||
- adaptation TS-RS des résultats des crates réutilisables ;
|
||||
- gestion de progression, annulation et état applicatif.
|
||||
|
||||
## Frontière architecturale
|
||||
|
||||
La logique générique reste dans :
|
||||
|
||||
- `kb-pipeline-demo-scenarios` pour les scénarios réutilisables ;
|
||||
- `kb-pipeline` pour l’orchestration ;
|
||||
- `kb-onchain-transport` pour les communications réseau ;
|
||||
- `kb-store` pour PostgreSQL ;
|
||||
- `kb-lib` pour décodage, exécution et matérialisation ;
|
||||
- `kb-wallet` pour les signers locaux.
|
||||
|
||||
Le desktop ne doit pas devenir l’unique endroit où un scénario fonctionnel existe.
|
||||
|
||||
## Validation frontend
|
||||
|
||||
La validation autorisée est :
|
||||
|
||||
```bash
|
||||
cargo tauri dev -c kb-app-demo-desktop/tauri.conf.json
|
||||
```
|
||||
|
||||
Ne pas utiliser `npm --prefix kb-app-demo-desktop run build` comme validation du desktop.
|
||||
|
||||
## Documentation
|
||||
|
||||
- [USAGE.md](USAGE.md)
|
||||
- [TODO.md](TODO.md)
|
||||
- [CHANGELOG.md](CHANGELOG.md)
|
||||
- [Scénarios réutilisables](../kb-pipeline-demo-scenarios/README.md)
|
||||
15
kb-app-demo-desktop/TODO.md
Normal file
15
kb-app-demo-desktop/TODO.md
Normal file
@@ -0,0 +1,15 @@
|
||||
<!-- file: kb-app-demo-desktop/TODO.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# TODO — kb-app-demo-desktop
|
||||
|
||||
- [ ] Registre ElGamal - laisser le panneau non exécutable tant que le déploiement réseau et les preuves requises ne sont pas confirmés.
|
||||
- [ ] Registre ElGamal - raccorder un handler fonctionnel uniquement après validation du scénario réutilisable hors desktop.
|
||||
- [ ] Metaplex Token Metadata - ajouter les panneaux nécessaires aux scénarios complétés de la future `0.4.7`.
|
||||
- [ ] Architecture - continuer à extraire les scénarios réutilisables vers `kb-pipeline-demo-scenarios`.
|
||||
- [ ] Tests - maintenir les adaptateurs Tauri et payloads TS-RS synchronisés avec les APIs réutilisables.
|
||||
- [ ] Tests - compléter les tests des cycles d’ouverture, fermeture et réouverture des fenêtres.
|
||||
- [ ] WebSocket - garantir que la fermeture de `demo_ws` ne ferme pas une session active.
|
||||
- [ ] WebSocket - restaurer l’état courant lors de la réouverture de `demo_ws`.
|
||||
- [ ] Documentation - produire un guide opérateur des fenêtres et effets réseau.
|
||||
- [ ] Sécurité - réévaluer les capabilities Tauri à chaque nouvelle fenêtre ou commande.
|
||||
246
kb-app-demo-desktop/USAGE.md
Normal file
246
kb-app-demo-desktop/USAGE.md
Normal file
@@ -0,0 +1,246 @@
|
||||
<!-- file: kb-app-demo-desktop/USAGE.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Utilisation de kb-app-demo-desktop
|
||||
|
||||
## Objectif
|
||||
|
||||
L’application expose une interface opérateur pour diagnostiquer, simuler et valider les couches de bot3.
|
||||
|
||||
## Lancer le desktop
|
||||
|
||||
Depuis la racine du workspace :
|
||||
|
||||
```bash
|
||||
cargo tauri dev -c kb-app-demo-desktop/tauri.conf.json
|
||||
```
|
||||
|
||||
Le binaire applique un verrou d’instance locale. Une deuxième instance doit échouer proprement.
|
||||
|
||||
## API Rust publique
|
||||
|
||||
La bibliothèque expose uniquement `run()` :
|
||||
|
||||
```rust
|
||||
fn launch_desktop() -> kb_core::Result<()> {
|
||||
return kb_app_demo_desktop_lib::run();
|
||||
}
|
||||
```
|
||||
|
||||
Le binaire `kb-app-demo-desktop` appelle cette fonction et convertit son résultat en `ExitCode`.
|
||||
|
||||
## Fenêtres initiales
|
||||
|
||||
La configuration Tauri crée :
|
||||
|
||||
- `splash` ;
|
||||
- `main`.
|
||||
|
||||
Les autres fenêtres sont ouvertes par les commandes Tauri dédiées :
|
||||
|
||||
- backfill ;
|
||||
- HTTP ;
|
||||
- WebSocket ;
|
||||
- diagnostics SQL ;
|
||||
- candidats replay ;
|
||||
- configuration ;
|
||||
- extraction Core ;
|
||||
- decode replay ;
|
||||
- exécution Solana Core ;
|
||||
- exécution SPL.
|
||||
|
||||
## Interface Tauri publique
|
||||
|
||||
Les commandes Tauri constituent l’interface applicative frontend/backend. Elles ne sont pas des APIs Rust publiques pour les autres crates.
|
||||
|
||||
### Ouvrir une fenêtre
|
||||
|
||||
```typescript
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
|
||||
await invoke("open_demo_http_window");
|
||||
await invoke("open_demo_ws_window");
|
||||
await invoke("open_demo_decode_replay_window");
|
||||
```
|
||||
|
||||
### Charger les options HTTP
|
||||
|
||||
```typescript
|
||||
const options = await invoke("demo_http_options");
|
||||
console.log(options);
|
||||
```
|
||||
|
||||
### Exécuter une requête HTTP de démonstration
|
||||
|
||||
```typescript
|
||||
const result = await invoke(
|
||||
"demo_http_execute_request",
|
||||
{
|
||||
request: {
|
||||
role: "standard",
|
||||
method: "getHealth",
|
||||
paramsJson: "[]"
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
console.log(result);
|
||||
```
|
||||
|
||||
Les champs exacts du payload doivent rester synchronisés avec les types TS-RS générés.
|
||||
|
||||
### Gérer une session WebSocket
|
||||
|
||||
```typescript
|
||||
const status = await invoke("demo_ws_status");
|
||||
console.log(status);
|
||||
|
||||
await invoke("demo_ws_connect", {
|
||||
request: {
|
||||
role: "standard",
|
||||
method: "logsSubscribe",
|
||||
paramsJson: "[]"
|
||||
}
|
||||
});
|
||||
|
||||
await invoke("demo_ws_unsubscribe");
|
||||
await invoke("demo_ws_disconnect");
|
||||
```
|
||||
|
||||
La fermeture de la fenêtre ne doit pas être assimilée à une demande de déconnexion.
|
||||
|
||||
### Lancer un backfill
|
||||
|
||||
```typescript
|
||||
const options = await invoke("demo_backfill_options");
|
||||
console.log(options);
|
||||
|
||||
const summary = await invoke(
|
||||
"demo_backfill_execute",
|
||||
{
|
||||
request: {
|
||||
profileName: "devnet",
|
||||
address: "11111111111111111111111111111111",
|
||||
limit: 100
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
console.log(summary);
|
||||
```
|
||||
|
||||
### Extraction Core
|
||||
|
||||
```typescript
|
||||
const options = await invoke(
|
||||
"demo_core_extraction_options"
|
||||
);
|
||||
|
||||
const summary = await invoke(
|
||||
"demo_core_extraction_execute",
|
||||
{
|
||||
request: {
|
||||
profileName: "devnet",
|
||||
limit: 1000
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
console.log(options, summary);
|
||||
```
|
||||
|
||||
Une campagne longue peut être annulée avec `demo_core_extraction_cancel`.
|
||||
|
||||
### Decode replay
|
||||
|
||||
```typescript
|
||||
const options = await invoke(
|
||||
"demo_decode_replay_options"
|
||||
);
|
||||
|
||||
const summary = await invoke(
|
||||
"demo_decode_replay_execute",
|
||||
{
|
||||
request: {
|
||||
profileName: "devnet",
|
||||
limit: 1000,
|
||||
materialize: true
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
console.log(options, summary);
|
||||
```
|
||||
|
||||
Les diagnostics et annotations sont accessibles par des commandes séparées.
|
||||
|
||||
### Scénarios Devnet
|
||||
|
||||
Les commandes couvrent notamment :
|
||||
|
||||
- `demo_execution_solana_core_execute` ;
|
||||
- `demo_execution_spl_memo_execute` ;
|
||||
- `demo_execution_spl_token_execute` ;
|
||||
- `demo_execution_spl_ata_execute` ;
|
||||
- `demo_execution_spl_token_2022_execute`.
|
||||
|
||||
```typescript
|
||||
const scenarios = await invoke(
|
||||
"demo_execution_spl_validation_scenarios"
|
||||
);
|
||||
|
||||
console.log(scenarios);
|
||||
```
|
||||
|
||||
La simulation et l’envoi doivent rester explicitement distingués dans les requêtes.
|
||||
|
||||
### Diagnostics PostgreSQL
|
||||
|
||||
```typescript
|
||||
const diagnostics = await invoke(
|
||||
"load_demo_sql_diag"
|
||||
);
|
||||
const rawTables = await invoke(
|
||||
"load_demo_sql_pg_raw"
|
||||
);
|
||||
const coreTables = await invoke(
|
||||
"load_demo_sql_pg_core"
|
||||
);
|
||||
|
||||
console.log(diagnostics, rawTables, coreTables);
|
||||
```
|
||||
|
||||
## Capabilities Tauri
|
||||
|
||||
Les fenêtres autorisées sont listées dans `capabilities/default.json`. La capability active doit inclure au minimum les permissions Tauri Core et tracing nécessaires aux fenêtres déclarées.
|
||||
|
||||
Toute nouvelle fenêtre ou commande sensible doit être auditée avant ajout de permissions.
|
||||
|
||||
## Erreurs et invariants
|
||||
|
||||
- une simulation ne doit jamais envoyer une transaction ;
|
||||
- une soumission nécessite une confirmation opérateur explicite ;
|
||||
- les secrets de wallet ne doivent jamais être sérialisés vers le frontend ;
|
||||
- les résultats frontend doivent refléter les validations réellement exécutées ;
|
||||
- l’état WebSocket appartient à l’application, pas à la durée de vie de la fenêtre ;
|
||||
- les commandes Tauri adaptent les APIs réutilisables sans dupliquer leur logique.
|
||||
|
||||
## Tests de référence
|
||||
|
||||
- tests des options et payloads HTTP ;
|
||||
- tests de cycle de vie WebSocket ;
|
||||
- tests de sélection de profil Devnet ;
|
||||
- tests de System Transfer et Memo ;
|
||||
- tests ATA, SPL Token et Token-2022 ;
|
||||
- tests de backfill, extraction Core et decode replay ;
|
||||
- tests de diagnostics SQL et exports CSV ;
|
||||
- tests de journalisation frontend ;
|
||||
- test du verrou d’état applicatif et de la séquence splash.
|
||||
|
||||
La base validée de `pre.062` contient 117 tests pour cette crate.
|
||||
|
||||
## Limites durables
|
||||
|
||||
- le desktop est une application de démonstration et validation, pas le worker de production ;
|
||||
- les payloads Tauri sont une API applicative spécifique au frontend ;
|
||||
- l’application nécessite un environnement graphique pour sa validation complète.
|
||||
Reference in New Issue
Block a user