From db4c23333037c0acabd03eaec656799706f96bc9 Mon Sep 17 00:00:00 2001 From: benthecarman Date: Tue, 21 Feb 2023 01:31:28 -0600 Subject: [PATCH 1/3] Send RelayMessages back to client --- Cargo.toml | 2 +- src/lib.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 3f069a3..48c8e5f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ cfg-if = "0.1.2" # Need the queue feature worker = { git = "https://github.com/cloudflare/workers-rs", rev = "b4b9cd1f15feac412b6f9e9e9209458cd3b98430", features = ["queue"] } futures = "0.3.26" -nostr = { git = "https://github.com/rust-nostr/nostr", rev = "c333544b1e58b89acb786695d5ca08759ebf5e69" } +nostr = { git = "https://github.com/benthecarman/nostr", rev = "6c238ac72651671bcfd6666ddcd731767d1643b8" } serde = { version = "^1.0", features = ["derive"] } # The `console_error_panic_hook` crate provides better debugging of panics by diff --git a/src/lib.rs b/src/lib.rs index 26a0af2..59bb423 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,7 +2,7 @@ pub(crate) use crate::nostr::{ try_queue_event, NOSTR_QUEUE, NOSTR_QUEUE_2, NOSTR_QUEUE_3, NOSTR_QUEUE_4, NOSTR_QUEUE_5, NOSTR_QUEUE_6, }; -use ::nostr::{ClientMessage, Event}; +use ::nostr::{ClientMessage, Event, RelayMessage}; use futures::StreamExt; use serde::{Deserialize, Serialize}; use worker::*; @@ -59,7 +59,12 @@ pub async fn main(req: Request, env: Env, _ctx: Context) -> Result { { Some(_) => { console_log!("event already published: {}", event.id); - return empty_response(); + let relay_msg = RelayMessage::new_ok( + event.id, + false, + "event already published", + ); + return relay_response(relay_msg); } None => {} }; @@ -87,27 +92,37 @@ pub async fn main(req: Request, env: Env, _ctx: Context) -> Result { { Ok(_) => { console_log!("saved published note: {}", event.id); + let relay_msg = RelayMessage::new_ok(event.id, true, ""); + relay_response(relay_msg) } Err(e) => { console_log!( "could not save published note: {} - {e:?}", event.id ); + let relay_msg = RelayMessage::new_ok( + event.id, + false, + "error: could not save published note", + ); + relay_response(relay_msg) } } } _ => { console_log!("ignoring other nostr client message types"); + Response::error("Only Event types allowed", 400) } } + } else { + Response::error("Could not parse Client Message", 400) } } Err(e) => { console_log!("could not get request text: {}", e); + Response::error("Could not get request text", 400) } } - - empty_response() }) .get("/", |_, ctx| { // For websocket compatibility @@ -143,6 +158,14 @@ pub async fn main(req: Request, env: Env, _ctx: Context) -> Result { "event already published: {}", event.id ); + let relay_msg = RelayMessage::new_ok( + event.id, + false, + "event already published", + ); + server + .send_with_str(&relay_msg.as_json()) + .expect("failed to send response"); continue; } None => {} @@ -172,12 +195,25 @@ pub async fn main(req: Request, env: Env, _ctx: Context) -> Result { { Ok(_) => { console_log!("saved published note: {}", event.id); + let relay_msg = + RelayMessage::new_ok(event.id, true, ""); + server + .send_with_str(&relay_msg.as_json()) + .expect("failed to send response"); } Err(e) => { console_log!( "could not save published note: {} - {e:?}", event.id ); + let relay_msg = RelayMessage::new_ok( + event.id, + false, + "error: could not save published note", + ); + server + .send_with_str(&relay_msg.as_json()) + .expect("failed to send response"); } } } @@ -236,6 +272,10 @@ pub fn queue_number(batch_name: &str) -> Result { } } +fn relay_response(msg: RelayMessage) -> worker::Result { + Response::from_json(&msg)?.with_cors(&cors()) +} + fn empty_response() -> worker::Result { Response::empty()?.with_cors(&cors()) } From 41d7b380c94ab4fb67e5eb3b0269d9701a446afa Mon Sep 17 00:00:00 2001 From: benthecarman Date: Tue, 21 Feb 2023 01:34:32 -0600 Subject: [PATCH 2/3] Clippy fixes --- src/lib.rs | 56 +++++++++++++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 59bb423..9bdb363 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -52,21 +52,21 @@ pub async fn main(req: Request, env: Env, _ctx: Context) -> Result { // check if we've already published it before let published_notes = ctx.kv("PUBLISHED_NOTES")?; - match published_notes + if published_notes .get(event.id.to_string().as_str()) .json::() - .await? + .await + .ok() + .flatten() + .is_some() { - Some(_) => { - console_log!("event already published: {}", event.id); - let relay_msg = RelayMessage::new_ok( - event.id, - false, - "event already published", - ); - return relay_response(relay_msg); - } - None => {} + console_log!("event already published: {}", event.id); + let relay_msg = RelayMessage::new_ok( + event.id, + false, + "event already published", + ); + return relay_response(relay_msg); }; // broadcast it to all queues @@ -147,28 +147,24 @@ pub async fn main(req: Request, env: Env, _ctx: Context) -> Result { // check if we've already published it before let published_notes = ctx.kv("PUBLISHED_NOTES").expect("get kv"); - match published_notes + if published_notes .get(event.id.to_string().as_str()) .json::() .await - .expect("lookup value") + .ok() + .flatten() + .is_some() { - Some(_) => { - console_log!( - "event already published: {}", - event.id - ); - let relay_msg = RelayMessage::new_ok( - event.id, - false, - "event already published", - ); - server - .send_with_str(&relay_msg.as_json()) - .expect("failed to send response"); - continue; - } - None => {} + console_log!("event already published: {}", event.id); + let relay_msg = RelayMessage::new_ok( + event.id, + false, + "event already published", + ); + server + .send_with_str(&relay_msg.as_json()) + .expect("failed to send response"); + continue; }; // broadcast it to all queues From 69b1ab320d08decbdf2119fcb0300f7a346bcf8d Mon Sep 17 00:00:00 2001 From: benthecarman Date: Tue, 21 Feb 2023 11:26:06 -0600 Subject: [PATCH 3/3] Response to Tony's review --- Cargo.toml | 1 + src/lib.rs | 18 +++++------------- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 48c8e5f..4f93bda 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ cfg-if = "0.1.2" # Need the queue feature worker = { git = "https://github.com/cloudflare/workers-rs", rev = "b4b9cd1f15feac412b6f9e9e9209458cd3b98430", features = ["queue"] } futures = "0.3.26" +# Needed for serde serializaters nostr = { git = "https://github.com/benthecarman/nostr", rev = "6c238ac72651671bcfd6666ddcd731767d1643b8" } serde = { version = "^1.0", features = ["derive"] } diff --git a/src/lib.rs b/src/lib.rs index 9bdb363..bf367bd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -191,27 +191,19 @@ pub async fn main(req: Request, env: Env, _ctx: Context) -> Result { { Ok(_) => { console_log!("saved published note: {}", event.id); - let relay_msg = - RelayMessage::new_ok(event.id, true, ""); - server - .send_with_str(&relay_msg.as_json()) - .expect("failed to send response"); } Err(e) => { console_log!( "could not save published note: {} - {e:?}", event.id ); - let relay_msg = RelayMessage::new_ok( - event.id, - false, - "error: could not save published note", - ); - server - .send_with_str(&relay_msg.as_json()) - .expect("failed to send response"); } } + + let relay_msg = RelayMessage::new_ok(event.id, true, ""); + server + .send_with_str(&relay_msg.as_json()) + .expect("failed to send response"); } _ => { console_log!("ignoring other nostr client message types");