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()) }