Files
khadhroony-solana-project/crates/ksp-app-solprices-desk/USAGE.md
2026-08-27 19:11:07 +02:00

4.5 KiB

Utilisation de ksp-app-solprices-desk

1. Lancement de développement

Depuis la racine du workspace :

(cd crates/ksp-app-solprices-desk && cargo tauri dev)

Le launcher debug normalise son current working directory vers la racine du workspace avant le bootstrap Config.

Les ports réservés sont :

Vite HTTP : 1434
Vite WS   : 1435

2. Profil de prix

Le composite cfg.composite.ksp-app-solprices-desk utilise public_keyless par défaut.

Profils committed :

public_keyless   providers utilisables sans secret
all_free         modes gratuits avec credentials Config lorsqu'ils sont requis
tests            composition de test

La sélection d'un autre profil appartient aux mécanismes Config ; l'interface ne demande jamais directement une API key et ne choisit pas d'endpoint provider.

3. Vue Prices

La vue Prices présente une row par provider du registry Off-chain.

Les informations principales sont :

  • paire SOL/USD ;
  • sémantique de prix ;
  • mode d'authentification ;
  • availability ;
  • prix exact lorsqu'une observation existe ;
  • timestamp provider lorsqu'il est réellement fourni ;
  • timestamp de réception KSP ;
  • prochaine deadline retry_at lorsqu'elle existe.

Not supplied signifie qu'un provider n'a pas fourni de timestamp exploitable. Cette absence n'est jamais remplacée artificiellement par le timestamp KSP.

4. Refresh individuel

Le bouton Refresh d'une row déclenche uniquement le provider correspondant via MarketPriceService::refresh.

Pendant l'appel, la row passe temporairement à Refreshing. Le Desk ne garde aucun mutex de présentation pendant l'I/O réseau.

Si le service ne produit pas de nouvelle observation, la dernière observation réussie peut rester visible tandis que l'availability/retry est actualisée.

5. Refresh sélectionné

Cocher une ou plusieurs rows puis utiliser :

Refresh selected

La sélection est reconstruite dans l'ordre courant du registry. Les doublons, IDs inconnus, conflits in_flight, batch vide et batch supérieur à 64 IDs sont rejetés côté Rust avant dispatch partiel.

Les contrôles :

Select all providers
Clear selection

ne déclenchent aucun accès réseau par eux-mêmes.

6. Refresh global

Refresh all

appelle la surface générique MarketPriceService::refresh_all et conserve l'ordre déterministe du service.

Les providers disabled, en cooldown ou temporairement indisponibles restent classifiés par Off-chain Transport. Le frontend ne contourne jamais ces règles et n'implémente aucun retry local.

7. Lecture des états

Les états visibles sont provider-neutral, notamment :

Ready
Cooling down
Authentication unavailable
Disabled
Misconfigured
Quota unavailable
Temporarily unavailable
Refreshing

Le résumé en haut de la vue indique les nombres de providers, rows ready, observations disponibles, états nécessitant attention et refresh en cours.

Aucune moyenne ou fusion de prix n'est calculée dans SOL Prices Desk.

8. Diagnostics et sécurité

La vue Diagnostics expose uniquement les informations sûres de composition/runtime.

Le frontend :

  • ne fait aucun fetch/XHR provider ;
  • ne possède aucun endpoint ou header provider ;
  • ne stocke aucun secret dans localStorage/sessionStorage ;
  • n'utilise aucun scheduler ou polling prix ;
  • ne journalise aucun prix ou payload provider brut.

Les actions utilisateur sont instrumentées via le bridge Logging KSP.

9. Runtime packagé

En build release, les documents Config et schemas enregistrés sont embarqués comme resources Tauri. ksp-config-lib prépare ensuite la racine KSP user-writable commune ; les Config utilisateur existantes sont conservées, les schemas sont resynchronisés et .env n'est jamais embarqué.

La version de bundle est dérivée de Cargo. package.json reste un manifeste frontend privé.

10. Validation de publication

Avant le build :

cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.2.12
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-app-solprices-desk
cargo test --workspace
cargo test -p ksp-app-solprices-desk --test market_price_composition_live_smoke -- --ignored --nocapture

Le build production est :

(cd crates/ksp-app-solprices-desk && cargo tauri build)