radrootsd

JSON-RPC bridge for Radroots event publishing
git clone https://radroots.dev/git/radrootsd.git
Log | Files | Refs | README | LICENSE

commit ef33ca1ec24b3b17e3171dae80f911c810d60ebf
parent da1db945e8f5c7ea4662ffc507f3ff951521d226
Author: triesap <tyson@radroots.org>
Date:   Sat, 25 Apr 2026 09:06:34 +0000

nip46: cover hydrated user pubkey views

Diffstat:
Msrc/core/nip46/session.rs | 37+++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+), 0 deletions(-)

diff --git a/src/core/nip46/session.rs b/src/core/nip46/session.rs @@ -402,6 +402,43 @@ mod tests { assert!(view.expires_in_secs.is_some()); } + #[test] + fn public_view_keeps_remote_signer_and_user_pubkeys_distinct() { + let client_keys = RadrootsNostrKeys::generate(); + let remote_signer_keys = RadrootsNostrKeys::generate(); + let user_keys = RadrootsNostrKeys::generate(); + let session = Nip46Session { + id: "hydrated-outbound".to_string(), + client: RadrootsNostrClient::new(client_keys.clone()), + client_keys: client_keys.clone(), + client_pubkey: client_keys.public_key(), + remote_signer_pubkey: remote_signer_keys.public_key(), + user_pubkey: Some(user_keys.public_key()), + relays: vec!["wss://relay.example.com".to_string()], + perms: vec!["sign_event:30402".to_string()], + name: Some("remote signer".to_string()), + url: None, + image: None, + expires_at: Some(Instant::now() + Duration::from_secs(30)), + auth_required: false, + authorized: true, + auth_url: None, + pending_request: None, + signer_authority: None, + }; + + let view = session.public_view(); + let expected_user_pubkey = user_keys.public_key().to_hex(); + + assert_eq!(view.role, Nip46SessionRole::OutboundRemoteSigner); + assert_eq!(view.signer_pubkey, remote_signer_keys.public_key().to_hex()); + assert_eq!( + view.user_pubkey.as_deref(), + Some(expected_user_pubkey.as_str()) + ); + assert_ne!(view.signer_pubkey, expected_user_pubkey); + } + #[tokio::test] async fn session_store_keeps_active() { let store = Nip46SessionStore::new();