v0.5.2-pre.006-fix-010
This commit is contained in:
@@ -1,8 +1,23 @@
|
||||
<!-- file: ks-config/CHANGELOG.md -->
|
||||
<!-- version: 21 -->
|
||||
<!-- version: 24 -->
|
||||
|
||||
# CHANGELOG — ks-config
|
||||
|
||||
## `0.5.2-pre.006-delta-fix-007`
|
||||
|
||||
- corrige le test de séparation des répertoires wallet afin qu’il résolve d’abord `${KS_WALLETS_DIRECTORY:-wallets}` comme le chemin de chargement runtime ;
|
||||
- rend le test indépendant d’un éventuel override `KS_WALLETS_DIRECTORY` en vérifiant la relation `temporary_wallet_dir = wallet_dir/temporary/local_devnet` plutôt qu’une racine littérale.
|
||||
|
||||
## `0.5.2-pre.006-delta-fix-006`
|
||||
|
||||
- réinclut dans le delta `config/wallet.config.json` et `config/exemples/example.wallet.config.json`, omis par erreur dans `fix-005`, afin que leurs sous-répertoires temporaires `temporary/...` correspondent au contrat runtime résolu ;
|
||||
- précise dans le schéma wallet que `wallets_directory` est la racine persistante `.kswallet` et que `profile.directory` désigne les wallets/fixtures temporaires du profil.
|
||||
|
||||
## `0.5.2-pre.006-delta-fix-005`
|
||||
|
||||
- sépare le store natif persistant `wallet_dir` de `temporary_wallet_dir` : les `.kswallet` utilisent désormais directement la racine `wallets_directory`, tandis que les wallets et keypairs de fixtures restent sous le sous-répertoire temporaire du profil ;
|
||||
- propage les deux chemins dans le contrat runtime résolu et son schéma sans déplacer automatiquement les fichiers existants.
|
||||
|
||||
## `0.5.2-pre.006`
|
||||
|
||||
- ajoute `wallet_alias` aux profils du document wallet comme sélection optionnelle/nullable d'un wallet natif persistant, sans password ni matériau secret dans `ks-config` ;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: ks-config/USAGE.md -->
|
||||
<!-- version: 11 -->
|
||||
<!-- version: 12 -->
|
||||
|
||||
# Utilisation de ks-config
|
||||
|
||||
@@ -92,9 +92,9 @@ Les endpoints WebSocket source sélectionnent une classe `ws_endpoint_defaults`;
|
||||
|
||||
## 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.
|
||||
`wallet.config.json` porte `wallets_directory` hors profils. Cette valeur résout directement `wallet.wallet_dir`, racine commune des `.kswallet` persistants. Chaque profil conserve `directory` uniquement pour ses wallets/keypairs temporaires ; `resolved_wallet_profile` le résout séparément dans `wallet.temporary_wallet_dir` (par défaut `wallets/temporary/<profil>`).
|
||||
|
||||
Les autorisations de soumission ne font plus partie du wallet.
|
||||
Un changement de profil ne déplace donc pas les `.kswallet` persistants. Les fixtures temporaires restent isolées par profil et les autorisations de soumission ne font plus partie du wallet.
|
||||
|
||||
## Exécution
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: ks-config/src/settings.rs
|
||||
// version: 24
|
||||
// version: 25
|
||||
|
||||
//! Resolved runtime configuration models retained during the `0.5.1` source-document split.
|
||||
|
||||
@@ -222,8 +222,10 @@ pub struct AccountListenerConfig {
|
||||
/// Wallet configuration.
|
||||
#[derive(Clone, serde::Deserialize, Eq, PartialEq)]
|
||||
pub struct WalletConfig {
|
||||
/// Wallet directory path.
|
||||
/// Persistent native wallet directory path.
|
||||
pub wallet_dir: std::string::String,
|
||||
/// Profile-specific temporary wallet and fixture directory path.
|
||||
pub temporary_wallet_dir: std::string::String,
|
||||
/// Selected cluster name.
|
||||
pub cluster: std::string::String,
|
||||
/// Optional persistent native wallet alias selected by this profile.
|
||||
@@ -734,6 +736,10 @@ pub(crate) fn validate_wallet(config: &WalletConfig) -> ks_core::Result<()> {
|
||||
std::result::Result::Ok(()) => (),
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
}
|
||||
match require_non_empty(&config.temporary_wallet_dir, "wallet.temporary_wallet_dir") {
|
||||
std::result::Result::Ok(()) => (),
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
}
|
||||
match require_non_empty(&config.cluster, "wallet.cluster") {
|
||||
std::result::Result::Ok(()) => (),
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: ks-config/src/wallet.rs
|
||||
// version: 4
|
||||
// version: 6
|
||||
|
||||
//! Independent wallet configuration document loading and validation.
|
||||
|
||||
@@ -21,7 +21,7 @@ pub struct WalletConfigDocument {
|
||||
pub struct WalletProfileConfig {
|
||||
/// Profile code.
|
||||
pub name: std::string::String,
|
||||
/// Wallet subdirectory or absolute directory.
|
||||
/// Temporary wallet/fixture subdirectory or absolute directory.
|
||||
pub directory: std::string::String,
|
||||
/// Selected cluster name.
|
||||
pub cluster: std::string::String,
|
||||
@@ -143,14 +143,16 @@ pub fn resolved_wallet_profile(
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
let configured = std::path::PathBuf::from(profile.directory.as_str());
|
||||
let wallet_dir = if configured.is_absolute() {
|
||||
configured
|
||||
let persistent_wallet_dir = std::path::PathBuf::from(document.wallets_directory.as_str());
|
||||
let configured_temporary = std::path::PathBuf::from(profile.directory.as_str());
|
||||
let temporary_wallet_dir = if configured_temporary.is_absolute() {
|
||||
configured_temporary
|
||||
} else {
|
||||
std::path::PathBuf::from(document.wallets_directory.as_str()).join(configured)
|
||||
persistent_wallet_dir.join(configured_temporary)
|
||||
};
|
||||
let resolved = crate::WalletConfig {
|
||||
wallet_dir: wallet_dir.display().to_string(),
|
||||
wallet_dir: persistent_wallet_dir.display().to_string(),
|
||||
temporary_wallet_dir: temporary_wallet_dir.display().to_string(),
|
||||
cluster: profile.cluster.clone(),
|
||||
wallet_alias: profile.wallet_alias.clone(),
|
||||
temporary_wallet_enabled: profile.temporary_wallet_enabled,
|
||||
@@ -233,6 +235,25 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn resolved_profile_separates_persistent_and_temporary_wallet_directories() {
|
||||
let resolved_raw = crate::resolve_environment_placeholders(DEFAULT_WALLET);
|
||||
let document = match super::parse_wallet_json(resolved_raw.as_str()) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => panic!("resolved wallet config failed: {error}"),
|
||||
};
|
||||
let resolved = match super::resolved_wallet_profile(&document, "local_devnet") {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => panic!("wallet profile resolution failed: {error}"),
|
||||
};
|
||||
assert!(!resolved.wallet_dir.contains("${"));
|
||||
let expected_temporary = std::path::PathBuf::from(resolved.wallet_dir.as_str())
|
||||
.join("temporary/local_devnet")
|
||||
.display()
|
||||
.to_string();
|
||||
assert_eq!(resolved.temporary_wallet_dir, expected_temporary);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn wallet_profile_without_persistent_alias_remains_backward_compatible() {
|
||||
let mut value = match serde_json::from_str::<serde_json::Value>(DEFAULT_WALLET) {
|
||||
|
||||
Reference in New Issue
Block a user