fix: post endpoint url on sse endpoint event (#900)

This commit is contained in:
Salman Mohammed
2025-01-29 16:48:04 -05:00
committed by GitHub
parent 129e4a9e44
commit 407cebf921
2 changed files with 8 additions and 6 deletions

View File

@@ -43,7 +43,7 @@ async fn main() -> Result<()> {
println!("Connected to server: {server_info:?}\n"); println!("Connected to server: {server_info:?}\n");
// Sleep for 100ms to allow the server to start - surprisingly this is required! // Sleep for 100ms to allow the server to start - surprisingly this is required!
tokio::time::sleep(Duration::from_millis(100)).await; tokio::time::sleep(Duration::from_millis(500)).await;
// List tools // List tools
let tools = client.list_tools(None).await?; let tools = client.list_tools(None).await?;

View File

@@ -9,6 +9,7 @@ use std::sync::Arc;
use tokio::sync::{mpsc, RwLock}; use tokio::sync::{mpsc, RwLock};
use tokio::time::{timeout, Duration}; use tokio::time::{timeout, Duration};
use tracing::warn; use tracing::warn;
use url::Url;
use super::{send_message, Transport, TransportHandle}; use super::{send_message, Transport, TransportHandle};
@@ -90,12 +91,13 @@ impl SseActor {
match event { match event {
SSE::Event(e) if e.event_type == "endpoint" => { SSE::Event(e) if e.event_type == "endpoint" => {
// SSE server uses the "endpoint" event to tell us the POST URL // SSE server uses the "endpoint" event to tell us the POST URL
let base_url = sse_url.trim_end_matches('/').trim_end_matches("sse"); let base_url = Url::parse(&sse_url).expect("Invalid base URL");
let endpoint_path = e.data.trim_start_matches('/'); let post_url = base_url
let post_url = format!("{}{}", base_url, endpoint_path); .join(&e.data)
.expect("Failed to resolve endpoint URL");
println!("Discovered SSE POST endpoint: {post_url}"); println!("Discovered SSE POST endpoint: {}", post_url);
*post_endpoint.write().await = Some(post_url); *post_endpoint.write().await = Some(post_url.to_string());
break; break;
} }
_ => continue, _ => continue,