v0.3.15-pre.008-fix.004

This commit is contained in:
2026-09-14 09:24:27 +02:00
parent 11e5247fbf
commit d3eea1aa12
11 changed files with 110 additions and 25 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: crates/ksp-config-lib/USAGE.md -->
<!-- version: 18 -->
<!-- version: 19 -->
# Utilisation de ksp-config-lib
@@ -158,7 +158,7 @@ secret_metadata = metadata dont la valeur doit avoir une provenance KSP_SECRET_*
`protocol` n'est pas un nouveau `WsProtocolKind` et ne transforme pas PublicNode en protocole. Config résout les placeholders, vérifie la classe de sensibilité des metadata puis construit `YellowstoneGrpcTransportSettings`. Transport ne lit jamais l'environnement. Les valeurs de `secret_metadata` sont disponibles au runtime mais redacted dans `safe_value` et dans les représentations `Debug`.
Les profils versionnés `publicnode_mainnet` et `publicnode_testnet` représentent leurs endpoints Yellowstone sous la forme URL TLS requise par Transport et conservent le `x-token` dans `secret_metadata`. Ils restent des sources Transport network-scoped et ne définissent jamais lidentité du réseau applicatif.
Les profils versionnés `publicnode_mainnet` et `publicnode_testnet` représentent leurs endpoints Yellowstone sous la forme URL TLS requise par Transport et conservent le `x-token` dans `secret_metadata`. Ils restent des sources Transport network-scoped et ne définissent jamais lidentité du réseau applicatif. `publicnode_mainnet` expose en plus le RPC HTTP Mainnet PublicNode utilisé par les consumers qui doivent hydrater une source Yellowstone same-provider ; ce rôle HTTP ne recopie pas une limite numérique Solana-public qui ne fait pas partie du contrat PublicNode committé.
L'accesseur historique `into_transport_settings()` conserve volontairement son tuple `(HTTP, Option<WS>)`. Un consumer ayant besoin des trois backends utilise `into_all_transport_settings()` ou les accesseurs séparés afin de ne pas casser silencieusement les consumers V2.

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-config-lib/unit_tests/transport.rs
// version: 16
// version: 17
#[test]
fn fixture_transport_profile_maps_complete_runtime_contract() {
@@ -273,6 +273,19 @@ fn committed_v3_publicnode_profiles_map_provider_neutral_yellowstone_grpc_with_n
std::result::Result::Err(_) => continue,
};
assert_eq!(resolved.profile_id(), profile_id);
if profile_id == "publicnode_mainnet" {
assert_eq!(resolved.settings().endpoints().len(), 1);
let http = &resolved.settings().endpoints()[0];
assert_eq!(http.name(), "publicnode_solana_mainnet_rpc");
assert_eq!(http.provider().as_str(), "publicnode");
assert_eq!(http.cluster().as_str(), "mainnet");
assert_eq!(http.url().as_str(), "https://solana-rpc.publicnode.com");
assert_eq!(http.roles().len(), 1);
let limits = http.roles()[0].limits();
assert!(limits.requests_per_second().is_none());
assert!(limits.burst_capacity().is_none());
assert_eq!(limits.max_concurrent_requests().map(std::num::NonZeroU32::get), std::option::Option::Some(8));
}
assert!(resolved.ws_settings().is_some());
let grpc = resolved.grpc_settings();
assert!(grpc.is_some(), "PublicNode profile {profile_id} should expose Yellowstone gRPC settings");