myc

Self-custodial remote signer for Radroots apps
git clone https://radroots.dev/git/myc.git
Log | Files | Refs | README | LICENSE

commit 7a884f4560d54a23691d62f7d1d09b8e8e18d8ed
parent 7ea5a73494875aa02eb2ee9603699caac620d86a
Author: triesap <tyson@radroots.org>
Date:   Thu,  2 Apr 2026 19:10:53 +0000

nip46: return effective remote session capability

Diffstat:
Msrc/policy.rs | 2++
Msrc/transport/nip46.rs | 28++++++++++++++++++++++++++++
2 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/src/policy.rs b/src/policy.rs @@ -515,6 +515,7 @@ fn required_permission_for_request( match request { RadrootsNostrConnectRequest::Connect { .. } | RadrootsNostrConnectRequest::GetPublicKey + | RadrootsNostrConnectRequest::GetSessionCapability | RadrootsNostrConnectRequest::Ping => None, RadrootsNostrConnectRequest::SignEvent(unsigned_event) => { Some(RadrootsNostrConnectPermission::with_parameter( @@ -584,6 +585,7 @@ fn request_requires_auth(request: &RadrootsNostrConnectRequest) -> bool { request, RadrootsNostrConnectRequest::Connect { .. } | RadrootsNostrConnectRequest::GetPublicKey + | RadrootsNostrConnectRequest::GetSessionCapability | RadrootsNostrConnectRequest::Ping ) } diff --git a/src/transport/nip46.rs b/src/transport/nip46.rs @@ -121,6 +121,7 @@ impl MycNip46Handler { self.handle_crypto_request(client_public_key, request_message) } RadrootsNostrConnectRequest::GetPublicKey + | RadrootsNostrConnectRequest::GetSessionCapability | RadrootsNostrConnectRequest::Ping | RadrootsNostrConnectRequest::SwitchRelays => { self.handle_base_request(client_public_key, request_message) @@ -448,6 +449,7 @@ impl MycNip46Handler { } }, RadrootsNostrConnectRequest::GetPublicKey + | RadrootsNostrConnectRequest::GetSessionCapability | RadrootsNostrConnectRequest::Ping | RadrootsNostrConnectRequest::SwitchRelays => match evaluation.action { RadrootsNostrSignerRequestAction::Denied { reason } => { @@ -1135,6 +1137,9 @@ fn response_from_hint( RadrootsNostrSignerRequestResponseHint::UserPublicKey(public_key) => { RadrootsNostrConnectResponse::UserPublicKey(public_key) } + RadrootsNostrSignerRequestResponseHint::RemoteSessionCapability(capability) => { + RadrootsNostrConnectResponse::RemoteSessionCapability(capability) + } RadrootsNostrSignerRequestResponseHint::RelayList(relays) => { if relays == connection.relays { RadrootsNostrConnectResponse::RelayList(relays) @@ -1979,6 +1984,29 @@ mod tests { runtime.transport().expect("transport").relays().to_vec() ) ); + + let capability = handler + .handle_request_response( + client_keys().public_key(), + RadrootsNostrConnectRequestMessage::new( + "req-capability", + RadrootsNostrConnectRequest::GetSessionCapability, + ), + ) + .expect("get session capability"); + assert_eq!( + capability, + RadrootsNostrConnectResponse::RemoteSessionCapability( + radroots_nostr_connect::prelude::RadrootsNostrConnectRemoteSessionCapability { + user_public_key: runtime.user_identity().public_key(), + relays: runtime.transport().expect("transport").relays().to_vec(), + permissions: vec![RadrootsNostrConnectPermission::new( + RadrootsNostrConnectMethod::SwitchRelays, + )] + .into(), + }, + ) + ); } #[test]