commit b9f53411f42a6e1eb50f29d376bd9298c9ef97c0
parent d7958d479b1d338b43dc488dcb21361361cdfd31
Author: triesap <triesap@radroots.dev>
Date: Wed, 7 Jan 2026 15:27:28 +0000
nip46: fix session type imports
- import Nip46Session in get_public_key handler
- import Nip46Session in ping handler
- keep helper signatures explicit
- resolve jsonrpc nip46 compile errors
Diffstat:
8 files changed, 43 insertions(+), 85 deletions(-)
diff --git a/src/transport/jsonrpc/methods/nip46/get_public_key.rs b/src/transport/jsonrpc/methods/nip46/get_public_key.rs
@@ -2,9 +2,9 @@ use anyhow::Result;
use jsonrpsee::server::RpcModule;
use serde::{Deserialize, Serialize};
-use crate::core::nip46::session::Nip46Session;
+use crate::core::nip46::Nip46Session;
+use crate::transport::jsonrpc::nip46::{client, session};
use crate::transport::jsonrpc::{MethodRegistry, RpcContext, RpcError};
-use crate::transport::jsonrpc::nip46::client;
use nostr::nips::nip46::{NostrConnectMethod, NostrConnectRequest, ResponseResult};
#[derive(Debug, Deserialize)]
@@ -23,12 +23,7 @@ pub fn register(m: &mut RpcModule<RpcContext>, registry: &MethodRegistry) -> Res
let Nip46GetPublicKeyParams { session_id } = params
.parse()
.map_err(|e| RpcError::InvalidParams(e.to_string()))?;
- let session = ctx
- .state
- .nip46_sessions
- .get(&session_id)
- .await
- .ok_or_else(|| RpcError::InvalidParams("unknown session".to_string()))?;
+ let session = session::get_session(ctx.as_ref(), &session_id).await?;
let (pubkey, updated) = request_get_public_key(&session).await?;
if updated {
if !ctx
diff --git a/src/transport/jsonrpc/methods/nip46/nip04.rs b/src/transport/jsonrpc/methods/nip46/nip04.rs
@@ -2,8 +2,7 @@ use anyhow::Result;
use jsonrpsee::server::RpcModule;
use serde::{Deserialize, Serialize};
-use crate::core::nip46::session::Nip46Session;
-use crate::transport::jsonrpc::nip46::client;
+use crate::transport::jsonrpc::nip46::{client, session};
use crate::transport::jsonrpc::{MethodRegistry, RpcContext, RpcError};
use nostr::nips::nip46::{NostrConnectMethod, NostrConnectRequest, ResponseResult};
@@ -41,15 +40,8 @@ pub fn register(m: &mut RpcModule<RpcContext>, registry: &MethodRegistry) -> Res
} = params
.parse()
.map_err(|e| RpcError::InvalidParams(e.to_string()))?;
- let session = ctx
- .state
- .nip46_sessions
- .get(&session_id)
- .await
- .ok_or_else(|| RpcError::InvalidParams("unknown session".to_string()))?;
- if !has_permission(&session, "nip04_encrypt") {
- return Err(RpcError::Other("unauthorized nip04_encrypt".to_string()));
- }
+ let session = session::get_session(ctx.as_ref(), &session_id).await?;
+ session::require_permission(&session, "nip04_encrypt")?;
let public_key = radroots_nostr::prelude::radroots_nostr_parse_pubkey(&public_key)
.map_err(|e| RpcError::InvalidParams(format!("invalid public_key: {e}")))?;
let req = NostrConnectRequest::Nip04Encrypt { public_key, text };
@@ -88,15 +80,8 @@ pub fn register(m: &mut RpcModule<RpcContext>, registry: &MethodRegistry) -> Res
} = params
.parse()
.map_err(|e| RpcError::InvalidParams(e.to_string()))?;
- let session = ctx
- .state
- .nip46_sessions
- .get(&session_id)
- .await
- .ok_or_else(|| RpcError::InvalidParams("unknown session".to_string()))?;
- if !has_permission(&session, "nip04_decrypt") {
- return Err(RpcError::Other("unauthorized nip04_decrypt".to_string()));
- }
+ let session = session::get_session(ctx.as_ref(), &session_id).await?;
+ session::require_permission(&session, "nip04_decrypt")?;
let public_key = radroots_nostr::prelude::radroots_nostr_parse_pubkey(&public_key)
.map_err(|e| RpcError::InvalidParams(format!("invalid public_key: {e}")))?;
let req = NostrConnectRequest::Nip04Decrypt {
@@ -131,7 +116,3 @@ pub fn register(m: &mut RpcModule<RpcContext>, registry: &MethodRegistry) -> Res
Ok(())
}
-
-fn has_permission(session: &Nip46Session, perm: &str) -> bool {
- session.perms.iter().any(|entry| entry == perm)
-}
diff --git a/src/transport/jsonrpc/methods/nip46/nip44.rs b/src/transport/jsonrpc/methods/nip46/nip44.rs
@@ -2,8 +2,7 @@ use anyhow::Result;
use jsonrpsee::server::RpcModule;
use serde::{Deserialize, Serialize};
-use crate::core::nip46::session::Nip46Session;
-use crate::transport::jsonrpc::nip46::client;
+use crate::transport::jsonrpc::nip46::{client, session};
use crate::transport::jsonrpc::{MethodRegistry, RpcContext, RpcError};
use nostr::nips::nip46::{NostrConnectMethod, NostrConnectRequest, ResponseResult};
@@ -41,15 +40,8 @@ pub fn register(m: &mut RpcModule<RpcContext>, registry: &MethodRegistry) -> Res
} = params
.parse()
.map_err(|e| RpcError::InvalidParams(e.to_string()))?;
- let session = ctx
- .state
- .nip46_sessions
- .get(&session_id)
- .await
- .ok_or_else(|| RpcError::InvalidParams("unknown session".to_string()))?;
- if !has_permission(&session, "nip44_encrypt") {
- return Err(RpcError::Other("unauthorized nip44_encrypt".to_string()));
- }
+ let session = session::get_session(ctx.as_ref(), &session_id).await?;
+ session::require_permission(&session, "nip44_encrypt")?;
let public_key = radroots_nostr::prelude::radroots_nostr_parse_pubkey(&public_key)
.map_err(|e| RpcError::InvalidParams(format!("invalid public_key: {e}")))?;
let req = NostrConnectRequest::Nip44Encrypt { public_key, text };
@@ -88,15 +80,8 @@ pub fn register(m: &mut RpcModule<RpcContext>, registry: &MethodRegistry) -> Res
} = params
.parse()
.map_err(|e| RpcError::InvalidParams(e.to_string()))?;
- let session = ctx
- .state
- .nip46_sessions
- .get(&session_id)
- .await
- .ok_or_else(|| RpcError::InvalidParams("unknown session".to_string()))?;
- if !has_permission(&session, "nip44_decrypt") {
- return Err(RpcError::Other("unauthorized nip44_decrypt".to_string()));
- }
+ let session = session::get_session(ctx.as_ref(), &session_id).await?;
+ session::require_permission(&session, "nip44_decrypt")?;
let public_key = radroots_nostr::prelude::radroots_nostr_parse_pubkey(&public_key)
.map_err(|e| RpcError::InvalidParams(format!("invalid public_key: {e}")))?;
let req = NostrConnectRequest::Nip44Decrypt {
@@ -131,7 +116,3 @@ pub fn register(m: &mut RpcModule<RpcContext>, registry: &MethodRegistry) -> Res
Ok(())
}
-
-fn has_permission(session: &Nip46Session, perm: &str) -> bool {
- session.perms.iter().any(|entry| entry == perm)
-}
diff --git a/src/transport/jsonrpc/methods/nip46/ping.rs b/src/transport/jsonrpc/methods/nip46/ping.rs
@@ -2,9 +2,9 @@ use anyhow::Result;
use jsonrpsee::server::RpcModule;
use serde::{Deserialize, Serialize};
-use crate::core::nip46::session::Nip46Session;
+use crate::core::nip46::Nip46Session;
+use crate::transport::jsonrpc::nip46::{client, session};
use crate::transport::jsonrpc::{MethodRegistry, RpcContext, RpcError};
-use crate::transport::jsonrpc::nip46::client;
use nostr::nips::nip46::{NostrConnectMethod, NostrConnectRequest, ResponseResult};
#[derive(Debug, Deserialize)]
@@ -23,12 +23,7 @@ pub fn register(m: &mut RpcModule<RpcContext>, registry: &MethodRegistry) -> Res
let Nip46PingParams { session_id } = params
.parse()
.map_err(|e| RpcError::InvalidParams(e.to_string()))?;
- let session = ctx
- .state
- .nip46_sessions
- .get(&session_id)
- .await
- .ok_or_else(|| RpcError::InvalidParams("unknown session".to_string()))?;
+ let session = session::get_session(ctx.as_ref(), &session_id).await?;
Ok::<Nip46PingResponse, RpcError>(Nip46PingResponse {
result: request_ping(&session).await?,
})
diff --git a/src/transport/jsonrpc/methods/nip46/session_status.rs b/src/transport/jsonrpc/methods/nip46/session_status.rs
@@ -2,6 +2,7 @@ use anyhow::Result;
use jsonrpsee::server::RpcModule;
use serde::{Deserialize, Serialize};
+use crate::transport::jsonrpc::nip46::session;
use crate::transport::jsonrpc::{MethodRegistry, RpcContext, RpcError};
#[derive(Debug, Deserialize)]
@@ -28,12 +29,7 @@ pub fn register(m: &mut RpcModule<RpcContext>, registry: &MethodRegistry) -> Res
let Nip46SessionStatusParams { session_id } = params
.parse()
.map_err(|e| RpcError::InvalidParams(e.to_string()))?;
- let session = ctx
- .state
- .nip46_sessions
- .get(&session_id)
- .await
- .ok_or_else(|| RpcError::InvalidParams("unknown session".to_string()))?;
+ let session = session::get_session(ctx.as_ref(), &session_id).await?;
Ok::<Nip46SessionStatusResponse, RpcError>(Nip46SessionStatusResponse {
session_id,
client_pubkey: session.client_pubkey.to_hex(),
diff --git a/src/transport/jsonrpc/methods/nip46/sign_event.rs b/src/transport/jsonrpc/methods/nip46/sign_event.rs
@@ -2,8 +2,7 @@ use anyhow::Result;
use jsonrpsee::server::RpcModule;
use serde::{Deserialize, Serialize};
-use crate::core::nip46::session::Nip46Session;
-use crate::transport::jsonrpc::nip46::client;
+use crate::transport::jsonrpc::nip46::{client, session};
use crate::transport::jsonrpc::{MethodRegistry, RpcContext, RpcError};
use nostr::UnsignedEvent;
@@ -24,15 +23,8 @@ pub fn register(m: &mut RpcModule<RpcContext>, registry: &MethodRegistry) -> Res
let Nip46SignEventParams { session_id, event } = params
.parse()
.map_err(|e| RpcError::InvalidParams(e.to_string()))?;
- let session = ctx
- .state
- .nip46_sessions
- .get(&session_id)
- .await
- .ok_or_else(|| RpcError::InvalidParams("unknown session".to_string()))?;
- if !has_permission(&session, "sign_event") {
- return Err(RpcError::Other("unauthorized sign_event".to_string()));
- }
+ let session = session::get_session(ctx.as_ref(), &session_id).await?;
+ session::require_permission(&session, "sign_event")?;
if event.pubkey != session.remote_signer_pubkey {
return Err(RpcError::InvalidParams(
"event pubkey does not match remote signer".to_string(),
@@ -43,7 +35,3 @@ pub fn register(m: &mut RpcModule<RpcContext>, registry: &MethodRegistry) -> Res
})?;
Ok(())
}
-
-fn has_permission(session: &Nip46Session, perm: &str) -> bool {
- session.perms.iter().any(|entry| entry == perm)
-}
diff --git a/src/transport/jsonrpc/nip46/mod.rs b/src/transport/jsonrpc/nip46/mod.rs
@@ -1,2 +1,3 @@
pub mod client;
pub mod connection;
+pub mod session;
diff --git a/src/transport/jsonrpc/nip46/session.rs b/src/transport/jsonrpc/nip46/session.rs
@@ -0,0 +1,21 @@
+use crate::core::nip46::session::Nip46Session;
+use crate::transport::jsonrpc::{RpcContext, RpcError};
+
+pub async fn get_session(
+ ctx: &RpcContext,
+ session_id: &str,
+) -> Result<Nip46Session, RpcError> {
+ ctx.state
+ .nip46_sessions
+ .get(session_id)
+ .await
+ .ok_or_else(|| RpcError::InvalidParams("unknown session".to_string()))
+}
+
+pub fn require_permission(session: &Nip46Session, perm: &str) -> Result<(), RpcError> {
+ if session.perms.iter().any(|entry| entry == perm) {
+ Ok(())
+ } else {
+ Err(RpcError::Other(format!("unauthorized {perm}")))
+ }
+}