Files
khadhroony-bot3/ks-config/USAGE.md
2026-08-10 09:28:57 +02:00

4.4 KiB

Utilisation de ks-config

Rôle de la crate

ks-config fournit les types, validations et chargeurs des configurations Khadhroony Solana partagées. Un consommateur peut utiliser les defaults des documents spécialisés ou fournir une composition qui remplace seulement les sélections nécessaires.

ks-config ne connaît pas la liste des futurs workers ou applications.

Charger les defaults partagés

let config = match ks_config::read_default_shared_app_config_with_environment(
    std::path::Path::new("."),
) {
    Ok(value) => value,
    Err(error) => return Err(error),
};

Le chargeur combine les default_profile indépendants de transport, listeners, store, wallet et execution. Il ne suppose pas que ces profils portent tous le même nom.

Charger une composition de binaire

let composed = match ks_config::read_composed_app_config_with_environment(
    std::path::Path::new("config/kb-app-demo-desktop.default.config.json"),
    std::path::Path::new("."),
) {
    Ok(value) => value,
    Err(error) => return Err(error),
};
let config = composed.app_config;

Le chargeur :

  1. charge l'environnement du workspace ;
  2. valide la composition ;
  3. résout les six chemins spécialisés ;
  4. charge et valide transport, listeners, store, wallet et execution ;
  5. vérifie l'existence du profil logging référencé sans créer de dépendance ks-config -> ks-logging ;
  6. applique les overrides ou les default_profile ;
  7. reconstruit le contrat runtime AppConfig/ProfileConfig ;
  8. applique les invariants croisés existants.

Le document logging est ensuite chargé par ks-logging, qui possède son type runtime.

Transport et defaults WebSocket

let transport = match ks_config::read_transport_json_file_with_environment(
    std::path::Path::new("config/transport.config.json"),
    std::path::Path::new("."),
) {
    Ok(value) => value,
    Err(error) => return Err(error),
};
let profile = match ks_config::default_transport_profile(&transport) {
    Ok(value) => value,
    Err(error) => return Err(error),
};

Les endpoints WebSocket source sélectionnent une classe ws_endpoint_defaults; les overrides propres à l'endpoint sont appliqués avant de produire TransportProfileConfig.

Listeners

default_listeners_profile ou listeners_profile sélectionnent un ensemble de subscriptions. resolved_listener_config le convertit vers le contrat runtime transitoire ListenerConfig.

Store

store.config.json possède les paramètres de backend et les profils PostgreSQL/SQLite. Les helpers principaux sont read_store_json_file_with_environment, default_store_profile et store_profile.

Wallet

wallet.config.json porte wallets_directory hors profils. Chaque profil définit un chemin relatif, le cluster, l'alias et la politique temporaire/persistante. resolved_wallet_profile construit le chemin runtime final.

Les autorisations de soumission ne font plus partie du wallet.

Exécution

execution.config.json possède simulation, confirmation, limites et *_send_enabled. Les helpers sont read_execution_json_file_with_environment, default_execution_profile et execution_profile.

Chargement de l'environnement

let report = match ks_config::load_workspace_environment(std::path::Path::new(".")) {
    Ok(value) => value,
    Err(error) => return Err(error),
};

Par défaut, ks-config sélectionne .env; KS_ENV_FILE permet d'en choisir un autre sans écraser les variables déjà présentes dans le processus.

Les valeurs globales peuvent être remplacées, notamment :

KS_LOGS_DIRECTORY
KS_WALLETS_DIRECTORY

Contrat runtime résolu

AppConfig et ProfileConfig restent provisoirement le contrat runtime commun afin de ne pas casser tous les consommateurs pendant les splits successifs. Ils ne correspondent plus à un fichier source app.config.json.

Le schéma de ce contrat est config/schemas/resolved.app.config.schema.json. Les fixtures correspondantes sont sous test-fixtures/config/.

Frontière TypeScript

Les bindings TS-RS générés depuis ks-config ne sont pas importés directement par le frontend desktop actuel. Ils sont donc considérés comme transitoires jusqu'à la prochaine prerelease, qui introduira les DTO publics/diagnostiques et supprimera les exports TypeScript non justifiés des crates généralistes.