radrootsd

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

commit 3c3d9442b4f10407cd241dff865ffc78c57b7b6a
parent 68a299cb9752e6e4dbb71edddf67ce7d1b9ba4d3
Author: triesap <tyson@radroots.org>
Date:   Sun, 12 Apr 2026 16:53:53 +0000

radrootsd: reconcile runtime repo fallout

Diffstat:
MCargo.lock | 1+
Msrc/transport/jsonrpc/methods/bridge/shared.rs | 25++++++++++++++++---------
Msrc/transport/jsonrpc/methods/nip46/connect.rs | 27++++++++++++++++-----------
3 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock @@ -1813,6 +1813,7 @@ dependencies = [ "hex", "nostr", "radroots_identity", + "radroots_nostr", "radroots_nostr_connect", "radroots_runtime", "serde", diff --git a/src/transport/jsonrpc/methods/bridge/shared.rs b/src/transport/jsonrpc/methods/bridge/shared.rs @@ -174,11 +174,16 @@ pub(super) async fn resolve_actor_bridge_signer( "{command} requires signer_session_id for actor-authored bridge writes" )) })?; - let session = ctx.state.nip46_sessions.get(session_id).await.ok_or_else(|| { - RpcError::Unauthorized(format!( - "{command} signer_session_id `{session_id}` was not found" - )) - })?; + let session = ctx + .state + .nip46_sessions + .get(session_id) + .await + .ok_or_else(|| { + RpcError::Unauthorized(format!( + "{command} signer_session_id `{session_id}` was not found" + )) + })?; nip46_session::require_sign_event_permission(&session, event_kind).map_err(|error| { RpcError::Unauthorized(format!( "{command} signer_session_id `{session_id}` {}", @@ -186,7 +191,9 @@ pub(super) async fn resolve_actor_bridge_signer( )) })?; require_signer_authority(&session, signer_authority).map_err(|reason| { - RpcError::Unauthorized(format!("{command} signer_session_id `{session_id}` {reason}")) + RpcError::Unauthorized(format!( + "{command} signer_session_id `{session_id}` {reason}" + )) })?; Ok(BridgeSignerSelection::Nip46Session { session_id: session_id.to_string(), @@ -397,9 +404,9 @@ mod tests { match resolve_actor_bridge_signer(&ctx, None, None, 30402, "bridge.listing.publish") .await { - Ok(_) => panic!("expected missing session to fail"), - Err(err) => err, - }; + Ok(_) => panic!("expected missing session to fail"), + Err(err) => err, + }; assert!(err.to_string().contains("requires signer_session_id")); } diff --git a/src/transport/jsonrpc/methods/nip46/connect.rs b/src/transport/jsonrpc/methods/nip46/connect.rs @@ -44,15 +44,20 @@ struct Nip46ConnectResponse { pub fn register(m: &mut RpcModule<RpcContext>, registry: &MethodRegistry) -> Result<()> { registry.track("nip46.connect"); m.register_async_method("nip46.connect", |params, ctx, _| async move { - let Nip46ConnectParams { - url, - client_secret_key, - signer_authority, - } = params - .parse() - .map_err(|e| RpcError::InvalidParams(e.to_string()))?; - let response = - connect_nip46(ctx.as_ref().clone(), url, client_secret_key, signer_authority).await?; + let Nip46ConnectParams { + url, + client_secret_key, + signer_authority, + } = params + .parse() + .map_err(|e| RpcError::InvalidParams(e.to_string()))?; + let response = connect_nip46( + ctx.as_ref().clone(), + url, + client_secret_key, + signer_authority, + ) + .await?; Ok::<Nip46ConnectResponse, RpcError>(response) })?; Ok(()) @@ -64,8 +69,8 @@ async fn connect_nip46( client_secret_key: Option<String>, signer_authority: Option<Nip46SessionAuthority>, ) -> Result<Nip46ConnectResponse, RpcError> { - let signer_authority = Nip46Session::normalize_authority(signer_authority) - .map_err(RpcError::InvalidParams)?; + let signer_authority = + Nip46Session::normalize_authority(signer_authority).map_err(RpcError::InvalidParams)?; let info = parse_connect_url(&url)?; match info.mode { Nip46ConnectMode::Bunker => connect_bunker(ctx, info, signer_authority).await,