commit 5d65f2d29f9638190d3a7f2b2fb4811c4d9ecad6
parent 433f1b58b1d8dda29a8e020d891f21d6c73fb0ab
Author: triesap <triesap@radroots.dev>
Date: Tue, 6 Jan 2026 02:54:21 +0000
nip46: add session status rpc
- add nip46.session.status endpoint
- return session pubkeys and relays
- include optional user pubkey
- register status method in nip46 module
Diffstat:
2 files changed, 44 insertions(+), 0 deletions(-)
diff --git a/src/api/jsonrpc/methods/nip46/mod.rs b/src/api/jsonrpc/methods/nip46/mod.rs
@@ -9,6 +9,7 @@ pub mod status;
pub mod connect;
pub mod get_public_key;
pub mod sign_event;
+pub mod session_status;
pub fn module(ctx: RpcContext, registry: MethodRegistry) -> Result<RpcModule<RpcContext>> {
let mut m = RpcModule::new(ctx);
@@ -16,5 +17,6 @@ pub fn module(ctx: RpcContext, registry: MethodRegistry) -> Result<RpcModule<Rpc
connect::register(&mut m, ®istry)?;
get_public_key::register(&mut m, ®istry)?;
sign_event::register(&mut m, ®istry)?;
+ session_status::register(&mut m, ®istry)?;
Ok(m)
}
diff --git a/src/api/jsonrpc/methods/nip46/session_status.rs b/src/api/jsonrpc/methods/nip46/session_status.rs
@@ -0,0 +1,42 @@
+use anyhow::Result;
+use jsonrpsee::server::RpcModule;
+use serde::{Deserialize, Serialize};
+
+use crate::api::jsonrpc::{MethodRegistry, RpcContext, RpcError};
+
+#[derive(Debug, Deserialize)]
+struct Nip46SessionStatusParams {
+ session_id: String,
+}
+
+#[derive(Clone, Debug, Serialize)]
+struct Nip46SessionStatusResponse {
+ session_id: String,
+ client_pubkey: String,
+ remote_signer_pubkey: String,
+ user_pubkey: Option<String>,
+ relays: Vec<String>,
+}
+
+pub fn register(m: &mut RpcModule<RpcContext>, registry: &MethodRegistry) -> Result<()> {
+ registry.track("nip46.session.status");
+ m.register_async_method("nip46.session.status", |params, ctx, _| async move {
+ 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()))?;
+ Ok::<Nip46SessionStatusResponse, RpcError>(Nip46SessionStatusResponse {
+ session_id,
+ client_pubkey: session.client_pubkey.to_hex(),
+ remote_signer_pubkey: session.remote_signer_pubkey.to_hex(),
+ user_pubkey: session.user_pubkey.map(|pubkey| pubkey.to_hex()),
+ relays: session.relays,
+ })
+ })?;
+ Ok(())
+}