commit 31c079e490cbd3b0e4f0408ab4226518d20d5398
parent a826c67923d3fd8eee9e8b7fca3e1739ec6c3223
Author: triesap <tyson@radroots.org>
Date: Wed, 8 Apr 2026 19:21:49 +0000
surface signer session in bridge job views
Diffstat:
1 file changed, 31 insertions(+), 1 deletion(-)
diff --git a/src/transport/jsonrpc/methods/bridge/shared.rs b/src/transport/jsonrpc/methods/bridge/shared.rs
@@ -32,6 +32,8 @@ pub(super) struct BridgeJobView {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub completed_at_unix: Option<u64>,
pub signer_mode: String,
+ #[serde(default, skip_serializing_if = "Option::is_none")]
+ pub signer_session_id: Option<String>,
pub event_kind: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub event_id: Option<String>,
@@ -53,6 +55,7 @@ pub(super) struct BridgeJobView {
impl From<BridgeJobRecord> for BridgeJobView {
fn from(record: BridgeJobRecord) -> Self {
+ let (signer_mode, signer_session_id) = split_signer_usage(record.signer_mode.as_str());
Self {
terminal: record.is_terminal(),
recovered_after_restart: record.recovered_after_restart(),
@@ -62,7 +65,8 @@ impl From<BridgeJobRecord> for BridgeJobView {
status: record.status,
requested_at_unix: record.requested_at_unix,
completed_at_unix: record.completed_at_unix,
- signer_mode: record.signer_mode,
+ signer_mode,
+ signer_session_id,
event_kind: record.event_kind,
event_id: record.event_id,
event_addr: record.event_addr,
@@ -79,6 +83,15 @@ impl From<BridgeJobRecord> for BridgeJobView {
}
}
+fn split_signer_usage(value: &str) -> (String, Option<String>) {
+ match value.split_once(':') {
+ Some(("nip46_session", session_id)) if !session_id.trim().is_empty() => {
+ ("nip46_session".to_owned(), Some(session_id.to_owned()))
+ }
+ _ => (value.to_owned(), None),
+ }
+}
+
pub(super) fn ensure_bridge_enabled(ctx: &RpcContext) -> Result<(), RpcError> {
if !ctx.state.bridge_config.enabled {
return Err(RpcError::Other("bridge ingress is disabled".to_string()));
@@ -483,4 +496,21 @@ mod tests {
assert!(view.terminal);
assert!(view.recovered_after_restart);
}
+
+ #[test]
+ fn bridge_job_view_exposes_signer_session_separately() {
+ let job = new_listing_publish_job(
+ "job-1".to_string(),
+ Some("same".to_string()),
+ "nip46_session:session-1".to_string(),
+ 30402,
+ Some("event-1".to_string()),
+ "30402:author:listing".to_string(),
+ BridgeDeliveryPolicy::Any,
+ None,
+ );
+ let view = BridgeJobView::from(job);
+ assert_eq!(view.signer_mode, "nip46_session");
+ assert_eq!(view.signer_session_id.as_deref(), Some("session-1"));
+ }
}