From 40594433cf3c1d2850bc2dc2019442d3cdc8b564 Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Wed, 22 Oct 2025 18:36:04 +0200 Subject: [PATCH 1/9] feat(h3-iroh): update to iroh@0.94 and h3@0.0.8 --- h3-iroh/Cargo.toml | 8 +- h3-iroh/examples/client.rs | 21 +++- h3-iroh/examples/server.rs | 33 ++--- h3-iroh/src/lib.rs | 244 ++++++++++++------------------------- 4 files changed, 115 insertions(+), 191 deletions(-) diff --git a/h3-iroh/Cargo.toml b/h3-iroh/Cargo.toml index c730a5f..6802be7 100644 --- a/h3-iroh/Cargo.toml +++ b/h3-iroh/Cargo.toml @@ -6,17 +6,17 @@ license = "MIT" [dependencies] anyhow = { version = "1", optional = true } -axum = { version = "0.7", optional = true } +axum = { version = "0.8", optional = true } bytes = "1" futures = "0.3" -h3 = { version = "0.0.6", features = ["tracing"] } +h3 = { version = "0.0.8", features = ["tracing"] } http = { version = "1.1", optional = true } http-body = { version = "1", optional = true } http-body-util = { version = "0.1", optional = true } hyper = { version = "1.5", optional = true } hyper-util = { version = "0.1", optional = true } -iroh = "0.93" -iroh-base = { version = "0.93", features = ["ticket"] } +iroh = "0.94" +iroh-tickets = "0.1" tokio = { version = "1", features = ["io-util"], default-features = false} tokio-util = "0.7" tower = { version = "0.5", optional = true } diff --git a/h3-iroh/examples/client.rs b/h3-iroh/examples/client.rs index a56f688..a12b1f4 100644 --- a/h3-iroh/examples/client.rs +++ b/h3-iroh/examples/client.rs @@ -2,8 +2,8 @@ use std::{future, str::FromStr}; use anyhow::{bail, Context, Result}; use clap::Parser; -use iroh::NodeAddr; -use iroh_base::ticket::NodeTicket; +use iroh::EndpointAddr; +use iroh_tickets::endpoint::EndpointTicket; use tokio::io::AsyncWriteExt; use tracing::info; @@ -27,8 +27,8 @@ async fn main() -> Result<()> { bail!("URI scheme must be iroh+h3"); } let ticket = uri.host().context("missing hostname in URI")?; - let ticket = NodeTicket::from_str(ticket)?; - let addr: NodeAddr = ticket.into(); + let ticket = EndpointTicket::from_str(ticket)?; + let addr: EndpointAddr = ticket.into(); let ep = iroh::Endpoint::builder() .keylog(args.keylogfile) @@ -41,8 +41,17 @@ async fn main() -> Result<()> { let (mut driver, mut send_request) = h3::client::new(conn).await?; let drive_fut = async move { - future::poll_fn(|cx| driver.poll_close(cx)).await?; - Ok::<(), anyhow::Error>(()) + let err = future::poll_fn(|cx| driver.poll_close(cx)).await; + match err { + h3::error::ConnectionError::Local { ref error, .. } => { + if matches!(error, h3::error::LocalError::Closing { .. }) { + Ok(()) + } else { + Err(err) + } + } + _ => Err(err), + } }; let req_fut = async move { diff --git a/h3-iroh/examples/server.rs b/h3-iroh/examples/server.rs index 1193f62..1c94f30 100644 --- a/h3-iroh/examples/server.rs +++ b/h3-iroh/examples/server.rs @@ -7,10 +7,10 @@ use std::{path::PathBuf, sync::Arc}; use anyhow::{bail, Result}; use bytes::{Bytes, BytesMut}; use clap::Parser; -use h3::{error::ErrorLevel, quic::BidiStream, server::RequestStream}; +use h3::{quic::BidiStream, server::RequestStream}; use http::{Request, StatusCode}; use iroh::endpoint::Incoming; -use iroh_base::ticket::NodeTicket; +use iroh_tickets::endpoint::EndpointTicket; use tokio::{fs::File, io::AsyncReadExt}; use tracing::{debug, error, field, info, info_span, Instrument, Span}; @@ -47,12 +47,12 @@ async fn main() -> Result<()> { .alpns(vec![b"iroh+h3".to_vec()]) .bind() .await?; - info!("accepting connections on node: {}", ep.node_id()); + info!("accepting connections on endpoint: {}", ep.id()); - // Wait for direct addresses and a RelayUrl before printing a NodeTicket. + // Wait for direct addresses and a RelayUrl before printing a EndpointTicket. ep.online().await; - let ticket = NodeTicket::new(ep.node_addr()); - info!("node ticket: {ticket}"); + let ticket = EndpointTicket::new(ep.addr()); + info!("endpoint ticket: {ticket}"); info!("run e.g.: cargo run --example client -- iroh+h3://{ticket}/Cargo.toml"); // Handle incoming connections @@ -64,7 +64,7 @@ async fn main() -> Result<()> { error!("failed connection: {err:#}"); } } - .instrument(info_span!("conn", remote_node_id = field::Empty)) + .instrument(info_span!("conn", remote_endpoint_id = field::Empty)) }); } ep.close().await; @@ -74,15 +74,19 @@ async fn main() -> Result<()> { async fn handle_connection(incoming: Incoming, root: Arc>) -> Result<()> { let conn = incoming.accept()?.await?; - let remote_node_id = conn.remote_node_id()?; + let remote_endpoint_id = conn.remote_id()?; let span = Span::current(); - span.record("remote_node_id", remote_node_id.fmt_short().to_string()); + span.record( + "remote_endpoint_id", + remote_endpoint_id.fmt_short().to_string(), + ); info!("new connection"); let mut h3_conn = h3::server::Connection::new(h3_iroh::Connection::new(conn)).await?; loop { match h3_conn.accept().await { - Ok(Some((req, stream))) => { + Ok(Some(req_resolver)) => { + let (req, stream) = req_resolver.resolve_request().await?; info!(?req, "new request"); tokio::spawn({ let root = root.clone(); @@ -99,10 +103,11 @@ async fn handle_connection(incoming: Incoming, root: Arc>) -> Re } Err(err) => { error!("accept error: {err:#}"); - match err.get_error_level() { - ErrorLevel::ConnectionError => break, - ErrorLevel::StreamError => continue, - } + // TODO: + // match err { + // ErrorLevel::ConnectionError => break, + // ErrorLevel::StreamError => continue, + // } } } } diff --git a/h3-iroh/src/lib.rs b/h3-iroh/src/lib.rs index 3d5fb41..baf8b9e 100644 --- a/h3-iroh/src/lib.rs +++ b/h3-iroh/src/lib.rs @@ -8,17 +8,13 @@ use std::{ fmt::{self, Display}, future::Future, pin::Pin, - sync::Arc, task::{self, Poll}, }; -use bytes::{Buf, Bytes, BytesMut}; +use bytes::{Buf, Bytes}; use futures::{ready, stream, Stream, StreamExt}; -use h3::{ - ext::Datagram, - quic::{self, Error, StreamId, WriteBuf}, -}; -use iroh::endpoint::{self, ApplicationClose, ClosedStream, ReadDatagram}; +use h3::quic::{self, ConnectionErrorIncoming, StreamErrorIncoming, StreamId, WriteBuf}; +use iroh::endpoint::{self, ClosedStream, ReadDatagram}; pub use iroh::endpoint::{AcceptBi, AcceptUni, Endpoint, OpenBi, OpenUni, VarInt, WriteError}; use tokio_util::sync::ReusableBoxFuture; use tracing::instrument; @@ -75,24 +71,23 @@ impl fmt::Display for ConnectionError { } } -impl Error for ConnectionError { - fn is_timeout(&self) -> bool { - matches!(self.0, endpoint::ConnectionError::TimedOut) +impl From for ConnectionError { + fn from(e: endpoint::ConnectionError) -> Self { + Self(e) } +} - fn err_code(&self) -> Option { - match self.0 { - endpoint::ConnectionError::ApplicationClosed(ApplicationClose { - error_code, .. - }) => Some(error_code.into_inner()), - _ => None, - } +impl From for ConnectionErrorIncoming { + fn from(value: ConnectionError) -> Self { + ConnectionErrorIncoming::InternalError(value.to_string()) } } -impl From for ConnectionError { - fn from(e: endpoint::ConnectionError) -> Self { - Self(e) +impl From for StreamErrorIncoming { + fn from(value: ConnectionError) -> Self { + StreamErrorIncoming::ConnectionErrorIncoming { + connection_error: value.into(), + } } } @@ -106,7 +101,7 @@ pub enum SendDatagramError { /// The datagram was too large to be sent. TooLarge, /// Network error - ConnectionLost(Box), + ConnectionLost(Box), } impl fmt::Display for SendDatagramError { @@ -122,19 +117,6 @@ impl fmt::Display for SendDatagramError { impl std::error::Error for SendDatagramError {} -impl Error for SendDatagramError { - fn is_timeout(&self) -> bool { - false - } - - fn err_code(&self) -> Option { - match self { - Self::ConnectionLost(err) => err.err_code(), - _ => None, - } - } -} - impl From for SendDatagramError { fn from(value: endpoint::SendDatagramError) -> Self { match value { @@ -154,33 +136,40 @@ where { type RecvStream = RecvStream; type OpenStreams = OpenStreams; - type AcceptError = ConnectionError; #[instrument(skip_all, level = "trace")] fn poll_accept_bidi( &mut self, cx: &mut task::Context<'_>, - ) -> Poll, Self::AcceptError>> { + ) -> Poll> { let (send, recv) = match ready!(self.incoming_bi.poll_next_unpin(cx)) { - Some(x) => x?, - None => return Poll::Ready(Ok(None)), + Some(x) => x.map_err(ConnectionError::from)?, + None => { + return Poll::Ready(Err(ConnectionErrorIncoming::InternalError( + "no connection".into(), + ))); + } }; - Poll::Ready(Ok(Some(Self::BidiStream { + Poll::Ready(Ok(Self::BidiStream { send: Self::SendStream::new(send), recv: Self::RecvStream::new(recv), - }))) + })) } #[instrument(skip_all, level = "trace")] fn poll_accept_recv( &mut self, cx: &mut task::Context<'_>, - ) -> Poll, Self::AcceptError>> { + ) -> Poll> { let recv = match ready!(self.incoming_uni.poll_next_unpin(cx)) { - Some(x) => x?, - None => return Poll::Ready(Ok(None)), + Some(x) => x.map_err(ConnectionError::from)?, + None => { + return Poll::Ready(Err(ConnectionErrorIncoming::InternalError( + "no connection".into(), + ))); + } }; - Poll::Ready(Ok(Some(Self::RecvStream::new(recv)))) + Poll::Ready(Ok(Self::RecvStream::new(recv))) } fn opener(&self) -> Self::OpenStreams { @@ -198,21 +187,21 @@ where { type SendStream = SendStream; type BidiStream = BidiStream; - type OpenError = ConnectionError; #[instrument(skip_all, level = "trace")] fn poll_open_bidi( &mut self, cx: &mut task::Context<'_>, - ) -> Poll> { + ) -> Poll> { if self.opening_bi.is_none() { self.opening_bi = Some(Box::pin(stream::unfold(self.conn.clone(), |conn| async { Some((conn.clone().open_bi().await, conn)) }))); } - let (send, recv) = - ready!(self.opening_bi.as_mut().unwrap().poll_next_unpin(cx)).unwrap()?; + let (send, recv) = ready!(self.opening_bi.as_mut().unwrap().poll_next_unpin(cx)) + .unwrap() + .map_err(ConnectionError::from)?; Poll::Ready(Ok(Self::BidiStream { send: Self::SendStream::new(send), recv: RecvStream::new(recv), @@ -223,14 +212,16 @@ where fn poll_open_send( &mut self, cx: &mut task::Context<'_>, - ) -> Poll> { + ) -> Poll> { if self.opening_uni.is_none() { self.opening_uni = Some(Box::pin(stream::unfold(self.conn.clone(), |conn| async { Some((conn.open_uni().await, conn)) }))); } - let send = ready!(self.opening_uni.as_mut().unwrap().poll_next_unpin(cx)).unwrap()?; + let send = ready!(self.opening_uni.as_mut().unwrap().poll_next_unpin(cx)) + .unwrap() + .map_err(ConnectionError::from)?; Poll::Ready(Ok(Self::SendStream::new(send))) } @@ -243,42 +234,6 @@ where } } -impl quic::SendDatagramExt for Connection -where - B: Buf, -{ - type Error = SendDatagramError; - - #[instrument(skip_all, level = "trace")] - fn send_datagram(&mut self, data: Datagram) -> Result<(), SendDatagramError> { - // TODO investigate static buffer from known max datagram size - let mut buf = BytesMut::new(); - data.encode(&mut buf); - self.conn.send_datagram(buf.freeze())?; - - Ok(()) - } -} - -impl quic::RecvDatagramExt for Connection { - type Buf = Bytes; - - type Error = ConnectionError; - - #[inline] - #[instrument(skip_all, level = "trace")] - fn poll_accept_datagram( - &mut self, - cx: &mut task::Context<'_>, - ) -> Poll, Self::Error>> { - match ready!(self.datagrams.poll_next_unpin(cx)) { - Some(Ok(x)) => Poll::Ready(Ok(Some(x))), - Some(Err(e)) => Poll::Ready(Err(e.into())), - None => Poll::Ready(Ok(None)), - } - } -} - /// Stream opener backed by a Quinn connection /// /// Implements [`quic::OpenStreams`] using [`endpoint::Connection`], @@ -295,21 +250,21 @@ where { type SendStream = SendStream; type BidiStream = BidiStream; - type OpenError = ConnectionError; #[instrument(skip_all, level = "trace")] fn poll_open_bidi( &mut self, cx: &mut task::Context<'_>, - ) -> Poll> { + ) -> Poll> { if self.opening_bi.is_none() { self.opening_bi = Some(Box::pin(stream::unfold(self.conn.clone(), |conn| async { Some((conn.open_bi().await, conn)) }))); } - let (send, recv) = - ready!(self.opening_bi.as_mut().unwrap().poll_next_unpin(cx)).unwrap()?; + let (send, recv) = ready!(self.opening_bi.as_mut().unwrap().poll_next_unpin(cx)) + .unwrap() + .map_err(ConnectionError::from)?; Poll::Ready(Ok(Self::BidiStream { send: Self::SendStream::new(send), recv: RecvStream::new(recv), @@ -320,14 +275,16 @@ where fn poll_open_send( &mut self, cx: &mut task::Context<'_>, - ) -> Poll> { + ) -> Poll> { if self.opening_uni.is_none() { self.opening_uni = Some(Box::pin(stream::unfold(self.conn.clone(), |conn| async { Some((conn.open_uni().await, conn)) }))); } - let send = ready!(self.opening_uni.as_mut().unwrap().poll_next_unpin(cx)).unwrap()?; + let send = ready!(self.opening_uni.as_mut().unwrap().poll_next_unpin(cx)) + .unwrap() + .map_err(ConnectionError::from)?; Poll::Ready(Ok(Self::SendStream::new(send))) } @@ -376,12 +333,11 @@ where impl quic::RecvStream for BidiStream { type Buf = Bytes; - type Error = ReadError; fn poll_data( &mut self, cx: &mut task::Context<'_>, - ) -> Poll, Self::Error>> { + ) -> Poll, StreamErrorIncoming>> { self.recv.poll_data(cx) } @@ -398,13 +354,11 @@ impl quic::SendStream for BidiStream where B: Buf, { - type Error = SendStreamError; - - fn poll_ready(&mut self, cx: &mut task::Context<'_>) -> Poll> { + fn poll_ready(&mut self, cx: &mut task::Context<'_>) -> Poll> { self.send.poll_ready(cx) } - fn poll_finish(&mut self, cx: &mut task::Context<'_>) -> Poll> { + fn poll_finish(&mut self, cx: &mut task::Context<'_>) -> Poll> { self.send.poll_finish(cx) } @@ -412,7 +366,7 @@ where self.send.reset(reset_code) } - fn send_data>>(&mut self, data: D) -> Result<(), Self::Error> { + fn send_data>>(&mut self, data: D) -> Result<(), StreamErrorIncoming> { self.send.send_data(data) } @@ -428,7 +382,7 @@ where &mut self, cx: &mut task::Context<'_>, buf: &mut D, - ) -> Poll> { + ) -> Poll> { self.send.poll_send(cx, buf) } } @@ -461,13 +415,12 @@ impl RecvStream { impl quic::RecvStream for RecvStream { type Buf = Bytes; - type Error = ReadError; #[instrument(skip_all, level = "trace")] fn poll_data( &mut self, cx: &mut task::Context<'_>, - ) -> Poll, Self::Error>> { + ) -> Poll, StreamErrorIncoming>> { if let Some(mut stream) = self.stream.take() { self.read_chunk_fut.set(async move { let chunk = stream.read_chunk(usize::MAX, true).await; @@ -477,7 +430,10 @@ impl quic::RecvStream for RecvStream { let (stream, chunk) = ready!(self.read_chunk_fut.poll(cx)); self.stream = Some(stream); - Poll::Ready(Ok(chunk?.map(|c| c.bytes))) + let chunk = chunk + .map_err(|err| StreamErrorIncoming::Unknown(Box::new(err)))? + .map(|c| c.bytes); + Poll::Ready(Ok(chunk)) } #[instrument(skip_all, level = "trace")] @@ -525,37 +481,12 @@ impl fmt::Display for ReadError { } } -impl From for Arc { - fn from(e: ReadError) -> Self { - Arc::new(e) - } -} - impl From for ReadError { fn from(e: endpoint::ReadError) -> Self { Self(e) } } -impl Error for ReadError { - fn is_timeout(&self) -> bool { - matches!( - self.0, - endpoint::ReadError::ConnectionLost(endpoint::ConnectionError::TimedOut) - ) - } - - fn err_code(&self) -> Option { - match self.0 { - endpoint::ReadError::ConnectionLost(endpoint::ConnectionError::ApplicationClosed( - ApplicationClose { error_code, .. }, - )) => Some(error_code.into_inner()), - endpoint::ReadError::Reset(error_code) => Some(error_code.into_inner()), - _ => None, - } - } -} - /// Quinn-backed send stream /// /// Implements a [`quic::SendStream`] backed by a [`endpoint::SendStream`]. @@ -585,10 +516,8 @@ impl quic::SendStream for SendStream where B: Buf, { - type Error = SendStreamError; - #[instrument(skip_all, level = "trace")] - fn poll_ready(&mut self, cx: &mut task::Context<'_>) -> Poll> { + fn poll_ready(&mut self, cx: &mut task::Context<'_>) -> Poll> { if let Some(ref mut data) = self.writing { while data.has_remaining() { if let Some(mut stream) = self.stream.take() { @@ -604,7 +533,7 @@ where match res { Ok(cnt) => data.advance(cnt), Err(err) => { - return Poll::Ready(Err(SendStreamError::Write(err))); + return Poll::Ready(Err(StreamErrorIncoming::Unknown(Box::new(err)))); } } } @@ -614,8 +543,17 @@ where } #[instrument(skip_all, level = "trace")] - fn poll_finish(&mut self, _cx: &mut task::Context<'_>) -> Poll> { - Poll::Ready(self.stream.as_mut().unwrap().finish().map_err(|e| e.into())) + fn poll_finish( + &mut self, + _cx: &mut task::Context<'_>, + ) -> Poll> { + Poll::Ready( + self.stream + .as_mut() + .unwrap() + .finish() + .map_err(|e| StreamErrorIncoming::Unknown(Box::new(e))), + ) } #[instrument(skip_all, level = "trace")] @@ -628,9 +566,10 @@ where } #[instrument(skip_all, level = "trace")] - fn send_data>>(&mut self, data: D) -> Result<(), Self::Error> { + fn send_data>>(&mut self, data: D) -> Result<(), StreamErrorIncoming> { if self.writing.is_some() { - return Err(Self::Error::NotReady); + // TODO: what error? + // return Err(StreamErrorIncoming::StreamTerminated); } self.writing = Some(data.into()); Ok(()) @@ -657,7 +596,7 @@ where &mut self, cx: &mut task::Context<'_>, buf: &mut D, - ) -> Poll> { + ) -> Poll> { if self.writing.is_some() { // This signifies a bug in implementation panic!("poll_send called while send stream is not ready") @@ -671,7 +610,7 @@ where buf.advance(written); Poll::Ready(Ok(written)) } - Err(err) => Poll::Ready(Err(SendStreamError::Write(err))), + Err(err) => Poll::Ready(Err(StreamErrorIncoming::Unknown(Box::new(err)))), } } } @@ -719,32 +658,3 @@ impl From for SendStreamError { Self::StreamClosed(value) } } - -impl Error for SendStreamError { - fn is_timeout(&self) -> bool { - matches!( - self, - Self::Write(endpoint::WriteError::ConnectionLost( - endpoint::ConnectionError::TimedOut - )) - ) - } - - fn err_code(&self) -> Option { - match self { - Self::Write(endpoint::WriteError::Stopped(error_code)) => Some(error_code.into_inner()), - Self::Write(endpoint::WriteError::ConnectionLost( - endpoint::ConnectionError::ApplicationClosed(ApplicationClose { - error_code, .. - }), - )) => Some(error_code.into_inner()), - _ => None, - } - } -} - -impl From for Arc { - fn from(e: SendStreamError) -> Self { - Arc::new(e) - } -} From 9d45ca3eb71fc9d3fc43fac3a509ee7cdfcd56f7 Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Wed, 22 Oct 2025 18:49:52 +0200 Subject: [PATCH 2/9] feat(content-discovery): update to iroh@0.94 --- content-discovery/Cargo.lock | 1748 +++++++---------- content-discovery/Cargo.toml | 8 +- .../iroh-content-discovery-cli/Cargo.toml | 2 +- .../iroh-content-discovery-cli/src/args.rs | 6 +- .../iroh-content-discovery-cli/src/main.rs | 2 +- .../iroh-content-discovery/Cargo.toml | 2 +- .../iroh-content-discovery/src/client.rs | 36 +- .../iroh-content-discovery/src/protocol.rs | 12 +- .../iroh-content-tracker/Cargo.toml | 8 +- .../iroh-content-tracker/dial.log | 1 + .../iroh-content-tracker/probe.log | 1 + .../iroh-content-tracker/src/io.rs | 8 +- .../iroh-content-tracker/src/main.rs | 17 +- .../iroh-content-tracker/src/task_map.rs | 2 +- .../iroh-content-tracker/src/tracker.rs | 139 +- .../src/tracker/tables.rs | 24 +- .../iroh-content-tracker/tests/smoke.rs | 9 +- 17 files changed, 883 insertions(+), 1142 deletions(-) create mode 100644 content-discovery/iroh-content-tracker/dial.log create mode 100644 content-discovery/iroh-content-tracker/probe.log diff --git a/content-discovery/Cargo.lock b/content-discovery/Cargo.lock index f102a12..9d8ede8 100644 --- a/content-discovery/Cargo.lock +++ b/content-discovery/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] @@ -24,7 +24,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac8202ab55fcbf46ca829833f347a82a2a4ce0596f0304ac322c2d100030cd56" dependencies = [ "bytes", - "crypto-common 0.2.0-rc.4", + "crypto-common", "inout", ] @@ -70,12 +70,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -87,9 +81,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -102,9 +96,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -117,29 +111,29 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" dependencies = [ "backtrace", ] @@ -158,9 +152,9 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "async-compat" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bab94bde396a3f7b4962e396fdad640e241ed797d4d8d77fc8c237d14c58fc0" +checksum = "a1ba85bc55464dcbf728b56d97e119d673f4cf9062be330a9a26f3acf504a590" dependencies = [ "futures-core", "futures-io", @@ -171,13 +165,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] @@ -208,11 +202,12 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "attohttpc" -version = "0.24.1" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2" +checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9" dependencies = [ - "http 0.2.12", + "base64", + "http", "log", "url", ] @@ -225,9 +220,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backon" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302eaff5357a264a2c42f127ecb8bac761cf99749fc3dc95677e2743991f99e7" +checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef" dependencies = [ "fastrand", "gloo-timers", @@ -236,9 +231,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -246,7 +241,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] @@ -300,9 +295,9 @@ checksum = "597bb81c80a54b6a4381b23faba8d7774b144c94cbd1d6fe3f1329bd776554ab" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "blake3" @@ -317,15 +312,6 @@ dependencies = [ "constant_time_eq", ] -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - [[package]] name = "block-buffer" version = "0.11.0-rc.5" @@ -336,12 +322,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "bounded-integer" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "102dbef1187b1893e6dfe05a774e79fd52265f49f214f6879c8ff49f52c8188b" - [[package]] name = "btparse" version = "0.2.0" @@ -350,9 +330,9 @@ checksum = "387e80962b798815a2b5c4bcfdb6bf626fa922ffe9f74e373103b858738e9f31" [[package]] name = "bumpalo" -version = "3.18.1" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "byteorder" @@ -371,10 +351,11 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.27" +version = "1.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" dependencies = [ + "find-msvc-tools", "shlex", ] @@ -386,9 +367,9 @@ checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -410,17 +391,16 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -429,17 +409,17 @@ version = "0.5.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e12a13eb01ded5d32ee9658d94f553a19e804204f2dc811df69ab4d9e0cb8c7" dependencies = [ - "block-buffer 0.11.0-rc.5", - "crypto-common 0.2.0-rc.4", + "block-buffer", + "crypto-common", "inout", "zeroize", ] [[package]] name = "clap" -version = "4.5.40" +version = "4.5.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f" +checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623" dependencies = [ "clap_builder", "clap_derive", @@ -447,9 +427,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.40" +version = "4.5.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e" +checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0" dependencies = [ "anstream", "anstyle", @@ -459,33 +439,36 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.40" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "cobs" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" +dependencies = [ + "thiserror 2.0.17", +] [[package]] name = "color-backtrace" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2123a5984bd52ca861c66f66a9ab9883b27115c607f801f86c1bc2a84eb69f0f" +checksum = "e49b1973af2a47b5b44f7dd0a344598da95c872e1556b045607888784e973b91" dependencies = [ "backtrace", "btparse", @@ -610,16 +593,6 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - [[package]] name = "crypto-common" version = "0.2.0-rc.4" @@ -680,7 +653,7 @@ dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", - "digest 0.11.0-rc.3", + "digest", "fiat-crypto", "rand_core 0.9.3", "rustc_version", @@ -697,7 +670,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] @@ -713,27 +686,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9d8dd2f26c86b27a2a8ea2767ec7f9df7a89516e4794e54ac01ee618dda3aa4" dependencies = [ "const-oid", - "der_derive", "pem-rfc7468", "zeroize", ] -[[package]] -name = "der_derive" -version = "0.8.0-rc.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be645fee2afe89d293b96c19e4456e6ac69520fc9c6b8a58298550138e361ffe" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.103", -] - [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ "powerfmt", ] @@ -764,7 +725,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", "unicode-xid", ] @@ -776,7 +737,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", "unicode-xid", ] @@ -795,25 +756,15 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c" -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "crypto-common 0.1.6", - "subtle", -] - [[package]] name = "digest" version = "0.11.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dac89f8a64533a9b0eaa73a68e424db0fb1fd6271c74cc0125336a05f090568d" dependencies = [ - "block-buffer 0.11.0-rc.5", - "crypto-common 0.2.0-rc.4", + "block-buffer", + "const-oid", + "crypto-common", ] [[package]] @@ -845,7 +796,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] @@ -870,9 +821,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "ed25519" @@ -895,7 +846,7 @@ dependencies = [ "ed25519", "rand_core 0.9.3", "serde", - "sha2 0.11.0-rc.2", + "sha2", "signature", "subtle", "zeroize", @@ -922,27 +873,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.103", -] - -[[package]] -name = "enumflags2" -version = "0.7.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" -dependencies = [ - "enumflags2_derive", -] - -[[package]] -name = "enumflags2_derive" -version = "0.7.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] @@ -953,20 +884,14 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.12" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] -[[package]] -name = "fallible-iterator" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" - [[package]] name = "fastrand" version = "2.3.0" @@ -979,6 +904,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + [[package]] name = "flume" version = "0.11.1" @@ -1004,9 +935,9 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -1074,9 +1005,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "fastrand", "futures-core", @@ -1093,7 +1024,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] @@ -1159,26 +1090,16 @@ dependencies = [ [[package]] name = "generator" -version = "0.8.5" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" +checksum = "605183a538e3e2a9c1038635cc5c2d194e2ee8fd0d1b66b8349fad7dbacce5a2" dependencies = [ "cc", "cfg-if", "libc", "log", "rustversion", - "windows", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", + "windows 0.61.3", ] [[package]] @@ -1190,21 +1111,21 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasip2", "wasm-bindgen", ] @@ -1219,15 +1140,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - -[[package]] -name = "glob" -version = "0.3.2" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "gloo-timers" @@ -1243,16 +1158,16 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.3.1", + "http", "indexmap", "slab", "tokio", @@ -1271,9 +1186,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" [[package]] name = "hashbrown" @@ -1327,14 +1242,14 @@ dependencies = [ "futures-io", "futures-util", "h2", - "http 1.3.1", + "http", "idna", "ipnet", "once_cell", "rand 0.9.2", "ring", "rustls", - "thiserror 2.0.12", + "thiserror 2.0.17", "tinyvec", "tokio", "tokio-rustls", @@ -1359,37 +1274,12 @@ dependencies = [ "resolv-conf", "rustls", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tokio-rustls", "tracing", ] -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "hmac-sha1" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b05da5b9e5d4720bfb691eebb2b9d42da3570745da71eac8a1f5bb7e59aab88" -dependencies = [ - "hmac", - "sha1", -] - -[[package]] -name = "hmac-sha256" -version = "1.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad6880c8d4a9ebf39c6e8b77007ce223f646a4d21ce29d99f70cb16420545425" - [[package]] name = "home" version = "0.5.11" @@ -1399,23 +1289,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "hostname-validator" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f558a64ac9af88b5ba400d99b579451af0d39c6d360980045b91aac966d705e2" - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" version = "1.3.1" @@ -1434,7 +1307,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.3.1", + "http", ] [[package]] @@ -1445,7 +1318,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.3.1", + "http", "http-body", "pin-project-lite", ] @@ -1464,9 +1337,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "hybrid-array" @@ -1480,20 +1353,22 @@ dependencies = [ [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", "h2", - "http 1.3.1", + "http", "http-body", "httparse", "httpdate", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -1505,7 +1380,7 @@ version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "http 1.3.1", + "http", "hyper", "hyper-util", "rustls", @@ -1518,23 +1393,23 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.14" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ "base64", "bytes", "futures-channel", "futures-core", "futures-util", - "http 1.3.1", + "http", "http-body", "hyper", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.5.10", + "socket2 0.6.1", "tokio", "tower-service", "tracing", @@ -1542,9 +1417,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1552,7 +1427,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core", + "windows-core 0.62.2", ] [[package]] @@ -1652,9 +1527,9 @@ dependencies = [ [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -1673,15 +1548,15 @@ dependencies = [ [[package]] name = "igd-next" -version = "0.16.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06464e726471718db9ad3fefc020529fabcde03313a0fc3967510e2db5add12" +checksum = "516893339c97f6011282d5825ac94fc1c7aad5cad26bdc2d0cee068c0bf97f97" dependencies = [ "async-trait", "attohttpc", "bytes", "futures", - "http 1.3.1", + "http", "http-body-util", "hyper", "hyper-util", @@ -1694,12 +1569,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.9.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.16.0", ] [[package]] @@ -1762,9 +1637,9 @@ dependencies = [ [[package]] name = "iroh" -version = "0.93.2" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5edb130239eba2cabe28fa7a068b6f58ba0599823ca19149ee46e8a099892376" +checksum = "b9428cef1eafd2eac584269986d1949e693877ac12065b401dfde69f664b07ac" dependencies = [ "aead", "backon", @@ -1772,14 +1647,12 @@ dependencies = [ "cfg_aliases", "crypto_box", "data-encoding", - "der", "derive_more 2.0.1", "ed25519-dalek", - "futures-buffered", "futures-util", - "getrandom 0.3.3", + "getrandom 0.3.4", "hickory-resolver", - "http 1.3.1", + "http", "igd-next", "instant", "iroh-base", @@ -1788,11 +1661,11 @@ dependencies = [ "iroh-quinn-proto", "iroh-quinn-udp", "iroh-relay", - "n0-future 0.2.0", + "n0-future", "n0-snafu", "n0-watcher", "nested_enum_utils", - "netdev 0.36.0", + "netdev", "netwatch", "pin-project", "pkarr", @@ -1800,16 +1673,14 @@ dependencies = [ "portmapper", "rand 0.9.2", "reqwest", - "ring", "rustls", "rustls-pki-types", + "rustls-platform-verifier", "rustls-webpki", "serde", "smallvec", "snafu", "strum", - "stun-rs", - "surge-ping", "time", "tokio", "tokio-stream", @@ -1823,9 +1694,9 @@ dependencies = [ [[package]] name = "iroh-base" -version = "0.93.2" +version = "0.94.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7899388d105980b64c49dd421f9b3ff18fb1f0898983cb8f3d54dbb6772983da" +checksum = "7db6dfffe81a58daae02b72c7784c20feef5b5d3849b190ed1c96a8fa0b3cae8" dependencies = [ "curve25519-dalek", "data-encoding", @@ -1833,18 +1704,19 @@ dependencies = [ "ed25519-dalek", "n0-snafu", "nested_enum_utils", - "postcard", "rand_core 0.9.3", "serde", "snafu", "url", + "zeroize", + "zeroize_derive", ] [[package]] name = "iroh-blobs" -version = "0.95.0" +version = "0.96.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f437bfba05366e2e53e38b45eef254af0f14aa3dd8c8d1104e7a0669f7562fd4" +checksum = "b7a58699e59c2deb116df7420bc6755bf5f445603f71998f274a99f1985a5bc5" dependencies = [ "anyhow", "arrayvec", @@ -1861,14 +1733,15 @@ dependencies = [ "iroh-io", "iroh-metrics", "iroh-quinn", + "iroh-tickets", "irpc", - "n0-future 0.2.0", + "n0-future", "n0-snafu", "nested_enum_utils", "postcard", "rand 0.9.2", "range-collections", - "redb 2.6.3", + "redb", "ref-cast", "reflink-copy", "self_cell", @@ -1885,14 +1758,14 @@ name = "iroh-content-discovery" version = "0.3.0" dependencies = [ "anyhow", - "derive_more 1.0.0", + "derive_more 2.0.1", "ed25519-dalek", "futures-buffered", "hex", "iroh", "iroh-base", "iroh-blobs", - "n0-future 0.1.3", + "n0-future", "postcard", "serde", "serde-big-array", @@ -1908,7 +1781,7 @@ version = "0.3.0" dependencies = [ "anyhow", "clap", - "derive_more 1.0.0", + "derive_more 2.0.1", "futures", "iroh", "iroh-blobs", @@ -1926,7 +1799,7 @@ dependencies = [ "bao-tree", "bytes", "clap", - "derive_more 1.0.0", + "derive_more 2.0.1", "dirs-next", "futures", "hex", @@ -1936,8 +1809,8 @@ dependencies = [ "iroh-content-discovery", "postcard", "rand 0.9.2", - "rcgen 0.12.1", - "redb 1.5.1", + "rcgen", + "redb", "serde", "serde-big-array", "serde_json", @@ -1967,9 +1840,9 @@ dependencies = [ [[package]] name = "iroh-metrics" -version = "0.36.1" +version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090161e84532a0cb78ab13e70abb882b769ec67cf5a2d2dcea39bd002e1f7172" +checksum = "c84c167b59ae22f940e78eb347ca5f02aa25608e994cb5a7cc016ac2d5eada18" dependencies = [ "iroh-metrics-derive", "itoa", @@ -1982,14 +1855,14 @@ dependencies = [ [[package]] name = "iroh-metrics-derive" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a39de3779d200dadde3a27b9fbdb34389a2af1b85ea445afca47bf4d7672573" +checksum = "748d380f26f7c25307c0a7acd181b84b977ddc2a1b7beece1e5998623c323aa1" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] @@ -2006,7 +1879,7 @@ dependencies = [ "rustc-hash", "rustls", "socket2 0.5.10", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -2027,7 +1900,7 @@ dependencies = [ "rustls-pki-types", "rustls-platform-verifier", "slab", - "thiserror 2.0.12", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -2049,18 +1922,18 @@ dependencies = [ [[package]] name = "iroh-relay" -version = "0.93.2" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3f31a5830127df04d4d54cac933bf34246df6cc47944ff0e168e2e4f2e8d9e5" +checksum = "360e201ab1803201de9a125dd838f7a4d13e6ba3a79aeb46c7fbf023266c062e" dependencies = [ "blake3", "bytes", "cfg_aliases", "data-encoding", "derive_more 2.0.1", - "getrandom 0.3.3", + "getrandom 0.3.4", "hickory-resolver", - "http 1.3.1", + "http", "http-body-util", "hyper", "hyper-util", @@ -2069,7 +1942,7 @@ dependencies = [ "iroh-quinn", "iroh-quinn-proto", "lru 0.16.2", - "n0-future 0.2.0", + "n0-future", "n0-snafu", "nested_enum_utils", "num_enum", @@ -2080,7 +1953,6 @@ dependencies = [ "reqwest", "rustls", "rustls-pki-types", - "rustls-webpki", "serde", "serde_bytes", "sha1", @@ -2097,24 +1969,40 @@ dependencies = [ "z32", ] +[[package]] +name = "iroh-tickets" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7683c7819693eb8b3d61d1d45ffa92e2faeb07762eb0c3debb50ad795538d221" +dependencies = [ + "data-encoding", + "derive_more 2.0.1", + "iroh-base", + "n0-snafu", + "nested_enum_utils", + "postcard", + "serde", + "snafu", +] + [[package]] name = "irpc" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e3fc4aa2bc2c1002655fab4254390f016f8b9bb65390600f9d8b11f9bdac76d" +checksum = "52cf44fdb253f2a3e22e5ecfa8efa466929f8b7cdd4fc0f958f655406e8cdab6" dependencies = [ "anyhow", "futures-buffered", "futures-util", "iroh-quinn", "irpc-derive", - "n0-future 0.1.3", + "n0-future", "postcard", - "rcgen 0.13.2", + "rcgen", "rustls", "serde", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tokio-util", "tracing", @@ -2122,20 +2010,20 @@ dependencies = [ [[package]] name = "irpc-derive" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f5706d47257e3f40b9e7dbc1934942b5792cc6a8670b7dda8856c2f5709cf98" +checksum = "969df6effc474e714fb7e738eb9859aa22f40dc2280cadeab245817075c7f273" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.107", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itoa" @@ -2167,9 +2055,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -2183,15 +2071,15 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.174" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ "bitflags", "libc", @@ -2205,9 +2093,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" @@ -2217,25 +2105,24 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "litrs" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "loom" @@ -2283,36 +2170,30 @@ dependencies = [ "ed25519-dalek", "flume", "futures-lite", - "getrandom 0.3.3", + "getrandom 0.3.4", "lru 0.16.2", "serde", "serde_bencode", "serde_bytes", "sha1_smol", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", ] [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] -[[package]] -name = "md5" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" - [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "miniz_oxide" @@ -2325,60 +2206,38 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] name = "moka" -version = "0.12.10" +version = "0.12.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" +checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" dependencies = [ "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", - "loom", + "equivalent", "parking_lot", "portable-atomic", "rustc_version", "smallvec", "tagptr", - "thiserror 1.0.69", "uuid", ] [[package]] name = "n0-future" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb0e5d99e681ab3c938842b96fcb41bf8a7bb4bfdb11ccbd653a7e83e06c794" -dependencies = [ - "cfg_aliases", - "derive_more 1.0.0", - "futures-buffered", - "futures-lite", - "futures-util", - "js-sys", - "pin-project", - "send_wrapper", - "tokio", - "tokio-util", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-time", -] - -[[package]] -name = "n0-future" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d7dd42bd0114c9daa9c4f2255d692a73bba45767ec32cf62892af6fe5d31f6" +checksum = "439e746b307c1fd0c08771c3cafcd1746c3ccdb0d9c7b859d3caded366b6da76" dependencies = [ "cfg_aliases", "derive_more 1.0.0", @@ -2410,55 +2269,38 @@ dependencies = [ [[package]] name = "n0-watcher" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31462392a10d5ada4b945e840cbec2d5f3fee752b96c4b33eb41414d8f45c2a" +checksum = "34c65e127e06e5a2781b28df6a33ea474a7bddc0ac0cfea888bd20c79a1b6516" dependencies = [ - "derive_more 1.0.0", - "n0-future 0.1.3", + "derive_more 2.0.1", + "n0-future", "snafu", ] [[package]] name = "nested_enum_utils" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43fa9161ed44d30e9702fe42bd78693bceac0fed02f647da749f36109023d3a3" +checksum = "b1d5475271bdd36a4a2769eac1ef88df0f99428ea43e52dfd8b0ee5cb674695f" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", -] - -[[package]] -name = "netdev" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862209dce034f82a44c95ce2b5183730d616f2a68746b9c1959aa2572e77c0a1" -dependencies = [ - "dlopen2", - "ipnet", - "libc", - "netlink-packet-core", - "netlink-packet-route 0.22.0", - "netlink-sys", - "once_cell", - "system-configuration", - "windows-sys 0.59.0", + "syn 2.0.107", ] [[package]] name = "netdev" -version = "0.37.3" +version = "0.38.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa1e3eaf125c54c21e6221df12dd2a0a682784a068782dd564c836c0f281b6d" +checksum = "67ab878b4c90faf36dab10ea51d48c69ae9019bcca47c048a7c9b273d5d7a823" dependencies = [ "dlopen2", "ipnet", "libc", "netlink-packet-core", - "netlink-packet-route 0.22.0", + "netlink-packet-route", "netlink-sys", "once_cell", "system-configuration", @@ -2467,76 +2309,44 @@ dependencies = [ [[package]] name = "netlink-packet-core" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" +checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4" dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-utils", + "paste", ] [[package]] name = "netlink-packet-route" -version = "0.22.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0e7987b28514adf555dc1f9a5c30dfc3e50750bbaffb1aec41ca7b23dcd8e4" +checksum = "3ec2f5b6839be2a19d7fa5aab5bc444380f6311c2b693551cb80f45caaa7b5ef" dependencies = [ - "anyhow", "bitflags", - "byteorder", "libc", "log", "netlink-packet-core", - "netlink-packet-utils", ] [[package]] -name = "netlink-packet-route" -version = "0.24.0" +name = "netlink-proto" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56d83370a96813d7c977f8b63054f1162df6e5784f1c598d689236564fb5a6f2" +checksum = "b65d130ee111430e47eed7896ea43ca693c387f097dd97376bffafbf25812128" dependencies = [ - "anyhow", - "bitflags", - "byteorder", - "libc", + "bytes", + "futures", "log", "netlink-packet-core", - "netlink-packet-utils", + "netlink-sys", + "thiserror 2.0.17", ] [[package]] -name = "netlink-packet-utils" -version = "0.5.2" +name = "netlink-sys" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" -dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror 1.0.69", -] - -[[package]] -name = "netlink-proto" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" -dependencies = [ - "bytes", - "futures", - "log", - "netlink-packet-core", - "netlink-sys", - "thiserror 2.0.12", -] - -[[package]] -name = "netlink-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" +checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" dependencies = [ "bytes", "futures", @@ -2547,9 +2357,9 @@ dependencies = [ [[package]] name = "netwatch" -version = "0.9.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a63d76f52f3f15ebde3ca751a2ab73a33ae156662bc04383bac8e824f84e9bb" +checksum = "98d7ec7abdbfe67ee70af3f2002326491178419caea22254b9070e6ff0c83491" dependencies = [ "atomic-waker", "bytes", @@ -2558,34 +2368,28 @@ dependencies = [ "iroh-quinn-udp", "js-sys", "libc", - "n0-future 0.1.3", + "n0-future", "n0-watcher", "nested_enum_utils", - "netdev 0.37.3", + "netdev", "netlink-packet-core", - "netlink-packet-route 0.24.0", + "netlink-packet-route", "netlink-proto", "netlink-sys", "pin-project-lite", "serde", "snafu", - "socket2 0.6.0", + "socket2 0.6.1", "time", "tokio", "tokio-util", "tracing", "web-sys", - "windows", - "windows-result", + "windows 0.62.2", + "windows-result 0.4.1", "wmi", ] -[[package]] -name = "no-std-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" - [[package]] name = "ntimestamp" version = "1.0.0" @@ -2603,12 +2407,11 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "overload", - "winapi", + "windows-sys 0.61.2", ] [[package]] @@ -2628,30 +2431,31 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.3" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", + "rustversion", ] [[package]] name = "num_enum_derive" -version = "0.7.3" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] name = "object" -version = "0.36.7" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] @@ -2668,9 +2472,9 @@ dependencies = [ [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl-probe" @@ -2678,12 +2482,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "parking" version = "2.2.1" @@ -2692,9 +2490,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -2702,15 +2500,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] @@ -2721,12 +2519,12 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pem" -version = "3.0.5" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ "base64", - "serde", + "serde_core", ] [[package]] @@ -2740,53 +2538,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pest" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" -dependencies = [ - "memchr", - "thiserror 2.0.12", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.103", -] - -[[package]] -name = "pest_meta" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" -dependencies = [ - "pest", - "sha2 0.10.9", -] +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pharos" @@ -2815,7 +2569,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] @@ -2845,7 +2599,7 @@ dependencies = [ "ed25519-dalek", "futures-buffered", "futures-lite", - "getrandom 0.3.3", + "getrandom 0.3.4", "log", "lru 0.13.0", "mainline", @@ -2855,7 +2609,7 @@ dependencies = [ "serde", "sha1_smol", "simple-dns", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tracing", "url", @@ -2872,48 +2626,6 @@ dependencies = [ "spki", ] -[[package]] -name = "pnet_base" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cf6fb3ab38b68d01ab2aea03ed3d1132b4868fa4e06285f29f16da01c5f4c" -dependencies = [ - "no-std-net", -] - -[[package]] -name = "pnet_macros" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688b17499eee04a0408aca0aa5cba5fc86401d7216de8a63fdf7a4c227871804" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.103", -] - -[[package]] -name = "pnet_macros_support" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eea925b72f4bd37f8eab0f221bbe4c78b63498350c983ffa9dd4bcde7e030f56" -dependencies = [ - "pnet_base", -] - -[[package]] -name = "pnet_packet" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a005825396b7fe7a38a8e288dbc342d5034dac80c15212436424fef8ea90ba" -dependencies = [ - "glob", - "pnet_base", - "pnet_macros", - "pnet_macros_support", -] - [[package]] name = "poly1305" version = "0.9.0-rc.2" @@ -2944,9 +2656,9 @@ checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "portmapper" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f7313cafd74e95e6a358c1d0a495112f175502cc2e69870d0a5b12b6553059" +checksum = "d73aa9bd141e0ff6060fea89a5437883f3b9ceea1cda71c790b90e17d072a3b3" dependencies = [ "base64", "bytes", @@ -2964,7 +2676,7 @@ dependencies = [ "serde", "smallvec", "snafu", - "socket2 0.6.0", + "socket2 0.6.1", "time", "tokio", "tokio-util", @@ -2975,9 +2687,9 @@ dependencies = [ [[package]] name = "positioned-io" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8078ce4d22da5e8f57324d985cc9befe40c49ab0507a192d6be9e59584495c9" +checksum = "d4ec4b80060f033312b99b6874025d9503d2af87aef2dd4c516e253fbfcdada7" dependencies = [ "libc", "winapi", @@ -2985,9 +2697,9 @@ dependencies = [ [[package]] name = "postcard" -version = "1.1.1" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" dependencies = [ "cobs", "embedded-io 0.4.0", @@ -2999,20 +2711,20 @@ dependencies = [ [[package]] name = "postcard-derive" -version = "0.1.2" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0239fa9c1d225d4b7eb69925c25c5e082307a141e470573fbbe3a817ce6a7a37" +checksum = "e0232bd009a197ceec9cc881ba46f727fcd8060a2d8d6a9dde7a69030a6fe2bb" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.107", ] [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -3032,47 +2744,13 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "precis-core" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c2e7b31f132e0c6f8682cfb7bf4a5340dbe925b7986618d0826a56dfe0c8e56" -dependencies = [ - "precis-tools", - "ucd-parse", - "unicode-normalization", -] - -[[package]] -name = "precis-profiles" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4f67f78f50388f03494794766ba824a704db16fb5d400fe8d545fa7bc0d3f1" -dependencies = [ - "lazy_static", - "precis-core", - "precis-tools", - "unicode-normalization", -] - -[[package]] -name = "precis-tools" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cc1eb2d5887ac7bfd2c0b745764db89edb84b856e4214e204ef48ef96d10c4a" -dependencies = [ - "lazy_static", - "regex", - "ucd-parse", -] - [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.22.27", + "toml_edit", ] [[package]] @@ -3109,18 +2787,18 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] [[package]] name = "quinn" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases", @@ -3129,8 +2807,8 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.5.10", - "thiserror 2.0.12", + "socket2 0.6.1", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -3138,12 +2816,12 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.12" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", - "getrandom 0.3.3", + "getrandom 0.3.4", "lru-slab", "rand 0.9.2", "ring", @@ -3151,7 +2829,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -3159,37 +2837,27 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.12" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4e529991f949c5e25755532370b8af5d114acae52326361d68d47af64aa842" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.10", + "socket2 0.6.1", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] -[[package]] -name = "quoted-string-parser" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc75379cdb451d001f1cb667a9f74e8b355e9df84cc5193513cbe62b96fc5e9" -dependencies = [ - "pest", - "pest_derive", -] - [[package]] name = "r-efi" version = "5.3.0" @@ -3252,7 +2920,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", ] [[package]] @@ -3270,21 +2938,9 @@ dependencies = [ [[package]] name = "rcgen" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48406db8ac1f3cbc7dcdb56ec355343817958a356ff430259bb07baf7607e1e1" -dependencies = [ - "pem", - "ring", - "time", - "yasna", -] - -[[package]] -name = "rcgen" -version = "0.13.2" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" +checksum = "5fae430c6b28f1ad601274e78b7dffa0546de0b73b4cd32f46723c0c2a16f7a5" dependencies = [ "pem", "ring", @@ -3293,15 +2949,6 @@ dependencies = [ "yasna", ] -[[package]] -name = "redb" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7f82ecd6ba647a39dd1a7172b8a1cd9453c0adee6da20cb553d83a9a460fa5" -dependencies = [ - "libc", -] - [[package]] name = "redb" version = "2.6.3" @@ -3313,9 +2960,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.13" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ "bitflags", ] @@ -3333,97 +2980,64 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] name = "reflink-copy" -version = "0.1.26" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c81d000a2c524133cc00d2f92f019d399e57906c3b7119271a2495354fe895" +checksum = "23bbed272e39c47a095a5242218a67412a220006842558b03fe2935e8f3d7b92" dependencies = [ "cfg-if", "libc", "rustix", - "windows", -] - -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "windows 0.62.2", ] [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] -[[package]] -name = "regex-lite" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" - [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "reqwest" -version = "0.12.20" +version = "0.12.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabf4c97d9130e2bf606614eb937e86edac8292eaa6f422f995d7e8de1eb1813" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ "base64", "bytes", "futures-core", "futures-util", - "http 1.3.1", + "http", "http-body", "http-body-util", "hyper", @@ -3456,9 +3070,9 @@ dependencies = [ [[package]] name = "resolv-conf" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" +checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" [[package]] name = "ring" @@ -3476,9 +3090,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" @@ -3497,22 +3111,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.28" +version = "0.23.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" +checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" dependencies = [ "log", "once_cell", @@ -3525,9 +3139,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -3574,9 +3188,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.3" +version = "0.103.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" dependencies = [ "ring", "rustls-pki-types", @@ -3585,9 +3199,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" @@ -3616,11 +3230,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3647,9 +3261,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.2.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ "bitflags", "core-foundation 0.10.1", @@ -3660,9 +3274,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -3670,15 +3284,15 @@ dependencies = [ [[package]] name = "self_cell" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" +checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33" [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "send_wrapper" @@ -3688,10 +3302,11 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] @@ -3716,43 +3331,54 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.17" +version = "0.11.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" dependencies = [ "serde", + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] name = "serde_spanned" -version = "0.6.9" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -3779,13 +3405,13 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.6" +version = "0.11.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "c5e046edf639aa2e7afb285589e5405de2ef7e61d4b0ac1e30256e3eab911af9" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -3794,17 +3420,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - [[package]] name = "sha2" version = "0.11.0-rc.2" @@ -3813,7 +3428,7 @@ checksum = "d1e3878ab0f98e35b2df35fe53201d088299b41a6bb63e3e34dada2ac4abd924" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.11.0-rc.3", + "digest", ] [[package]] @@ -3833,9 +3448,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -3863,9 +3478,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "smallvec" @@ -3878,9 +3493,9 @@ dependencies = [ [[package]] name = "snafu" -version = "0.8.6" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320b01e011bf8d5d7a4a4a4be966d9160968935849c83b918827f6a435e7f627" +checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" dependencies = [ "backtrace", "snafu-derive", @@ -3888,14 +3503,14 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.8.6" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1961e2ef424c1424204d3a5d6975f934f56b6d50ff5732382d84ebf460e147f7" +checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] @@ -3910,12 +3525,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -3966,7 +3581,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f1447aab1592c131dec60f7d8cc0b2fb4042d0bf2c90c40f972c2c046b25d1b" dependencies = [ "base64ct", - "digest 0.11.0-rc.3", + "digest", "pem-rfc7468", "subtle", "zeroize", @@ -3982,7 +3597,7 @@ dependencies = [ "home", "rand_core 0.9.3", "sec1", - "sha2 0.11.0-rc.2", + "sha2", "signature", "ssh-cipher", "ssh-encoding", @@ -3992,9 +3607,9 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "strsim" @@ -4020,31 +3635,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.103", -] - -[[package]] -name = "stun-rs" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb921f10397d5669e1af6455e9e2d367bf1f9cebcd6b1dd1dc50e19f6a9ac2ac" -dependencies = [ - "base64", - "bounded-integer", - "byteorder", - "crc", - "enumflags2", - "fallible-iterator", - "hmac-sha1", - "hmac-sha256", - "hostname-validator", - "lazy_static", - "md5", - "paste", - "precis-core", - "precis-profiles", - "quoted-string-parser", - "rand 0.9.2", + "syn 2.0.107", ] [[package]] @@ -4053,22 +3644,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "surge-ping" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fda78103d8016bb25c331ddc54af634e801806463682cc3e549d335df644d95" -dependencies = [ - "hex", - "parking_lot", - "pnet_packet", - "rand 0.9.2", - "socket2 0.5.10", - "thiserror 1.0.69", - "tokio", - "tracing", -] - [[package]] name = "syn" version = "1.0.109" @@ -4082,9 +3657,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.103" +version = "2.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4307e30089d6fd6aff212f2da3a1f9e32f3223b1f010fb09b7c95f90f3ca1e8" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" dependencies = [ "proc-macro2", "quote", @@ -4119,7 +3694,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] @@ -4151,15 +3726,15 @@ checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" [[package]] name = "tempfile" -version = "3.20.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4182,11 +3757,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.17", ] [[package]] @@ -4197,18 +3772,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] @@ -4222,9 +3797,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "js-sys", @@ -4236,9 +3811,9 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "tinystr" @@ -4252,9 +3827,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -4267,38 +3842,37 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.10", + "socket2 0.6.1", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", @@ -4318,16 +3892,16 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", "futures-io", "futures-sink", "futures-util", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "pin-project-lite", "slab", "tokio", @@ -4335,16 +3909,16 @@ dependencies = [ [[package]] name = "tokio-websockets" -version = "0.12.0" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f29ba084eb43becc9864ba514b4a64f5f65b82f9a6ffbafa5436c1c80605f03" +checksum = "b1b6348ebfaaecd771cecb69e832961d277f59845d4220a584701f72728152b7" dependencies = [ "base64", "bytes", "futures-core", "futures-sink", - "getrandom 0.3.3", - "http 1.3.1", + "getrandom 0.3.4", + "http", "httparse", "rand 0.9.2", "ring", @@ -4357,49 +3931,55 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.8" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" dependencies = [ - "serde", + "indexmap", + "serde_core", "serde_spanned", "toml_datetime", - "toml_edit 0.19.15", + "toml_parser", + "toml_writer", + "winnow", ] [[package]] name = "toml_datetime" -version = "0.6.11" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" dependencies = [ - "serde", + "serde_core", ] [[package]] name = "toml_edit" -version = "0.19.15" +version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" dependencies = [ "indexmap", - "serde", - "serde_spanned", "toml_datetime", - "winnow 0.5.40", + "toml_parser", + "winnow", ] [[package]] -name = "toml_edit" -version = "0.22.27" +name = "toml_parser" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.7.11", + "winnow", ] +[[package]] +name = "toml_writer" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" + [[package]] name = "tower" version = "0.5.2" @@ -4424,7 +4004,7 @@ dependencies = [ "bitflags", "bytes", "futures-util", - "http 1.3.1", + "http", "http-body", "iri-string", "pin-project-lite", @@ -4465,7 +4045,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] @@ -4501,14 +4081,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", @@ -4534,39 +4114,15 @@ dependencies = [ [[package]] name = "typenum" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" - -[[package]] -name = "ucd-parse" -version = "0.1.13" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06ff81122fcbf4df4c1660b15f7e3336058e7aec14437c9f85c6b31a0f279b9" -dependencies = [ - "regex-lite", -] - -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "unicode-ident" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" - -[[package]] -name = "unicode-normalization" -version = "0.1.24" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" -dependencies = [ - "tinyvec", -] +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" [[package]] name = "unicode-xid" @@ -4580,7 +4136,7 @@ version = "0.6.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a55be643b40a21558f44806b53ee9319595bc7ca6896372e4e08e5d7d83c9cd6" dependencies = [ - "crypto-common 0.2.0-rc.4", + "crypto-common", "subtle", ] @@ -4592,9 +4148,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -4616,11 +4172,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.17.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "js-sys", "wasm-bindgen", ] @@ -4663,45 +4219,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -4712,9 +4269,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4722,22 +4279,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] @@ -4757,9 +4314,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -4781,32 +4338,32 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75c7f0ef91146ebfb530314f5f1d24528d7f0767efbfd31dce919275413e393e" dependencies = [ - "webpki-root-certs 1.0.1", + "webpki-root-certs 1.0.3", ] [[package]] name = "webpki-root-certs" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86138b15b2b7d561bc4469e77027b8dd005a43dc502e9031d1f5afc8ce1f280e" +checksum = "05d651ec480de84b762e7be71e6efa7461699c19d9e2c272c8d93455f567786e" dependencies = [ "rustls-pki-types", ] [[package]] name = "webpki-roots" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2853738d1cc4f2da3a225c18ec6c3721abb31961096e9dbf5ab35fa88b19cfdb" +checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" dependencies = [ "rustls-pki-types", ] [[package]] name = "widestring" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" [[package]] name = "winapi" @@ -4826,11 +4383,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4845,11 +4402,23 @@ version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-collections", - "windows-core", - "windows-future", - "windows-link", - "windows-numerics", + "windows-collections 0.2.0", + "windows-core 0.61.2", + "windows-future 0.2.1", + "windows-link 0.1.3", + "windows-numerics 0.2.0", +] + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections 0.3.2", + "windows-core 0.62.2", + "windows-future 0.3.2", + "windows-numerics 0.3.1", ] [[package]] @@ -4858,7 +4427,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ - "windows-core", + "windows-core 0.61.2", +] + +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core 0.62.2", ] [[package]] @@ -4869,9 +4447,22 @@ checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement", "windows-interface", - "windows-link", - "windows-result", - "windows-strings", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", ] [[package]] @@ -4880,31 +4471,42 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ - "windows-core", - "windows-link", - "windows-threading", + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading 0.1.0", +] + +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core 0.62.2", + "windows-link 0.2.1", + "windows-threading 0.2.1", ] [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] @@ -4913,14 +4515,30 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + [[package]] name = "windows-numerics" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ - "windows-core", - "windows-link", + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-numerics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" +dependencies = [ + "windows-core 0.62.2", + "windows-link 0.2.1", ] [[package]] @@ -4929,7 +4547,16 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -4938,7 +4565,16 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -4977,6 +4613,24 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -5016,20 +4670,46 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + [[package]] name = "windows-threading" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -5050,6 +4730,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -5068,6 +4754,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -5086,12 +4778,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -5110,6 +4814,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -5128,6 +4838,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -5146,6 +4862,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -5165,19 +4887,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "winnow" -version = "0.5.40" +name = "windows_x86_64_msvc" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] @@ -5193,27 +4912,24 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "wmi" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3de777dce4cbcdc661d5d18e78ce4b46a37adc2bb7c0078a556c7f07bcce2f" +checksum = "120d8c2b6a7c96c27bf4a7947fd7f02d73ca7f5958b8bd72a696e46cb5521ee6" dependencies = [ "chrono", "futures", "log", "serde", - "thiserror 2.0.12", - "windows", - "windows-core", + "thiserror 2.0.17", + "windows 0.62.2", + "windows-core 0.62.2", ] [[package]] @@ -5235,7 +4951,7 @@ dependencies = [ "pharos", "rustc_version", "send_wrapper", - "thiserror 2.0.12", + "thiserror 2.0.17", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -5243,9 +4959,9 @@ dependencies = [ [[package]] name = "xml-rs" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" +checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" [[package]] name = "xmltree" @@ -5285,7 +5001,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", "synstructure", ] @@ -5297,22 +5013,22 @@ checksum = "2164e798d9e3d84ee2c91139ace54638059a3b23e361f5c11781c2c6459bde0f" [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] [[package]] @@ -5332,15 +5048,29 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] [[package]] name = "zerotrie" @@ -5355,9 +5085,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -5372,5 +5102,5 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.103", + "syn 2.0.107", ] diff --git a/content-discovery/Cargo.toml b/content-discovery/Cargo.toml index dad9b8d..aa9d6e9 100644 --- a/content-discovery/Cargo.toml +++ b/content-discovery/Cargo.toml @@ -26,13 +26,13 @@ missing_debug_implementations = "warn" unused-async = "warn" [workspace.dependencies] -iroh = { version ="0.93", features = ["discovery-pkarr-dht"] } -iroh-base = "0.93" -iroh-blobs = { version = "0.95" } +iroh = { version ="0.94", features = ["discovery-pkarr-dht"] } +iroh-base = "0.94" +iroh-blobs = "0.96" # explicitly specified until iroh minimal crates issues are solved, see https://github.com/n0-computer/iroh/pull/3255 tokio = { version = "1.44.1" } tokio-stream = { version = "0.1.17" } postcard = { version = "1", default-features = false } anyhow = { version = "1", default-features = false } -n0-future = { version = "0.1.3" } +n0-future = { version = "0.3" } futures-buffered = { version = "0.2.11" } diff --git a/content-discovery/iroh-content-discovery-cli/Cargo.toml b/content-discovery/iroh-content-discovery-cli/Cargo.toml index d94fb8d..1da3f21 100644 --- a/content-discovery/iroh-content-discovery-cli/Cargo.toml +++ b/content-discovery/iroh-content-discovery-cli/Cargo.toml @@ -15,6 +15,6 @@ anyhow = { workspace = true, features = ["backtrace"] } futures = { version = "0.3.25" } clap = { version = "4", features = ["derive"] } tempfile = { version = "3.4" } -derive_more = { version = "1.0.0-beta.1", features = ["debug", "display", "from", "try_into"] } +derive_more = { version = "2", features = ["debug", "display", "from", "try_into"] } tracing-subscriber = { version = "0.3", features = ["env-filter"] } tokio = { version = "1", features = ["io-util", "rt"] } diff --git a/content-discovery/iroh-content-discovery-cli/src/args.rs b/content-discovery/iroh-content-discovery-cli/src/args.rs index 75b78db..ba4748b 100644 --- a/content-discovery/iroh-content-discovery-cli/src/args.rs +++ b/content-discovery/iroh-content-discovery-cli/src/args.rs @@ -2,7 +2,7 @@ use std::{fmt::Display, str::FromStr}; use clap::{Parser, Subcommand}; -use iroh::NodeId; +use iroh::EndpointId; use iroh_blobs::{ticket::BlobTicket, Hash, HashAndFormat}; #[derive(Parser, Debug)] @@ -69,7 +69,7 @@ impl FromStr for ContentArg { pub struct AnnounceArgs { /// trackers to announce to #[clap(long, required = true)] - pub tracker: Vec, + pub tracker: Vec, /// The content to announce. /// @@ -87,7 +87,7 @@ pub struct AnnounceArgs { pub struct QueryArgs { /// the tracker to query #[clap(long, required = true)] - pub tracker: Vec, + pub tracker: Vec, /// The content to find hosts for. pub content: ContentArg, diff --git a/content-discovery/iroh-content-discovery-cli/src/main.rs b/content-discovery/iroh-content-discovery-cli/src/main.rs index 9c6dd38..5e57408 100644 --- a/content-discovery/iroh-content-discovery-cli/src/main.rs +++ b/content-discovery/iroh-content-discovery-cli/src/main.rs @@ -23,7 +23,7 @@ async fn announce(args: AnnounceArgs) -> anyhow::Result<()> { }; let content = args.content.hash_and_format(); if let ContentArg::Ticket(ticket) = &args.content { - if ticket.node_addr().node_id != key.public() { + if ticket.addr().id != key.public() { bail!("ticket does not match the announce secret"); } } diff --git a/content-discovery/iroh-content-discovery/Cargo.toml b/content-discovery/iroh-content-discovery/Cargo.toml index f4876e7..d4dfb9c 100644 --- a/content-discovery/iroh-content-discovery/Cargo.toml +++ b/content-discovery/iroh-content-discovery/Cargo.toml @@ -14,7 +14,7 @@ license = "MIT OR Apache-2.0" iroh-base = { workspace = true } iroh-blobs = { workspace = true } serde = { version = "1", features = ["derive"] } -derive_more = { version = "1.0.0-beta.1", features = ["debug", "display", "from", "try_into"] } +derive_more = { version = "2", features = ["debug", "display", "from", "try_into"] } serde-big-array = "0.5.1" hex = "0.4.3" anyhow = { workspace = true, features = ["backtrace"] } diff --git a/content-discovery/iroh-content-discovery/src/client.rs b/content-discovery/iroh-content-discovery/src/client.rs index 8527da5..79784ce 100644 --- a/content-discovery/iroh-content-discovery/src/client.rs +++ b/content-discovery/iroh-content-discovery/src/client.rs @@ -2,7 +2,7 @@ use std::{future::Future, result}; use iroh::{ endpoint::{ConnectOptions, Connection}, - Endpoint, NodeId, + Endpoint, EndpointId, }; use n0_future::{BufferedStreamExt, Stream, StreamExt}; use snafu::prelude::*; @@ -62,9 +62,9 @@ pub enum Error { backtrace: snafu::Backtrace, }, - #[snafu(display("Failed to get remote node id: {}", source))] - RemoteNodeId { - source: iroh::endpoint::RemoteNodeIdError, + #[snafu(display("Failed to get remote endpoint id: {}", source))] + RemoteEndpointId { + source: iroh::endpoint::RemoteEndpointIdError, backtrace: snafu::Backtrace, }, } @@ -74,10 +74,10 @@ pub type Result = result::Result; /// Announce to multiple trackers in parallel. pub fn announce_all( endpoint: Endpoint, - trackers: impl IntoIterator, + trackers: impl IntoIterator, signed_announce: SignedAnnounce, announce_parallelism: usize, -) -> impl Stream)> { +) -> impl Stream)> { n0_future::stream::iter(trackers) .map(move |tracker| { let endpoint = endpoint.clone(); @@ -91,31 +91,31 @@ pub fn announce_all( /// Announce to a tracker. /// -/// You can only announce content you yourself claim to have, to avoid spamming other nodes. +/// You can only announce content you yourself claim to have, to avoid spamming other endpoints. /// /// `endpoint` is the iroh endpoint to use for announcing. -/// `tracker` is the node id of the tracker to announce to. It must understand the [crate::ALPN] protocol. +/// `tracker` is the endpoint id of the tracker to announce to. It must understand the [crate::ALPN] protocol. /// `content` is the content to announce. /// `kind` is the kind of the announcement. We can claim to have the complete data or only some of it. pub async fn announce( endpoint: &Endpoint, - node_id: NodeId, + endpoint_id: EndpointId, signed_announce: SignedAnnounce, ) -> Result<()> { let connecting = endpoint - .connect_with_opts(node_id, ALPN, ConnectOptions::default()) + .connect_with_opts(endpoint_id, ALPN, ConnectOptions::default()) .await .context(ConnectSnafu)?; match connecting.into_0rtt() { Ok((connection, zero_rtt_accepted)) => { - trace!("connected to tracker using possibly 0-rtt: {node_id}"); + trace!("connected to tracker using possibly 0-rtt: {endpoint_id}"); announce_conn(&connection, signed_announce, zero_rtt_accepted).await?; wait_for_session_ticket(connection); Ok(()) } Err(connecting) => { let connection = connecting.await.context(Connect1RttSnafu)?; - trace!("connected to tracker using 1-rtt: {node_id}"); + trace!("connected to tracker using 1-rtt: {endpoint_id}"); announce_conn(&connection, signed_announce, async { true }).await?; connection.close(0u32.into(), b""); Ok(()) @@ -159,23 +159,23 @@ pub async fn announce_conn( /// A single query to a tracker, using 0-rtt if possible. pub async fn query( endpoint: &Endpoint, - node_id: NodeId, + endpoint_id: EndpointId, args: Query, ) -> Result> { let connecting = endpoint - .connect_with_opts(node_id, ALPN, ConnectOptions::default()) + .connect_with_opts(endpoint_id, ALPN, ConnectOptions::default()) .await .context(ConnectSnafu)?; let result = match connecting.into_0rtt() { Ok((connection, zero_rtt_accepted)) => { - trace!("connected to tracker using possibly 0-rtt: {node_id}"); + trace!("connected to tracker using possibly 0-rtt: {endpoint_id}"); let res = query_conn(&connection, args, zero_rtt_accepted).await?; wait_for_session_ticket(connection); res } Err(connecting) => { let connection = connecting.await.context(Connect1RttSnafu)?; - trace!("connected to tracker using 1-rtt: {node_id}"); + trace!("connected to tracker using 1-rtt: {endpoint_id}"); let res = query_conn(&connection, args, async { true }).await?; connection.close(0u32.into(), b""); res @@ -190,7 +190,7 @@ pub async fn query( /// use [`query`] instead. pub fn query_all( endpoint: Endpoint, - trackers: impl IntoIterator, + trackers: impl IntoIterator, args: Query, query_parallelism: usize, ) -> impl Stream> { @@ -223,7 +223,7 @@ pub async fn query_conn( let request = postcard::to_stdvec(&request).context(SerializeRequestSnafu)?; trace!( "connected to {:?}", - connection.remote_node_id().context(RemoteNodeIdSnafu)? + connection.remote_id().context(RemoteEndpointIdSnafu)? ); trace!("opened bi stream"); let (mut send, recv) = connection.open_bi().await.context(OpenStreamSnafu)?; diff --git a/content-discovery/iroh-content-discovery/src/protocol.rs b/content-discovery/iroh-content-discovery/src/protocol.rs index 92ad3a8..7043425 100644 --- a/content-discovery/iroh-content-discovery/src/protocol.rs +++ b/content-discovery/iroh-content-discovery/src/protocol.rs @@ -5,7 +5,7 @@ use std::{ time::{Duration, SystemTime}, }; -use iroh::NodeId; +use iroh::EndpointId; use iroh_blobs::HashAndFormat; use serde::{Deserialize, Serialize}; use serde_big_array::BigArray; @@ -89,7 +89,7 @@ impl From for SystemTime { #[derive(Debug, Clone, Copy, Serialize, Deserialize)] pub struct Announce { /// The peer that supposedly has the data. - pub host: NodeId, + pub host: EndpointId, /// The content that the peer claims to have. pub content: HashAndFormat, /// The kind of the announcement. @@ -121,12 +121,8 @@ impl Deref for SignedAnnounce { #[derive(Debug, Snafu)] pub enum VerifyError { - SignatureError { - source: ed25519_dalek::SignatureError, - }, - SerializationError { - source: postcard::Error, - }, + SignatureError { source: iroh_base::SignatureError }, + SerializationError { source: postcard::Error }, } impl SignedAnnounce { diff --git a/content-discovery/iroh-content-tracker/Cargo.toml b/content-discovery/iroh-content-tracker/Cargo.toml index f9365e0..f278411 100644 --- a/content-discovery/iroh-content-tracker/Cargo.toml +++ b/content-discovery/iroh-content-tracker/Cargo.toml @@ -12,7 +12,7 @@ anyhow = { workspace = true, features = ["backtrace"] } # needs to keep updated with the dep of iroh-blobs bao-tree = { version = "0.15.1", features = ["tokio_fsm"], default-features = false } bytes = "1" -derive_more = { version = "1", features = ["debug", "display", "from", "try_into"] } +derive_more = { version = "2", features = ["debug", "display", "from", "try_into"] } dirs-next = "2" futures = "0.3.25" hex = "0.4.3" @@ -21,14 +21,14 @@ iroh = { workspace = true } iroh-blobs = { workspace = true } postcard = { workspace = true, features = ["alloc", "use-std"] } rand = "0.9.2" -rcgen = "0.12.0" -redb = "1.5.0" +rcgen = "0.14" +redb = "2.6" serde = { version = "1", features = ["derive"] } serde_json = "1.0.107" tempfile = "3.4" tokio = { version = "1", features = ["io-util", "rt"] } tokio-util = { version = "0.7", features = ["io-util", "io", "rt"] } -toml = "0.7.3" +toml = "0.9" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } ttl_cache = "0.5.1" diff --git a/content-discovery/iroh-content-tracker/dial.log b/content-discovery/iroh-content-tracker/dial.log new file mode 100644 index 0000000..5386b9b --- /dev/null +++ b/content-discovery/iroh-content-tracker/dial.log @@ -0,0 +1 @@ +1761151767.655932,5c6c7ab5fa7f1f337fd19adce7189fbe3ec219cfffac221fd1cc7f158715fbed,0.213470,ok diff --git a/content-discovery/iroh-content-tracker/probe.log b/content-discovery/iroh-content-tracker/probe.log new file mode 100644 index 0000000..0a3e592 --- /dev/null +++ b/content-discovery/iroh-content-tracker/probe.log @@ -0,0 +1 @@ +1761151767.665611,5c6c7ab5fa7f1f337fd19adce7189fbe3ec219cfffac221fd1cc7f158715fbed,1edabea435e688e8227aa2497e1d1c8ff311d6bab560c9f28d70b8d4845c8a84,Complete,0.009327,ok diff --git a/content-discovery/iroh-content-tracker/src/io.rs b/content-discovery/iroh-content-tracker/src/io.rs index a7bfc0b..acc05d3 100644 --- a/content-discovery/iroh-content-tracker/src/io.rs +++ b/content-discovery/iroh-content-tracker/src/io.rs @@ -8,7 +8,7 @@ use std::{ }; use anyhow::Context; -use iroh::NodeId; +use iroh::EndpointId; use iroh_blobs::{get::Stats, HashAndFormat}; use iroh_content_discovery::protocol::{AnnounceKind, SignedAnnounce}; use serde::{de::DeserializeOwned, Deserialize, Serialize}; @@ -28,7 +28,7 @@ pub const TRACKER_HOME_ENV_VAR: &str = "IROH_TRACKER_HOME"; /// This should be easy to edit manually when serialized as json or toml. #[derive(Debug, Clone, Default, Serialize, Deserialize)] pub struct AnnounceData( - pub BTreeMap>>, + pub BTreeMap>>, ); pub fn save_to_file(data: impl Serialize, path: &Path) -> anyhow::Result<()> { @@ -89,7 +89,7 @@ pub fn load_from_file(path: &Path) -> anyhow::Res pub fn log_connection_attempt( path: &Option, - host: &NodeId, + host: &EndpointId, t0: Instant, outcome: &Result, ) -> anyhow::Result<()> { @@ -121,7 +121,7 @@ pub fn log_connection_attempt( pub fn log_probe_attempt( path: &Option, - host: &NodeId, + host: &EndpointId, content: &HashAndFormat, kind: ProbeKind, t0: Instant, diff --git a/content-discovery/iroh-content-tracker/src/main.rs b/content-discovery/iroh-content-tracker/src/main.rs index ba21f4d..f5a574c 100644 --- a/content-discovery/iroh-content-tracker/src/main.rs +++ b/content-discovery/iroh-content-tracker/src/main.rs @@ -48,9 +48,12 @@ async fn create_endpoint( ipv6_addr: Option, ) -> Result { let mut builder = iroh::Endpoint::builder() - .secret_key(key) - .discovery_dht() - .discovery_n0() + .secret_key(key.clone()) + .discovery( + iroh::discovery::pkarr::dht::DhtDiscovery::builder() + .secret_key(key) + .build()?, + ) .alpns(vec![ALPN.to_vec()]); if let Some(ipv4_addr) = ipv4_addr { builder = builder.bind_addr_v4(ipv4_addr); @@ -96,8 +99,8 @@ async fn server(args: Args) -> anyhow::Result<()> { let db = Tracker::new(options, endpoint.clone())?; db.dump().await?; endpoint.online().await; - let addr = endpoint.node_addr(); - println!("tracker addr: {}\n", addr.node_id); + let addr = endpoint.addr(); + println!("tracker addr: {}\n", addr.id); info!("listening on {:?}", addr); // let db2 = db.clone(); let db3 = db.clone(); @@ -154,8 +157,8 @@ pub async fn load_secret_key(key_path: PathBuf) -> anyhow::Result, - /// Tasks that probe nodes. There is one task per node, and it probes all content items for that peer. - probe_tasks: TaskMap, + /// Tasks that probe endpoints. There is one task per endpoint, and it probes all content items for that peer. + probe_tasks: TaskMap, /// The iroh endpoint, which is used to accept incoming connections and to probe peers. endpoint: Endpoint, /// To spawn non-send futures. @@ -121,13 +121,13 @@ enum ActorMessage { hash: Hash, sizes: (HashSeq, Arc<[u64]>), }, - GetContentForNode { - node: NodeId, + GetContentForEndpoint { + endpoint: EndpointId, #[debug(skip)] tx: oneshot::Sender>>, }, StoreProbeResult { - node: NodeId, + endpoint: EndpointId, results: Vec<(HashAndFormat, AnnounceKind, anyhow::Result)>, now: AbsoluteTime, }, @@ -159,7 +159,7 @@ impl ActorMessage { Self::Dump | Self::Stop | Self::Query { .. } - | Self::GetContentForNode { .. } + | Self::GetContentForEndpoint { .. } | Self::GetDistinctContent { .. } | Self::GetSize { .. } | Self::GetSizes { .. } => MessageCategory::ReadOnly, @@ -170,7 +170,7 @@ impl ActorMessage { #[derive(derive_more::Debug)] struct GetDistinctContentResponse { content: BTreeSet, - nodes: BTreeSet, + endpoints: BTreeSet, } #[derive(derive_more::Debug)] @@ -280,8 +280,8 @@ impl Actor { let sizes = self.state.collections.get(&hash).cloned(); tx.send(Ok(sizes)).ok(); } - ActorMessage::GetContentForNode { node, tx } => { - let content = self.get_content_for_node(tables, node); + ActorMessage::GetContentForEndpoint { endpoint, tx } => { + let content = self.get_content_for_endpoint(tables, endpoint); tx.send(content).ok(); } ActorMessage::GetDistinctContent { tx } => { @@ -315,8 +315,12 @@ impl Actor { ActorMessage::SetSizes { hash, sizes } => { self.state.collections.insert(hash, sizes); } - ActorMessage::StoreProbeResult { node, results, now } => { - self.store_probe_result(tables, node, results, now).ok(); + ActorMessage::StoreProbeResult { + endpoint, + results, + now, + } => { + self.store_probe_result(tables, endpoint, results, now).ok(); } ActorMessage::Gc { tx } => { self.gc(tables).ok(); @@ -335,21 +339,21 @@ impl Actor { /// Get the content that is supposedly available, grouped by peers /// /// Todo: this is a full table scan, could be optimized. - fn get_content_for_node( + fn get_content_for_endpoint( &self, tables: &impl ReadableTables, - node: NodeId, + endpoint: EndpointId, ) -> anyhow::Result> { - let mut content_for_node = BTreeMap::::new(); + let mut content_for_endpoint = BTreeMap::::new(); for entry in tables.announces().iter()? { let (path, ..) = entry.unwrap(); let path = path.value(); - if path.node() != node { + if path.endpoint() != endpoint { continue; } - content_for_node.insert(path.announce_kind(), path.content()); + content_for_endpoint.insert(path.announce_kind(), path.content()); } - Ok(content_for_node) + Ok(content_for_endpoint) } fn handle_announce( @@ -371,7 +375,7 @@ impl Actor { .transpose()? .is_none(); let prev = tables.announces.get(path)?.map(|x| x.value()); - // new_host_for_content is true if this is a new host for this path (content, kind, node), false if it is just an update + // new_host_for_content is true if this is a new host for this path (content, kind, endpoint), false if it is just an update // if this is true we need to start probing it // // update is true if the new announce is newer than the previous one @@ -438,13 +442,13 @@ impl Actor { fn store_probe_result( &mut self, tables: &mut Tables, - node: NodeId, + endpoint: EndpointId, results: Vec<(HashAndFormat, AnnounceKind, anyhow::Result)>, now: AbsoluteTime, ) -> anyhow::Result<()> { for (content, announce_kind, result) in &results { if result.is_ok() { - let path = AnnouncePath::new(*content, *announce_kind, node); + let path = AnnouncePath::new(*content, *announce_kind, endpoint); tables.probes.insert(path, ProbeValue::from(now))?; } } @@ -473,14 +477,14 @@ impl Actor { tables: &impl ReadableTables, ) -> anyhow::Result { let mut content = BTreeSet::new(); - let mut nodes = BTreeSet::new(); + let mut endpoints = BTreeSet::new(); for entry in tables.announces().iter()? { let (path, _) = entry?; let path = path.value(); content.insert(path.content()); - nodes.insert(path.node()); + endpoints.insert(path.endpoint()); } - Ok(GetDistinctContentResponse { content, nodes }) + Ok(GetDistinctContentResponse { content, endpoints }) } fn gc(&mut self, tables: &mut Tables) -> anyhow::Result<()> { @@ -538,7 +542,7 @@ fn join_signed_announce(path: AnnouncePath, value: AnnounceValue) -> SignedAnnou announce: Announce { content: path.content(), kind: path.announce_kind(), - host: path.node(), + host: path.endpoint(), timestamp: value.timestamp, }, signature: value.signature, @@ -553,17 +557,17 @@ struct AnnouncePath { format: u8, #[debug("{:?}", self.announce_kind())] kind: u8, - #[debug("{}", self.node())] - node: [u8; 32], + #[debug("{}", self.endpoint())] + endpoint: [u8; 32], } impl AnnouncePath { - fn new(content: HashAndFormat, kind: AnnounceKind, node: NodeId) -> Self { + fn new(content: HashAndFormat, kind: AnnounceKind, endpoint: EndpointId) -> Self { Self { hash: *content.hash.as_bytes(), format: content.format as u8, kind: kind as u8, - node: *node.as_bytes(), + endpoint: *endpoint.as_bytes(), } } @@ -586,8 +590,8 @@ impl AnnouncePath { } } - fn node(&self) -> NodeId { - NodeId::from_bytes(&self.node).unwrap() + fn endpoint(&self) -> EndpointId { + EndpointId::from_bytes(&self.endpoint).unwrap() } fn content_min(content: HashAndFormat) -> Self { @@ -595,7 +599,7 @@ impl AnnouncePath { hash: *content.hash.as_bytes(), format: 0, kind: 0, - node: [0; 32], + endpoint: [0; 32], } } @@ -604,7 +608,7 @@ impl AnnouncePath { hash: *content.hash.as_bytes(), format: 255, kind: 255, - node: [255; 32], + endpoint: [255; 32], } } @@ -614,12 +618,12 @@ impl AnnouncePath { self.content().hash.to_hex(), self.content().format, self.announce_kind(), - self.node() + self.endpoint() ) } } -impl redb::RedbValue for AnnouncePath { +impl redb::Value for AnnouncePath { type SelfType<'a> = Self; type AsBytes<'a> = [u8; 66]; @@ -636,13 +640,13 @@ impl redb::RedbValue for AnnouncePath { hash.copy_from_slice(&data[0..32]); let format = data[32]; let kind = data[33]; - let mut node = [0; 32]; - node.copy_from_slice(&data[34..66]); + let mut endpoint = [0; 32]; + endpoint.copy_from_slice(&data[34..66]); Self { hash, format, kind, - node, + endpoint, } } @@ -655,7 +659,7 @@ impl redb::RedbValue for AnnouncePath { res[0..32].copy_from_slice(&value.hash); res[32] = value.format; res[33] = value.kind; - res[34..66].copy_from_slice(&value.node); + res[34..66].copy_from_slice(&value.endpoint); res } @@ -664,7 +668,7 @@ impl redb::RedbValue for AnnouncePath { } } -impl redb::RedbKey for AnnouncePath { +impl redb::Key for AnnouncePath { fn compare(data1: &[u8], data2: &[u8]) -> std::cmp::Ordering { data1.cmp(data2) } @@ -723,7 +727,7 @@ struct ProbeValue { timestamp: AbsoluteTime, } -impl redb::RedbValue for ProbeValue { +impl redb::Value for ProbeValue { type SelfType<'a> = Self; type AsBytes<'a> = [u8; 8]; @@ -829,36 +833,36 @@ impl Tracker { handle: Some(handle), })); // spawn independent announce tasks for each content item - for node in dc.nodes { - res.setup_probe_task(node); + for endpoint in dc.endpoints { + res.setup_probe_task(endpoint); } Ok(res) } - fn setup_probe_task(&self, node: NodeId) { + fn setup_probe_task(&self, endpoint: EndpointId) { let this = self.clone(); // announce task only captures this, an Arc, and the content. let task = self.0.local_pool.spawn_pinned(move || async move { loop { - if let Ok(content_for_node) = this.get_content_for_node(node).await { + if let Ok(content_for_endpoint) = this.get_content_for_endpoint(endpoint).await { let now = AbsoluteTime::now(); - let res = this.probe_one(node, content_for_node).await; + let res = this.probe_one(endpoint, content_for_endpoint).await; match res { Ok(results) => { - tracing::debug!("probed {node}, applying result"); - if let Err(cause) = this.apply_result(node, results, now).await { + tracing::debug!("probed {endpoint}, applying result"); + if let Err(cause) = this.apply_result(endpoint, results, now).await { tracing::error!("error applying result: {}", cause); } } Err(cause) => { - tracing::debug!("error probing {node}: {cause}"); + tracing::debug!("error probing {endpoint}: {cause}"); } } } tokio::time::sleep(this.0.options.probe_interval).await; } }); - self.0.probe_tasks.publish(node, task); + self.0.probe_tasks.publish(endpoint, task); } pub async fn gc_loop(self) -> anyhow::Result<()> { @@ -868,11 +872,13 @@ impl Tracker { self.gc().await?; tracing::debug!("gc end"); let distinct = self.get_distinct_content().await?; - // make sure tasks for expired nodes or content items are removed + // make sure tasks for expired endpoints or content items are removed self.0 .announce_tasks .retain(|x| distinct.content.contains(x)); - self.0.probe_tasks.retain(|x| distinct.nodes.contains(x)); + self.0 + .probe_tasks + .retain(|x| distinct.endpoints.contains(x)); } } @@ -917,10 +923,10 @@ impl Tracker { /// Handle a single incoming connection on the tracker ALPN. pub async fn handle_connection(&self, conn: Connection) -> anyhow::Result<()> { let (mut send, mut recv) = conn.accept_bi().await?; - let Ok(remote_node_id) = conn.remote_node_id() else { - bail!("error getting remote node id"); + let Ok(remote_endpoint_id) = conn.remote_id() else { + bail!("error getting remote endpoint id"); }; - trace!("remote node id: {}", remote_node_id); + trace!("remote endpoint id: {}", remote_endpoint_id); let request = recv.read_to_end(REQUEST_SIZE_LIMIT).await?; let request = postcard::from_bytes::(&request)?; match request { @@ -1021,7 +1027,7 @@ impl Tracker { async fn probe( &self, connection: &iroh::endpoint::Connection, - host: &NodeId, + host: &EndpointId, content: &HashAndFormat, probe_kind: ProbeKind, ) -> anyhow::Result { @@ -1080,7 +1086,8 @@ impl Tracker { else { unreachable!("request does not include root"); }; - let index = usize::try_from(child.offset() - 1).expect("child offset too large"); + let index = + usize::try_from(child.offset() - 1).expect("child offset too large"); let hash = hs.get(index).expect("request inconsistent with hash seq"); let at_blob_header = child.next(hash); let at_end_blob = at_blob_header.drain().await?; @@ -1131,14 +1138,14 @@ impl Tracker { /// Get the content that is supposedly available, grouped by peers /// /// Todo: this is a full table scan, could be optimized. - async fn get_content_for_node( + async fn get_content_for_endpoint( &self, - node: NodeId, + endpoint: EndpointId, ) -> anyhow::Result> { let (tx, rx) = oneshot::channel(); self.0 .actor - .send(ActorMessage::GetContentForNode { node, tx }) + .send(ActorMessage::GetContentForEndpoint { endpoint, tx }) .await?; rx.await? } @@ -1146,13 +1153,17 @@ impl Tracker { /// Apply the results of a probe to the database. async fn apply_result( &self, - node: NodeId, + endpoint: EndpointId, results: Vec<(HashAndFormat, AnnounceKind, anyhow::Result)>, now: AbsoluteTime, ) -> std::result::Result<(), mpsc::error::SendError> { self.0 .actor - .send(ActorMessage::StoreProbeResult { node, results, now }) + .send(ActorMessage::StoreProbeResult { + endpoint, + results, + now, + }) .await } @@ -1162,7 +1173,7 @@ impl Tracker { /// Individual probes can fail, but the probe will continue. async fn probe_one( &self, - host: NodeId, + host: EndpointId, by_kind_and_content: BTreeMap, ) -> anyhow::Result)>> { let t0 = Instant::now(); diff --git a/content-discovery/iroh-content-tracker/src/tracker/tables.rs b/content-discovery/iroh-content-tracker/src/tracker/tables.rs index 43d26c7..a2b1887 100644 --- a/content-discovery/iroh-content-tracker/src/tracker/tables.rs +++ b/content-discovery/iroh-content-tracker/src/tracker/tables.rs @@ -13,13 +13,13 @@ pub(super) trait ReadableTables { fn probes(&self) -> &impl ReadableTable; } -pub(super) struct Tables<'a, 'b> { - pub announces: redb::Table<'a, 'b, AnnouncePath, AnnounceValue>, - pub probes: redb::Table<'a, 'b, AnnouncePath, ProbeValue>, +pub(super) struct Tables<'a> { + pub announces: redb::Table<'a, AnnouncePath, AnnounceValue>, + pub probes: redb::Table<'a, AnnouncePath, ProbeValue>, } -impl<'db, 'txn> Tables<'db, 'txn> { - pub fn new(tx: &'txn redb::WriteTransaction<'db>) -> std::result::Result { +impl<'db> Tables<'db> { + pub fn new(tx: &'db redb::WriteTransaction) -> std::result::Result { Ok(Self { announces: tx.open_table(ANNOUNCES_TABLE)?, probes: tx.open_table(PROBES_TABLE)?, @@ -27,7 +27,7 @@ impl<'db, 'txn> Tables<'db, 'txn> { } } -impl ReadableTables for Tables<'_, '_> { +impl ReadableTables for Tables<'_> { fn announces(&self) -> &impl ReadableTable { &self.announces } @@ -38,13 +38,13 @@ impl ReadableTables for Tables<'_, '_> { /// A struct similar to [`redb::ReadOnlyTable`] but for all tables that make up /// the blob store. -pub(super) struct ReadOnlyTables<'txn> { - pub announces: redb::ReadOnlyTable<'txn, AnnouncePath, AnnounceValue>, - pub probes: redb::ReadOnlyTable<'txn, AnnouncePath, ProbeValue>, +pub(super) struct ReadOnlyTables { + pub announces: redb::ReadOnlyTable, + pub probes: redb::ReadOnlyTable, } -impl<'txn> ReadOnlyTables<'txn> { - pub fn new(tx: &'txn redb::ReadTransaction<'txn>) -> std::result::Result { +impl ReadOnlyTables { + pub fn new(tx: &redb::ReadTransaction) -> std::result::Result { Ok(Self { announces: tx.open_table(ANNOUNCES_TABLE)?, probes: tx.open_table(PROBES_TABLE)?, @@ -52,7 +52,7 @@ impl<'txn> ReadOnlyTables<'txn> { } } -impl ReadableTables for ReadOnlyTables<'_> { +impl ReadableTables for ReadOnlyTables { fn announces(&self) -> &impl ReadableTable { &self.announces } diff --git a/content-discovery/iroh-content-tracker/tests/smoke.rs b/content-discovery/iroh-content-tracker/tests/smoke.rs index 120260c..5ef3d70 100644 --- a/content-discovery/iroh-content-tracker/tests/smoke.rs +++ b/content-discovery/iroh-content-tracker/tests/smoke.rs @@ -15,16 +15,15 @@ async fn smoke_test() -> anyhow::Result<()> { let tempdir = tempfile::tempdir()?; let tracker_ep = Endpoint::builder() .alpns(vec![iroh_content_discovery::ALPN.to_vec()]) - .discovery_n0() .bind() .await?; - let provider_ep = Endpoint::builder().discovery_n0().bind().await?; - let client_ep = Endpoint::builder().discovery_n0().bind().await?; + let provider_ep = Endpoint::bind().await?; + let client_ep = Endpoint::bind().await?; let mut options = iroh_content_tracker::options::Options::debug(); options.announce_data_path = tempdir.path().join("announce.redb"); let tracker = Tracker::new(options, tracker_ep.clone())?; let accept_task = tokio::spawn(tracker.clone().accept_loop(tracker_ep.clone())); - let tracker_id = tracker_ep.node_id(); + let tracker_id = tracker_ep.id(); let store = MemStore::new(); let blobs = BlobsProtocol::new(&store, None); let provider_router = RouterBuilder::new(provider_ep.clone()) @@ -52,7 +51,7 @@ async fn smoke_test() -> anyhow::Result<()> { Announce { content: hash.into(), kind: AnnounceKind::Complete, - host: provider_ep.node_id(), + host: provider_ep.id(), timestamp: AbsoluteTime::now(), }, provider_ep.secret_key(), From dac09e003b265257c883c5d295efa0ae5125c2b8 Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Wed, 22 Oct 2025 18:54:12 +0200 Subject: [PATCH 3/9] feat(iroh-dag-sync): update to iroh@0.94 --- iroh-dag-sync/Cargo.toml | 12 ++++++------ iroh-dag-sync/src/args.rs | 10 +++++----- iroh-dag-sync/src/main.rs | 32 ++++++++++++++++---------------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/iroh-dag-sync/Cargo.toml b/iroh-dag-sync/Cargo.toml index 59c4b24..d18d5b3 100644 --- a/iroh-dag-sync/Cargo.toml +++ b/iroh-dag-sync/Cargo.toml @@ -4,12 +4,12 @@ version = "0.1.0" edition = "2021" [dependencies] -iroh-blobs = "0.95" -iroh-gossip = "0.93" -iroh = "0.93" -iroh-base = { version ="0.93", features = ["ticket"] } +iroh-blobs = "0.96" +iroh-gossip = "0.94" +iroh = "0.94" +iroh-tickets = "0.1" iroh-car = "0.5" -redb = "2.1.1" +redb = "2.6" clap = { version = "4.5.7", features = ["derive"] } tracing-subscriber = "0.3.18" anyhow = "1.0.86" @@ -23,7 +23,7 @@ bao-tree = "0.15.1" genawaiter = "0.99.1" bytes = "1.6.0" hex = "0.4.3" -ron = "0.8.1" +ron = "0.11" rand = "0.9.2" tracing = "0.1.40" serde_bytes = "0.11.14" diff --git a/iroh-dag-sync/src/args.rs b/iroh-dag-sync/src/args.rs index 9170c34..b02ceae 100644 --- a/iroh-dag-sync/src/args.rs +++ b/iroh-dag-sync/src/args.rs @@ -4,7 +4,7 @@ use std::{ }; use clap::Parser; -use iroh::NodeId; +use iroh::EndpointId; use crate::protocol::Cid; @@ -18,7 +18,7 @@ pub struct Args { pub enum SubCommand { Import(ImportArgs), Export(ExportArgs), - Node(NodeArgs), + Endpoint(EndpointArgs), Sync(SyncArgs), } @@ -41,7 +41,7 @@ pub struct ExportArgs { } #[derive(Debug, Parser)] -pub struct NodeArgs { +pub struct EndpointArgs { #[clap(flatten)] pub net: NetArgs, } @@ -66,6 +66,6 @@ pub struct SyncArgs { pub traversal: Option, #[clap(long, help = "Which data to send inline")] pub inline: Option, - #[clap(long, help = "The node to sync from")] - pub from: NodeId, + #[clap(long, help = "The endpoint to sync from")] + pub from: EndpointId, } diff --git a/iroh-dag-sync/src/main.rs b/iroh-dag-sync/src/main.rs index 5c48d7b..5d47429 100644 --- a/iroh-dag-sync/src/main.rs +++ b/iroh-dag-sync/src/main.rs @@ -5,17 +5,17 @@ use anyhow::Context; use clap::Parser; use futures_lite::StreamExt; use ipld_core::codec::Links; -use iroh::discovery::{dns::DnsDiscovery, pkarr::PkarrPublisher, ConcurrentDiscovery}; -use iroh::NodeAddr; -use iroh_base::ticket::NodeTicket; +use iroh::EndpointAddr; +use iroh::discovery::{ConcurrentDiscovery, dns::DnsDiscovery, pkarr::PkarrPublisher}; use iroh_car::CarReader; -use protocol::{ron_parser, Cid, Request}; +use iroh_tickets::endpoint::EndpointTicket; +use protocol::{Cid, Request, ron_parser}; use serde::{Deserialize, Serialize}; use sync::{handle_request, handle_sync_response}; use tables::{ReadOnlyTables, ReadableTables, Tables}; use tokio::io::AsyncWriteExt; use tokio_util::task::LocalPoolHandle; -use traversal::{get_traversal, Traversal}; +use traversal::{Traversal, get_traversal}; mod args; mod protocol; @@ -120,17 +120,17 @@ async fn main() -> anyhow::Result<()> { None => print_traversal(traversal, &store).await?, } } - args::SubCommand::Node(args) => { + args::SubCommand::Endpoint(args) => { let endpoint = create_endpoint(args.net.iroh_ipv4_addr, args.net.iroh_ipv6_addr).await?; endpoint.online().await; - let addr = endpoint.node_addr(); - println!("Node id:\n{}", addr.node_id); - println!( - "Listening on {:#?}, {:#?}", - addr.relay_url, addr.direct_addresses - ); - println!("ticket:\n{}", NodeTicket::new(addr.clone())); + let addr = endpoint.addr(); + println!("Endpoint id:\n{}", addr.id); + println!("Listening on:"); + for addr in &addr.addrs { + println!("- {addr:?}"); + } + println!("ticket:\n{}", EndpointTicket::new(addr.clone())); while let Some(incoming) = endpoint.accept().await { let mut connecting = incoming.accept()?; let alpn = connecting.alpn().await?; @@ -161,8 +161,8 @@ async fn main() -> anyhow::Result<()> { let mut tables = Tables::new(&tx)?; let store = store.clone(); let endpoint = Arc::new(endpoint); - let node = NodeAddr::from(args.from); - let connection = endpoint.connect(node, SYNC_ALPN).await?; + let addr = EndpointAddr::from(args.from); + let connection = endpoint.connect(addr, SYNC_ALPN).await?; let request = protocol::Request::Sync(protocol::SyncRequest { traversal: traversal.clone(), inline, @@ -253,7 +253,7 @@ where .await .context("data not found")?; let mut block_bytes = cid.to_bytes(); // postcard::to_extend(&RawCidHeader::from_cid(&cid), Vec::new())?; - // block_bytes.extend_from_slice(&cid.hash().digest()); // hash + // block_bytes.extend_from_slice(&cid.hash().digest()); // hash block_bytes.extend_from_slice(&data); let size: u64 = block_bytes.len() as u64; file.write_all(postcard::to_slice(&size, &mut buffer)?) From 35b3837533e05ffab62b51e768cd53b6e8c8c3be Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Wed, 22 Oct 2025 18:59:52 +0200 Subject: [PATCH 4/9] feat(iroh-pkarr-naming-system): update to iroh@0.94 --- iroh-pkarr-naming-system/Cargo.toml | 8 ++++---- iroh-pkarr-naming-system/src/lib.rs | 18 +++++++++--------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/iroh-pkarr-naming-system/Cargo.toml b/iroh-pkarr-naming-system/Cargo.toml index 8ffa8ce..424b74e 100644 --- a/iroh-pkarr-naming-system/Cargo.toml +++ b/iroh-pkarr-naming-system/Cargo.toml @@ -7,10 +7,10 @@ edition = "2021" [dependencies] anyhow = "1.0.79" -derive_more = "0.99.17" -iroh = "0.93" -iroh-blobs = "0.95" -pkarr = { version = "2.3.1", features = ["async", "dht"] } +derive_more = "2.0" +iroh = "0.94" +iroh-blobs = "0.96" +pkarr = { version = "5", features = ["dht"] } tokio = "1.35.1" tokio-util = "0.7.12" tracing = "0.1.40" diff --git a/iroh-pkarr-naming-system/src/lib.rs b/iroh-pkarr-naming-system/src/lib.rs index 20da958..9cd6c1b 100644 --- a/iroh-pkarr-naming-system/src/lib.rs +++ b/iroh-pkarr-naming-system/src/lib.rs @@ -11,9 +11,9 @@ use iroh_blobs::HashAndFormat; use pkarr::{ dns::{ rdata::{RData, TXT}, - Name, Packet, ResourceRecord, CLASS, + Name, ResourceRecord, CLASS, }, - SignedPacket, + SignedPacket, Timestamp, }; use tokio_util::task::AbortOnDropHandle; @@ -49,7 +49,7 @@ pub struct IPNS(Arc); #[derive(Debug)] struct Inner { - pkarr: Arc, + pkarr: Arc, packets: Mutex)>>, } @@ -57,7 +57,7 @@ impl IPNS { /// Create a new default IPNS publisher. pub fn new() -> anyhow::Result { let inner = Inner { - pkarr: Arc::new(pkarr::PkarrClientBuilder::default().build()?), + pkarr: Arc::new(pkarr::ClientBuilder::default().build()?), packets: Mutex::new(BTreeMap::default()), }; Ok(Self(Arc::new(inner))) @@ -76,7 +76,7 @@ impl IPNS { let publish_task = tokio::spawn(async move { tokio::time::sleep(INITIAL_PUBLISH_DELAY).await; loop { - let res = pkarr.publish(&signed_packet); + let res = pkarr.publish(&signed_packet, None).await; match res { Ok(()) => { tracing::info!("Published record"); @@ -101,7 +101,7 @@ impl IPNS { pub async fn resolve(&self, public_key: iroh::PublicKey) -> anyhow::Result> { let public_key = pkarr::PublicKey::try_from(public_key.as_bytes()).context("invalid public key")?; - let packet = self.0.pkarr.resolve(&public_key)?; + let packet = self.0.pkarr.resolve(&public_key).await; packet.map(Self::to_record).transpose() } @@ -112,16 +112,16 @@ impl IPNS { ttl: u32, ) -> anyhow::Result { let keypair = pkarr::Keypair::from_secret_key(&secret_key.to_bytes()); - let mut packet = Packet::new_reply(0); + let mut answers = Vec::new(); if let Some(content) = record.content() { - packet.answers.push(ResourceRecord::new( + answers.push(ResourceRecord::new( Name::new(CONTENT_KEY).unwrap(), CLASS::IN, ttl, RData::TXT(TXT::try_from(content.to_string().as_str())?.into_owned()), )); } - Ok(SignedPacket::from_packet(&keypair, &packet)?) + Ok(SignedPacket::new(&keypair, &answers, Timestamp::now())?) } fn to_record(packet: SignedPacket) -> anyhow::Result { From 3e2f2deba23a5677decba5152aafe059268a11ec Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Wed, 22 Oct 2025 19:01:33 +0200 Subject: [PATCH 5/9] fixup(h3-iroh): error handling --- h3-iroh/examples/server.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/h3-iroh/examples/server.rs b/h3-iroh/examples/server.rs index 1c94f30..6f9f76a 100644 --- a/h3-iroh/examples/server.rs +++ b/h3-iroh/examples/server.rs @@ -4,7 +4,7 @@ use std::{path::PathBuf, sync::Arc}; -use anyhow::{bail, Result}; +use anyhow::{Result, bail}; use bytes::{Bytes, BytesMut}; use clap::Parser; use h3::{quic::BidiStream, server::RequestStream}; @@ -12,7 +12,7 @@ use http::{Request, StatusCode}; use iroh::endpoint::Incoming; use iroh_tickets::endpoint::EndpointTicket; use tokio::{fs::File, io::AsyncReadExt}; -use tracing::{debug, error, field, info, info_span, Instrument, Span}; +use tracing::{Instrument, Span, debug, error, field, info, info_span}; #[derive(Parser, Debug)] #[command()] @@ -86,7 +86,13 @@ async fn handle_connection(incoming: Incoming, root: Arc>) -> Re loop { match h3_conn.accept().await { Ok(Some(req_resolver)) => { - let (req, stream) = req_resolver.resolve_request().await?; + let (req, stream) = match req_resolver.resolve_request().await { + Ok((req, stream)) => (req, stream), + Err(err) => { + error!("stream error: {err:#}"); + continue; + } + }; info!(?req, "new request"); tokio::spawn({ let root = root.clone(); @@ -102,12 +108,8 @@ async fn handle_connection(incoming: Incoming, root: Arc>) -> Re break; } Err(err) => { - error!("accept error: {err:#}"); - // TODO: - // match err { - // ErrorLevel::ConnectionError => break, - // ErrorLevel::StreamError => continue, - // } + error!("connection error: {err:#}"); + break; } } } From f934c08c420b5c29c06e2a8d02a7bd0fcc1a5b1f Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Wed, 22 Oct 2025 19:04:24 +0200 Subject: [PATCH 6/9] fixup(h3-iroh): axum --- h3-iroh/examples/server-axum.rs | 8 ++++---- h3-iroh/examples/server.rs | 4 ++-- h3-iroh/src/axum.rs | 35 ++++++++++++++++++--------------- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/h3-iroh/examples/server-axum.rs b/h3-iroh/examples/server-axum.rs index 94bd62a..ddd17f6 100644 --- a/h3-iroh/examples/server-axum.rs +++ b/h3-iroh/examples/server-axum.rs @@ -4,7 +4,7 @@ use anyhow::Result; use axum::{response::Html, routing::get, Router}; -use iroh_base::ticket::NodeTicket; +use iroh_tickets::endpoint::EndpointTicket; use tracing::info; #[tokio::main] @@ -17,11 +17,11 @@ async fn main() -> Result<()> { .alpns(vec![b"iroh+h3".to_vec()]) .bind() .await?; - info!("accepting connections on node: {}", ep.node_id()); + info!("accepting connections on endpoint: {}", ep.id()); - // Wait for direct addresses and a RelayUrl before printing a NodeTicket. + // Wait for direct addresses and a RelayUrl before printing a EndpointTicket. ep.online().await; - let ticket = NodeTicket::new(ep.node_addr()); + let ticket = EndpointTicket::new(ep.addr()); info!("node ticket: {ticket}"); info!("run: cargo run --example client -- iroh+h3://{ticket}/"); diff --git a/h3-iroh/examples/server.rs b/h3-iroh/examples/server.rs index 6f9f76a..b1292bd 100644 --- a/h3-iroh/examples/server.rs +++ b/h3-iroh/examples/server.rs @@ -4,7 +4,7 @@ use std::{path::PathBuf, sync::Arc}; -use anyhow::{Result, bail}; +use anyhow::{bail, Result}; use bytes::{Bytes, BytesMut}; use clap::Parser; use h3::{quic::BidiStream, server::RequestStream}; @@ -12,7 +12,7 @@ use http::{Request, StatusCode}; use iroh::endpoint::Incoming; use iroh_tickets::endpoint::EndpointTicket; use tokio::{fs::File, io::AsyncReadExt}; -use tracing::{Instrument, Span, debug, error, field, info, info_span}; +use tracing::{debug, error, field, info, info_span, Instrument, Span}; #[derive(Parser, Debug)] #[command()] diff --git a/h3-iroh/src/axum.rs b/h3-iroh/src/axum.rs index 1e6c83b..0555ad9 100644 --- a/h3-iroh/src/axum.rs +++ b/h3-iroh/src/axum.rs @@ -3,7 +3,7 @@ use anyhow::Result; use axum::Router; use bytes::{Buf, Bytes}; -use h3::{error::ErrorLevel, quic::BidiStream, server::RequestStream}; +use h3::{quic::BidiStream, server::RequestStream}; use http::{Request, Response, Version}; use http_body_util::BodyExt; use iroh::Endpoint; @@ -41,27 +41,30 @@ async fn handle_connection(incoming: iroh::endpoint::Incoming, router: Router) - let mut conn = h3::server::Connection::new(conn).await?; loop { match conn.accept().await { - Ok(Some((req, stream))) => { - let router = router.clone(); - tokio::spawn( - async move { - if let Err(err) = handle_request(req, stream, router.clone()).await { - warn!("handling request failed: {err}"); + Ok(Some(req_resolver)) => match req_resolver.resolve_request().await { + Ok((req, stream)) => { + let router = router.clone(); + tokio::spawn( + async move { + if let Err(err) = handle_request(req, stream, router.clone()).await { + warn!("handling request failed: {err}"); + } } - } - .instrument(info_span!("h3-request")), - ); - } + .instrument(info_span!("h3-request")), + ); + } + Err(err) => { + error!("stream error: {err}"); + continue; + } + }, Ok(None) => { break; // No more streams to be recieved } Err(err) => { - error!("accept error: {err}"); - match err.get_error_level() { - ErrorLevel::ConnectionError => break, - ErrorLevel::StreamError => continue, - } + error!("connection error: {err}"); + break; } } } From 4696e228c4759bd797a05af673ba9382a4deba14 Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Wed, 22 Oct 2025 19:08:52 +0200 Subject: [PATCH 7/9] fixup --- h3-iroh/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/h3-iroh/src/lib.rs b/h3-iroh/src/lib.rs index baf8b9e..7dc89f0 100644 --- a/h3-iroh/src/lib.rs +++ b/h3-iroh/src/lib.rs @@ -34,6 +34,7 @@ pub struct Connection { opening_bi: Option as Future>::Output>>, incoming_uni: BoxStreamSync<'static, as Future>::Output>, opening_uni: Option as Future>::Output>>, + #[allow(dead_code)] datagrams: BoxStreamSync<'static, as Future>::Output>, } From 2ec08b357b6b47750f5cada1def8d7db2ea3ee67 Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Wed, 22 Oct 2025 19:24:29 +0200 Subject: [PATCH 8/9] fixup --- iroh-dag-sync/src/main.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/iroh-dag-sync/src/main.rs b/iroh-dag-sync/src/main.rs index 5d47429..c9cc446 100644 --- a/iroh-dag-sync/src/main.rs +++ b/iroh-dag-sync/src/main.rs @@ -5,17 +5,17 @@ use anyhow::Context; use clap::Parser; use futures_lite::StreamExt; use ipld_core::codec::Links; +use iroh::discovery::{dns::DnsDiscovery, pkarr::PkarrPublisher, ConcurrentDiscovery}; use iroh::EndpointAddr; -use iroh::discovery::{ConcurrentDiscovery, dns::DnsDiscovery, pkarr::PkarrPublisher}; use iroh_car::CarReader; use iroh_tickets::endpoint::EndpointTicket; -use protocol::{Cid, Request, ron_parser}; +use protocol::{ron_parser, Cid, Request}; use serde::{Deserialize, Serialize}; use sync::{handle_request, handle_sync_response}; use tables::{ReadOnlyTables, ReadableTables, Tables}; use tokio::io::AsyncWriteExt; use tokio_util::task::LocalPoolHandle; -use traversal::{Traversal, get_traversal}; +use traversal::{get_traversal, Traversal}; mod args; mod protocol; @@ -253,7 +253,7 @@ where .await .context("data not found")?; let mut block_bytes = cid.to_bytes(); // postcard::to_extend(&RawCidHeader::from_cid(&cid), Vec::new())?; - // block_bytes.extend_from_slice(&cid.hash().digest()); // hash + // block_bytes.extend_from_slice(&cid.hash().digest()); // hash block_bytes.extend_from_slice(&data); let size: u64 = block_bytes.len() as u64; file.write_all(postcard::to_slice(&size, &mut buffer)?) From 6b2fe96ceb513d9437c90f3a311592cec7ba833e Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Wed, 22 Oct 2025 19:48:52 +0200 Subject: [PATCH 9/9] cleanup --- content-discovery/iroh-content-tracker/dial.log | 1 - content-discovery/iroh-content-tracker/probe.log | 1 - 2 files changed, 2 deletions(-) delete mode 100644 content-discovery/iroh-content-tracker/dial.log delete mode 100644 content-discovery/iroh-content-tracker/probe.log diff --git a/content-discovery/iroh-content-tracker/dial.log b/content-discovery/iroh-content-tracker/dial.log deleted file mode 100644 index 5386b9b..0000000 --- a/content-discovery/iroh-content-tracker/dial.log +++ /dev/null @@ -1 +0,0 @@ -1761151767.655932,5c6c7ab5fa7f1f337fd19adce7189fbe3ec219cfffac221fd1cc7f158715fbed,0.213470,ok diff --git a/content-discovery/iroh-content-tracker/probe.log b/content-discovery/iroh-content-tracker/probe.log deleted file mode 100644 index 0a3e592..0000000 --- a/content-discovery/iroh-content-tracker/probe.log +++ /dev/null @@ -1 +0,0 @@ -1761151767.665611,5c6c7ab5fa7f1f337fd19adce7189fbe3ec219cfffac221fd1cc7f158715fbed,1edabea435e688e8227aa2497e1d1c8ff311d6bab560c9f28d70b8d4845c8a84,Complete,0.009327,ok