From fa68b7e24fd2998cddb75e304cc6ff34a8cc413c Mon Sep 17 00:00:00 2001 From: Walid El Bouchikhi Date: Thu, 25 Jun 2026 10:11:04 +0200 Subject: [PATCH 01/11] feat(runtime): add TLS support to TCP request plane MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Encrypt frontend ↔ worker TCP connections using rustls (ring provider). TLS is opt-in via environment variables; existing deployments require no changes. New env vars (all optional): - DYN_TCP_TLS_CERT_PATH / DYN_TCP_TLS_KEY_PATH — server-side TLS - DYN_TCP_TLS_CA_CERT_PATH — client CA verification - DYN_TCP_TLS_INSECURE — skip cert verify (dev only) - DYN_TCP_TLS_SERVER_NAME — SNI override for IP addresses Key design decisions: - BoxRead/BoxWrite unify TLS and plaintext streams through all inner functions with zero branching after accept/connect - TLS acceptor spawned per-connection so the accept loop is never blocked; handshake timeout is 10s on both server and client - ClientConfig cached via OnceLock — built once, Arc-cloned per connection - Warn at startup when server/client TLS env vars are mismatched - Empty CA PEM detected at build time rather than failing at handshake Signed-off-by: Walid El Bouchikhi --- Cargo.lock | 841 ++++++++---------- lib/bindings/kvbm/Cargo.lock | 461 ++++------ lib/bindings/python/Cargo.lock | 325 +++---- lib/runtime/Cargo.toml | 4 + lib/runtime/examples/Cargo.lock | 545 ++++-------- lib/runtime/src/config/environment_names.rs | 31 + lib/runtime/src/lib.rs | 1 + .../src/pipeline/network/tcp/client.rs | 300 +++++-- .../src/pipeline/network/tcp/server.rs | 187 +++- lib/runtime/src/tls_utils.rs | 215 +++++ 10 files changed, 1488 insertions(+), 1422 deletions(-) create mode 100644 lib/runtime/src/tls_utils.rs diff --git a/Cargo.lock b/Cargo.lock index 531d4be3ad1f..15afe38df442 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -176,7 +176,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -193,9 +193,9 @@ checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe" [[package]] name = "as-slice" @@ -374,7 +374,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -385,7 +385,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -486,7 +486,7 @@ dependencies = [ "bytes", "fastrand", "hex", - "http 1.4.1", + "http 1.4.2", "ring", "time", "tokio", @@ -548,7 +548,7 @@ dependencies = [ "bytes-utils", "fastrand", "http 0.2.12", - "http 1.4.1", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "percent-encoding", @@ -582,7 +582,7 @@ dependencies = [ "hex", "hmac", "http 0.2.12", - "http 1.4.1", + "http 1.4.2", "http-body 1.0.1", "lru 0.16.4", "percent-encoding", @@ -611,7 +611,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.1", + "http 1.4.2", "regex-lite", "tracing", ] @@ -635,7 +635,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.1", + "http 1.4.2", "regex-lite", "tracing", ] @@ -660,7 +660,7 @@ dependencies = [ "aws-types", "fastrand", "http 0.2.12", - "http 1.4.1", + "http 1.4.2", "regex-lite", "tracing", ] @@ -682,7 +682,7 @@ dependencies = [ "hex", "hmac", "http 0.2.12", - "http 1.4.1", + "http 1.4.2", "p256", "percent-encoding", "ring", @@ -715,7 +715,7 @@ dependencies = [ "bytes", "crc-fast", "hex", - "http 1.4.1", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "md-5", @@ -749,7 +749,7 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.4.1", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "percent-encoding", @@ -768,9 +768,9 @@ dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", "h2 0.3.27", - "h2 0.4.14", + "h2 0.4.15", "http 0.2.12", - "http 1.4.1", + "http 1.4.2", "http-body 0.4.6", "hyper 0.14.32", "hyper 1.10.1", @@ -779,7 +779,7 @@ dependencies = [ "hyper-util", "pin-project-lite", "rustls 0.21.12", - "rustls 0.23.40", + "rustls 0.23.41", "rustls-native-certs 0.8.4", "rustls-pki-types", "tokio", @@ -831,7 +831,7 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.1", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -851,7 +851,7 @@ dependencies = [ "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.4.1", + "http 1.4.2", "pin-project-lite", "tokio", "tracing", @@ -869,7 +869,7 @@ dependencies = [ "bytes-utils", "futures-core", "http 0.2.12", - "http 1.4.1", + "http 1.4.2", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -917,7 +917,7 @@ dependencies = [ "axum-core 0.4.5", "bytes", "futures-util", - "http 1.4.1", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "itoa", @@ -946,7 +946,7 @@ dependencies = [ "bytes", "form_urlencoded", "futures-util", - "http 1.4.1", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "hyper 1.10.1", @@ -981,7 +981,7 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 1.4.1", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "mime", @@ -1000,7 +1000,7 @@ checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ "bytes", "futures-core", - "http 1.4.1", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "mime", @@ -1019,7 +1019,7 @@ checksum = "7aa268c23bfbbd2c4363b9cd302a4f504fb2a9dfe7e3451d66f35dd392e20aca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -1031,12 +1031,12 @@ dependencies = [ "arc-swap", "bytes", "fs-err", - "http 1.4.1", + "http 1.4.2", "http-body 1.0.1", "hyper 1.10.1", "hyper-util", "pin-project-lite", - "rustls 0.23.40", + "rustls 0.23.41", "rustls-pemfile", "rustls-pki-types", "tokio", @@ -1130,7 +1130,7 @@ version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1141,7 +1141,7 @@ dependencies = [ "regex", "rustc-hash 2.1.2", "shlex 1.3.0", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -1150,7 +1150,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1159,7 +1159,7 @@ dependencies = [ "regex", "rustc-hash 2.1.2", "shlex 1.3.0", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -1206,9 +1206,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" dependencies = [ "serde_core", ] @@ -1278,13 +1278,13 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.1" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" +checksum = "5cee35f73844aa3014bb606320a6c1f010249dbdf43342fe54b5a4f6a8ed4b79" dependencies = [ "memchr", "regex-automata", - "serde", + "serde_core", ] [[package]] @@ -1322,7 +1322,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -1339,9 +1339,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" dependencies = [ "serde", ] @@ -1385,16 +1385,16 @@ dependencies = [ "quote", "serde", "serde_json", - "syn 2.0.117", + "syn 2.0.118", "tempfile", "toml 0.8.23", ] [[package]] name = "cc" -version = "1.2.63" +version = "1.2.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" dependencies = [ "find-msvc-tools", "jobserver", @@ -1435,9 +1435,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chacha20" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", "cpufeatures 0.3.0", @@ -1446,9 +1446,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "js-sys", @@ -1527,7 +1527,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -1563,7 +1563,7 @@ version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -1592,9 +1592,9 @@ dependencies = [ [[package]] name = "config" -version = "0.15.23" +version = "0.15.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f316c6237b2d38be61949ecd15268a4c6ca32570079394a2444d9ce2c72a72d8" +checksum = "0b34d0237145f33580b89724f75d16950efd3e2c91b2d823917ecb69ec7f84f0" dependencies = [ "async-trait", "convert_case", @@ -1970,7 +1970,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2020,7 +2020,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2034,7 +2034,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2047,7 +2047,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2058,7 +2058,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2069,7 +2069,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2080,7 +2080,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core 0.23.0", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2118,6 +2118,38 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aafbece59594ed57696a1a69e8bb3ca1683fbc9cdb41d5c02726070b2cd8f19d" +[[package]] +name = "defmt" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6e524506490a1953d237cb87b1cfc1e46f88c18f10a22dfe0f507dc6bfc7f7f" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0a27770e9c8f719a79d8b638281f4d828f77d8fd61e0bd94451b9b85e576a0b" +dependencies = [ + "defmt-parser", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.118", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.18", +] + [[package]] name = "der" version = "0.6.1" @@ -2145,7 +2177,6 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ - "powerfmt", "serde_core", ] @@ -2157,7 +2188,7 @@ checksum = "74ef43543e701c01ad77d3a5922755c6a1d71b22d942cb8042be4994b380caff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2168,7 +2199,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2189,7 +2220,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2199,7 +2230,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2228,7 +2259,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", "unicode-xid", ] @@ -2241,7 +2272,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2302,7 +2333,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2311,7 +2342,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "objc2", ] @@ -2323,7 +2354,7 @@ checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2424,7 +2455,7 @@ version = "0.1.0" dependencies = [ "anyhow", "proc-macro2", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -2454,7 +2485,7 @@ dependencies = [ "prost 0.13.5", "prost-types 0.13.5", "rcgen", - "rustls 0.23.40", + "rustls 0.23.41", "rustls-pemfile", "serde", "serde_json", @@ -2536,7 +2567,7 @@ dependencies = [ "axum-server", "base64 0.22.1", "bincode 2.0.1", - "bitflags 2.11.1", + "bitflags 2.13.0", "blake3", "bs62", "bytemuck", @@ -2596,7 +2627,7 @@ dependencies = [ "reqwest 0.12.28", "rmp-serde", "rstest 0.18.2", - "rustls 0.23.40", + "rustls 0.23.41", "serde", "serde_json", "serial_test", @@ -2820,10 +2851,13 @@ dependencies = [ "prometheus", "rand 0.9.4", "rayon", + "rcgen", "regex", "reqwest 0.12.28", "rmp-serde", "rstest 0.23.0", + "rustls 0.23.41", + "rustls-pemfile", "serde", "serde_json", "socket2 0.5.10", @@ -2834,6 +2868,7 @@ dependencies = [ "tmq", "tokio", "tokio-rayon", + "tokio-rustls 0.26.4", "tokio-stream", "tokio-util", "tower-http", @@ -2956,7 +2991,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -3012,7 +3047,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -3032,7 +3067,7 @@ checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -3052,7 +3087,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -3079,7 +3114,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3097,8 +3132,8 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8acfe553027cd07fc5fafa81a84f19a7a87eaffaccd2162b6db05e8d6ce98084" dependencies = [ - "http 1.4.1", - "prost 0.14.3", + "http 1.4.2", + "prost 0.14.4", "tokio", "tokio-stream", "tonic 0.14.6", @@ -3250,7 +3285,7 @@ version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7c4bd5ab1ac61f29c634df1175d350ded29cf74c3c6d4f7030431a5ae3c7d5d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "ffmpeg-sys-next", "libc", ] @@ -3488,7 +3523,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -3584,28 +3619,25 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi 6.0.0", "rand_core 0.10.1", - "wasip2", - "wasip3", ] [[package]] name = "getset" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" +checksum = "6cf442baaabe4213ce7d1239afc26c039180b6456da2cededa316ae2c8a77a77" dependencies = [ - "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -3681,16 +3713,16 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733" +checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.4.1", + "http 1.4.2", "indexmap 2.14.0", "slab", "tokio", @@ -3758,9 +3790,9 @@ checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "hashlink" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea0b22561a9c04a7cb1a302c013e0259cd3b4bb619f145b32f72b8b4bcbed230" +checksum = "824e001ac4f3012dd16a264bec811403a67ca9deb6c102fc5049b32c4574b35f" dependencies = [ "hashbrown 0.16.1", ] @@ -3810,7 +3842,7 @@ checksum = "629d8f3bbeda9d148036d6b0de0a3ab947abd08ce90626327fc3547a49d59d97" dependencies = [ "dirs", "futures", - "http 1.4.1", + "http 1.4.2", "indicatif 0.17.11", "libc", "log", @@ -3888,9 +3920,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -3914,7 +3946,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.4.1", + "http 1.4.2", ] [[package]] @@ -3925,7 +3957,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.4.1", + "http 1.4.2", "http-body 1.0.1", "pin-project-lite", ] @@ -3982,8 +4014,8 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2 0.4.14", - "http 1.4.1", + "h2 0.4.15", + "http 1.4.2", "http-body 1.0.1", "httparse", "httpdate", @@ -4015,16 +4047,16 @@ version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http 1.4.1", + "http 1.4.2", "hyper 1.10.1", "hyper-util", "log", - "rustls 0.23.40", + "rustls 0.23.41", "rustls-native-certs 0.8.4", "tokio", "tokio-rustls 0.26.4", "tower-service", - "webpki-roots 1.0.7", + "webpki-roots 1.0.8", ] [[package]] @@ -4051,14 +4083,14 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "http 1.4.1", + "http 1.4.2", "http-body 1.0.1", "hyper 1.10.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.5.10", + "socket2 0.6.4", "system-configuration 0.6.1", "tokio", "tower-service", @@ -4175,12 +4207,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "ident_case" version = "1.0.1" @@ -4245,9 +4271,9 @@ dependencies = [ [[package]] name = "imgref" -version = "1.12.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40fac9d56ed6437b198fddba683305e8e2d651aa42647f00f5ae542e7f5c94a2" +checksum = "89194689a993ab15268672e99e7b0e19da2da3268ac682e8f02d29d4d1434cd7" [[package]] name = "indexmap" @@ -4335,9 +4361,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.47.2" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4a6248eb93a4401ed2f37dfe8ea592d3cf05b7cf4f8efa867b6895af7e094e" +checksum = "86f0f8fee8c926415c58d6ae43a08523a26faccb2323f5e6b644fe7dd4ef6b82" dependencies = [ "console 0.16.3", "globset", @@ -4347,6 +4373,7 @@ dependencies = [ "regex", "serde", "similar", + "strip-ansi-escapes", "tempfile", "walkdir", ] @@ -4365,7 +4392,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -4383,7 +4410,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -4394,7 +4421,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4456,10 +4483,11 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.28" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4603d3033e49e2b0e31229fcab20a5d40089c607d975cd9c80551dc69eed9102" +checksum = "34f877a98676d2fb664698d74cc6a51ce6c484ce8c770f05d0108ec9090aeb46" dependencies = [ + "defmt", "jiff-static", "jiff-tzdb-platform", "log", @@ -4471,13 +4499,13 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.28" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "782d32378dddf207193ac91cefb848ad41abb58195c95168e1291227a0832b47" +checksum = "0666b5ab5ecaca213fc2a85b8c0083d9004e84ee2d5f9a7e0017aaf50986f25f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -4507,13 +4535,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.99" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -4641,7 +4668,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "libc", ] @@ -4670,7 +4697,7 @@ dependencies = [ "either", "futures", "home", - "http 1.4.1", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "hyper 1.10.1", @@ -4681,7 +4708,7 @@ dependencies = [ "k8s-openapi", "kube-core", "pem", - "rustls 0.23.40", + "rustls 0.23.41", "secrecy", "serde", "serde_json", @@ -4703,7 +4730,7 @@ dependencies = [ "chrono", "derive_more 2.1.1", "form_urlencoded", - "http 1.4.1", + "http 1.4.2", "json-patch", "k8s-openapi", "schemars 1.2.1", @@ -4724,7 +4751,7 @@ dependencies = [ "quote", "serde", "serde_json", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -4930,12 +4957,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "lebe" version = "0.5.3" @@ -4968,9 +4989,9 @@ dependencies = [ [[package]] name = "libfuzzer-sys" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" +checksum = "a9fd2f41a1cba099f79a0b6b6c35656cf7c03351a7bae8ff0f28f25270f929d2" dependencies = [ "arbitrary", "cc", @@ -5107,9 +5128,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.30" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "loop9" @@ -5271,9 +5292,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" [[package]] name = "memfile" @@ -5286,9 +5307,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" +checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" dependencies = [ "libc", ] @@ -5415,7 +5436,7 @@ dependencies = [ "bytes", "colored", "futures-core", - "http 1.4.1", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "hyper 1.10.1", @@ -5515,7 +5536,7 @@ checksum = "e4db6d5580af57bf992f59068d4ea26fd518574ff48d7639b255a36f9de6e7e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -5604,7 +5625,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22f9786d56d972959e1408b6a93be6af13b9c1392036c5c1fafa08a1b0c6ee87" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "byteorder", "derive_builder", "getset", @@ -5624,7 +5645,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -5652,7 +5673,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "cfg-if", "cfg_aliases", "libc", @@ -5665,7 +5686,7 @@ version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "cfg-if", "cfg_aliases", "libc", @@ -5750,7 +5771,7 @@ version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "filetime", "fsevent-sys", "inotify", @@ -5768,7 +5789,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5833,7 +5854,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -5926,7 +5947,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "objc2", "objc2-foundation", ] @@ -5947,7 +5968,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "dispatch2", "objc2", ] @@ -5958,7 +5979,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "dispatch2", "objc2", "objc2-core-foundation", @@ -5991,7 +6012,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "objc2", "objc2-core-foundation", "objc2-core-graphics", @@ -6009,7 +6030,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "block2", "libc", "objc2", @@ -6022,7 +6043,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "objc2", "objc2-core-foundation", ] @@ -6033,7 +6054,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "objc2", "objc2-core-foundation", "objc2-foundation", @@ -6045,7 +6066,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "block2", "objc2", "objc2-cloud-kit", @@ -6082,7 +6103,7 @@ dependencies = [ "chrono", "form_urlencoded", "futures", - "http 1.4.1", + "http 1.4.2", "http-body-util", "httparse", "humantime", @@ -6142,7 +6163,7 @@ version = "6.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc3cbf698f9438986c11a880c90a6d04b9de27575afd28bbf45b154b6c709e2" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "libc", "once_cell", "onig_sys", @@ -6234,7 +6255,7 @@ checksum = "d7a6d09a73194e6b66df7c8f1b680f156d916a1a942abf2de06823dd02b7855d" dependencies = [ "async-trait", "bytes", - "http 1.4.1", + "http 1.4.2", "opentelemetry", "reqwest 0.12.28", ] @@ -6245,12 +6266,12 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f69cd6acbb9af919df949cd1ec9e5e7fdc2ef15d234b6b795aaa525cc02f71f" dependencies = [ - "http 1.4.1", + "http 1.4.2", "opentelemetry", "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", - "prost 0.14.3", + "prost 0.14.4", "reqwest 0.12.28", "thiserror 2.0.18", "tokio", @@ -6266,7 +6287,7 @@ checksum = "a7175df06de5eaee9909d4805a3d07e28bb752c34cab57fa9cff549da596b30f" dependencies = [ "opentelemetry", "opentelemetry_sdk", - "prost 0.14.3", + "prost 0.14.4", "tonic 0.14.6", "tonic-prost", ] @@ -6465,7 +6486,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -6523,7 +6544,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -6612,7 +6633,7 @@ checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -6687,7 +6708,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "crc32fast", "fdeflate", "flate2", @@ -6773,7 +6794,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -6804,7 +6825,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -6824,7 +6845,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", "version_check", "yansi", ] @@ -6845,7 +6866,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4488a4a36b9a4ba6b9334a32a39971f77c1436ec82c38707bce707699cc3bbcb" dependencies = [ "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -6883,7 +6904,7 @@ checksum = "9adf1691c04c0a5ff46ff8f262b58beb07b0dbb61f96f9f54f6cbd82106ed87f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -6894,7 +6915,7 @@ checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ "bit-set 0.8.0", "bit-vec 0.8.0", - "bitflags 2.11.1", + "bitflags 2.13.0", "num-traits", "rand 0.9.4", "rand_chacha 0.9.0", @@ -6917,12 +6938,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" +checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1" dependencies = [ "bytes", - "prost-derive 0.14.3", + "prost-derive 0.14.4", ] [[package]] @@ -6931,8 +6952,8 @@ version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" dependencies = [ - "heck 0.4.1", - "itertools 0.10.5", + "heck 0.5.0", + "itertools 0.14.0", "log", "multimap", "once_cell", @@ -6941,28 +6962,28 @@ dependencies = [ "prost 0.13.5", "prost-types 0.13.5", "regex", - "syn 2.0.117", + "syn 2.0.118", "tempfile", ] [[package]] name = "prost-build" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7" +checksum = "03da047801ff44bb6a4d407d4860c05fd70bb81714e6b2f3812603d5b145b042" dependencies = [ - "heck 0.4.1", - "itertools 0.10.5", + "heck 0.5.0", + "itertools 0.14.0", "log", "multimap", "petgraph 0.8.3", "prettyplease", - "prost 0.14.3", - "prost-types 0.14.3", + "prost 0.14.4", + "prost-types 0.14.4", "pulldown-cmark", "pulldown-cmark-to-cmark", "regex", - "syn 2.0.117", + "syn 2.0.118", "tempfile", ] @@ -6973,23 +6994,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ "anyhow", - "itertools 0.10.5", + "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] name = "prost-derive" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" +checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf" dependencies = [ "anyhow", - "itertools 0.10.5", + "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -7003,11 +7024,11 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" +checksum = "f94967dc7688f3054c7fac87473ffae4cc4c3904800e2d9f5b857246d8963b0a" dependencies = [ - "prost 0.14.3", + "prost 0.14.4", ] [[package]] @@ -7036,7 +7057,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "memchr", "unicase", ] @@ -7116,7 +7137,7 @@ dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -7129,7 +7150,7 @@ dependencies = [ "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -7165,9 +7186,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.9" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" dependencies = [ "bytes", "cfg_aliases", @@ -7175,8 +7196,8 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.1.2", - "rustls 0.23.40", - "socket2 0.5.10", + "rustls 0.23.41", + "socket2 0.6.4", "thiserror 2.0.18", "tokio", "tracing", @@ -7185,9 +7206,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.14" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +checksum = "4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e" dependencies = [ "bytes", "getrandom 0.3.4", @@ -7195,7 +7216,7 @@ dependencies = [ "rand 0.9.4", "ring", "rustc-hash 2.1.2", - "rustls 0.23.40", + "rustls 0.23.41", "rustls-pki-types", "slab", "thiserror 2.0.18", @@ -7213,16 +7234,16 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.10", + "socket2 0.6.4", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] @@ -7267,7 +7288,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" dependencies = [ "chacha20", - "getrandom 0.4.2", + "getrandom 0.4.3", "rand_core 0.10.1", ] @@ -7440,7 +7461,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", ] [[package]] @@ -7471,14 +7492,14 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] name = "regex" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" dependencies = [ "aho-corasick", "memchr", @@ -7505,9 +7526,9 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "relative-path" @@ -7563,8 +7584,8 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.4.14", - "http 1.4.1", + "h2 0.4.15", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "hyper 1.10.1", @@ -7577,7 +7598,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.40", + "rustls 0.23.41", "rustls-native-certs 0.8.4", "rustls-pki-types", "serde", @@ -7595,7 +7616,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 1.0.7", + "webpki-roots 1.0.8", ] [[package]] @@ -7661,11 +7682,11 @@ dependencies = [ [[package]] name = "ron" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4147b952f3f819eca0e99527022f7d6a8d05f111aeb0a62960c74eb283bec8fc" +checksum = "81116b9531d61eabc41aeb228e4b6b2435bcca3233b98cf3b3077d4e6e9debb3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "once_cell", "serde", "serde_derive", @@ -7721,7 +7742,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.117", + "syn 2.0.118", "unicode-ident", ] @@ -7739,7 +7760,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.117", + "syn 2.0.118", "unicode-ident", ] @@ -7757,7 +7778,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.117", + "syn 2.0.118", "unicode-ident", ] @@ -7769,7 +7790,7 @@ checksum = "b3a8fb4672e840a587a66fc577a5491375df51ddb88f2a2c2a792598c326fe14" dependencies = [ "quote", "rand 0.8.6", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -7792,7 +7813,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.117", + "syn 2.0.118", "walkdir", ] @@ -7843,7 +7864,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -7856,11 +7877,11 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.12.1", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -7877,9 +7898,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.40" +version = "0.23.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" dependencies = [ "aws-lc-rs", "log", @@ -8065,9 +8086,9 @@ dependencies = [ [[package]] name = "scc" -version = "3.7.1" +version = "3.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bcd12b6caff5213cc3c03123cde8c3db5e413008a63b0c0ba35e6275825ea92" +checksum = "5581cd5dd2cb79cbe9d8137071d67f62f0db926e83a07b4d14561c5b7d423776" dependencies = [ "saa", "sdd", @@ -8116,7 +8137,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -8173,7 +8194,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -8186,7 +8207,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -8275,7 +8296,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -8286,7 +8307,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -8297,7 +8318,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -8342,7 +8363,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -8381,7 +8402,7 @@ checksum = "ec3a1e7d2eadec84deabd46ae061bf480a91a6bce74d25dad375bd656f2e19d8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -8398,9 +8419,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e72c1c2cb7b223fafb600a619537a871c2818583d619401b785e7c0b746ccde2" +checksum = "76a5c54c7310e7b8b9577c286d7e399ddd876c3e12b3ed917a8aabc4b96e9e8c" dependencies = [ "base64 0.22.1", "bs58", @@ -8418,14 +8439,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90c488738ecb4fb0262f41f43bc40efc5868d9fb744319ddf5f5317f417bfac" +checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660" dependencies = [ "darling 0.23.0", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -8463,7 +8484,7 @@ checksum = "94e153fc76e1c6a068703d6d29c508a0b15c061c4b7e43da59cc097bc342673c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -8601,9 +8622,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "snap" @@ -8711,6 +8732,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "strip-ansi-escapes" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025" +dependencies = [ + "vte", +] + [[package]] name = "strsim" version = "0.11.1" @@ -8735,7 +8765,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -8763,9 +8793,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.117" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ "proc-macro2", "quote", @@ -8795,7 +8825,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -8815,7 +8845,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation 0.9.4", "system-configuration-sys 0.6.0", ] @@ -8891,10 +8921,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix 1.1.4", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -8934,7 +8964,7 @@ dependencies = [ "either", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -8945,7 +8975,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -8956,7 +8986,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -9010,12 +9040,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.47" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327" dependencies = [ "deranged", - "itoa", "libc", "num-conv", "num_threads", @@ -9027,15 +9056,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.27" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935" dependencies = [ "num-conv", "time-core", @@ -9201,7 +9230,7 @@ checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -9230,7 +9259,7 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.40", + "rustls 0.23.41", "tokio", ] @@ -9297,7 +9326,7 @@ dependencies = [ "bytes", "futures-core", "futures-sink", - "http 1.4.1", + "http 1.4.2", "httparse", "rand 0.8.6", "ring", @@ -9403,8 +9432,8 @@ dependencies = [ "axum 0.7.9", "base64 0.22.1", "bytes", - "h2 0.4.14", - "http 1.4.1", + "h2 0.4.15", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "hyper 1.10.1", @@ -9432,8 +9461,8 @@ dependencies = [ "axum 0.8.4", "base64 0.22.1", "bytes", - "h2 0.4.14", - "http 1.4.1", + "h2 0.4.15", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "hyper 1.10.1", @@ -9461,8 +9490,8 @@ dependencies = [ "axum 0.8.4", "base64 0.22.1", "bytes", - "h2 0.4.14", - "http 1.4.1", + "h2 0.4.15", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "hyper 1.10.1", @@ -9492,7 +9521,7 @@ dependencies = [ "prost-build 0.13.5", "prost-types 0.13.5", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -9504,7 +9533,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -9526,7 +9555,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50849f68853be452acf590cde0b146665b8d507b3b8af17261df47e02c209ea0" dependencies = [ "bytes", - "prost 0.14.3", + "prost 0.14.4", "tonic 0.14.6", ] @@ -9538,10 +9567,10 @@ checksum = "654e5643eff75d7f8c99197ce1440ed19a3474eada74c12bbac488b2cafdae27" dependencies = [ "prettyplease", "proc-macro2", - "prost-build 0.14.3", - "prost-types 0.14.3", + "prost-build 0.14.4", + "prost-types 0.14.4", "quote", - "syn 2.0.117", + "syn 2.0.118", "tempfile", "tonic-build 0.14.6", ] @@ -9592,10 +9621,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ "base64 0.22.1", - "bitflags 2.11.1", + "bitflags 2.13.0", "bytes", "futures-util", - "http 1.4.1", + "http 1.4.2", "http-body 1.0.1", "mime", "pin-project-lite", @@ -9651,7 +9680,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -9752,7 +9781,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad06847b7afb65c7866a36664b75c40b895e318cea4f71299f013fb22965329d" dependencies = [ "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -9779,7 +9808,7 @@ checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" dependencies = [ "bytes", "data-encoding", - "http 1.4.1", + "http 1.4.2", "httparse", "log", "rand 0.9.4", @@ -9998,7 +10027,7 @@ dependencies = [ "flate2", "log", "once_cell", - "rustls 0.23.40", + "rustls 0.23.41", "rustls-pki-types", "serde", "serde_json", @@ -10071,7 +10100,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -10094,11 +10123,11 @@ dependencies = [ [[package]] name = "uuid" -version = "1.23.2" +version = "1.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7" +checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" dependencies = [ - "getrandom 0.4.2", + "getrandom 0.4.3", "js-sys", "serde_core", "wasm-bindgen", @@ -10142,7 +10171,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -10353,7 +10382,7 @@ dependencies = [ "dashmap", "flume 0.12.0", "futures", - "http 1.4.1", + "http 1.4.2", "http-body 1.0.1", "http-body-util", "hyper 1.10.1", @@ -10485,6 +10514,15 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" +[[package]] +name = "vte" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077" +dependencies = [ + "memchr", +] + [[package]] name = "wait-timeout" version = "0.2.1" @@ -10521,27 +10559,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.122" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", @@ -10552,9 +10581,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.72" +version = "0.4.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" dependencies = [ "js-sys", "wasm-bindgen", @@ -10562,9 +10591,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.122" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -10572,48 +10601,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.122" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.122" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap 2.14.0", - "wasm-encoder", - "wasmparser", -] - [[package]] name = "wasm-streams" version = "0.4.2" @@ -10627,23 +10634,11 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags 2.11.1", - "hashbrown 0.15.5", - "indexmap 2.14.0", - "semver", -] - [[package]] name = "web-sys" -version = "0.3.99" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" dependencies = [ "js-sys", "wasm-bindgen", @@ -10665,14 +10660,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.7", + "webpki-roots 1.0.8", ] [[package]] name = "webpki-roots" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" +checksum = "bf85cb06032201fa7c6f829d7db5a7e5aa45bcc0655327713065f6f0576731bf" dependencies = [ "rustls-pki-types", ] @@ -10716,7 +10711,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -10746,7 +10741,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -10757,7 +10752,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -11078,100 +11073,12 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck 0.5.0", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck 0.5.0", - "indexmap 2.14.0", - "prettyplease", - "syn 2.0.117", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn 2.0.117", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags 2.11.1", - "indexmap 2.14.0", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap 2.14.0", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "write16" version = "1.0.0" @@ -11230,9 +11137,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -11247,28 +11154,28 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -11288,15 +11195,15 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" [[package]] name = "zeromq" @@ -11363,7 +11270,7 @@ checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.118", ] [[package]] @@ -11399,9 +11306,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" +checksum = "977347db8caa080403f6b6b7c1cda9479a8e869316f7e13a59b19076a40f94e3" [[package]] name = "zmij" diff --git a/lib/bindings/kvbm/Cargo.lock b/lib/bindings/kvbm/Cargo.lock index 56913db72196..960dff4ac798 100644 --- a/lib/bindings/kvbm/Cargo.lock +++ b/lib/bindings/kvbm/Cargo.lock @@ -163,9 +163,9 @@ checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe" [[package]] name = "as-slice" @@ -539,7 +539,7 @@ version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -597,9 +597,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" dependencies = [ "serde_core", ] @@ -669,13 +669,13 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.1" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" +checksum = "5cee35f73844aa3014bb606320a6c1f010249dbdf43342fe54b5a4f6a8ed4b79" dependencies = [ "memchr", "regex-automata", - "serde", + "serde_core", ] [[package]] @@ -710,9 +710,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" dependencies = [ "serde", ] @@ -728,9 +728,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.63" +version = "1.2.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" dependencies = [ "find-msvc-tools", "jobserver", @@ -771,9 +771,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chacha20" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", "cpufeatures 0.3.0", @@ -901,9 +901,9 @@ dependencies = [ [[package]] name = "config" -version = "0.15.23" +version = "0.15.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f316c6237b2d38be61949ecd15268a4c6ca32570079394a2444d9ce2c72a72d8" +checksum = "0b34d0237145f33580b89724f75d16950efd3e2c91b2d823917ecb69ec7f84f0" dependencies = [ "async-trait", "convert_case", @@ -1290,6 +1290,38 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aafbece59594ed57696a1a69e8bb3ca1683fbc9cdb41d5c02726070b2cd8f19d" +[[package]] +name = "defmt" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6e524506490a1953d237cb87b1cfc1e46f88c18f10a22dfe0f507dc6bfc7f7f" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0a27770e9c8f719a79d8b638281f4d828f77d8fd61e0bd94451b9b85e576a0b" +dependencies = [ + "defmt-parser", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.18", +] + [[package]] name = "der" version = "0.7.10" @@ -1307,7 +1339,6 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ - "powerfmt", "serde_core", ] @@ -1466,7 +1497,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "objc2", ] @@ -1576,7 +1607,7 @@ dependencies = [ "axum-server", "base64 0.22.1", "bincode 2.0.1", - "bitflags 2.12.1", + "bitflags 2.13.0", "blake3", "bs62", "bytemuck", @@ -1813,6 +1844,8 @@ dependencies = [ "regex", "reqwest", "rmp-serde", + "rustls", + "rustls-pemfile", "serde", "serde_json", "socket2 0.5.10", @@ -1820,6 +1853,7 @@ dependencies = [ "tmq", "tokio", "tokio-rayon", + "tokio-rustls", "tokio-stream", "tokio-util", "tower-http", @@ -2009,7 +2043,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8acfe553027cd07fc5fafa81a84f19a7a87eaffaccd2162b6db05e8d6ce98084" dependencies = [ "http", - "prost 0.14.3", + "prost 0.14.4", "tokio", "tokio-stream", "tonic 0.14.6", @@ -2387,25 +2421,22 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi 6.0.0", "rand_core 0.10.1", - "wasip2", - "wasip3", ] [[package]] name = "getset" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" +checksum = "6cf442baaabe4213ce7d1239afc26c039180b6456da2cededa316ae2c8a77a77" dependencies = [ - "proc-macro-error2", "proc-macro2", "quote", "syn", @@ -2441,9 +2472,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733" +checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" dependencies = [ "atomic-waker", "bytes", @@ -2584,9 +2615,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -2670,7 +2701,7 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots 1.0.7", + "webpki-roots 1.0.8", ] [[package]] @@ -2820,12 +2851,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "ident_case" version = "1.0.1" @@ -2890,9 +2915,9 @@ dependencies = [ [[package]] name = "imgref" -version = "1.12.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40fac9d56ed6437b198fddba683305e8e2d651aa42647f00f5ae542e7f5c94a2" +checksum = "89194689a993ab15268672e99e7b0e19da2da3268ac682e8f02d29d4d1434cd7" [[package]] name = "indexmap" @@ -3057,10 +3082,11 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.28" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4603d3033e49e2b0e31229fcab20a5d40089c607d975cd9c80551dc69eed9102" +checksum = "34f877a98676d2fb664698d74cc6a51ce6c484ce8c770f05d0108ec9090aeb46" dependencies = [ + "defmt", "jiff-static", "jiff-tzdb-platform", "log", @@ -3072,9 +3098,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.28" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "782d32378dddf207193ac91cefb848ad41abb58195c95168e1291227a0832b47" +checksum = "0666b5ab5ecaca213fc2a85b8c0083d9004e84ee2d5f9a7e0017aaf50986f25f" dependencies = [ "proc-macro2", "quote", @@ -3108,13 +3134,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.99" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -3212,7 +3237,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "libc", ] @@ -3383,12 +3408,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "lebe" version = "0.5.3" @@ -3486,9 +3505,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.32" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "loop9" @@ -3635,15 +3654,15 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" [[package]] name = "memmap2" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" +checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" dependencies = [ "libc", ] @@ -3899,7 +3918,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22f9786d56d972959e1408b6a93be6af13b9c1392036c5c1fafa08a1b0c6ee87" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "byteorder", "derive_builder", "getset", @@ -3947,7 +3966,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cfg-if", "cfg_aliases", "libc", @@ -3959,7 +3978,7 @@ version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cfg-if", "cfg_aliases", "libc", @@ -4044,7 +4063,7 @@ version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "filetime", "fsevent-sys", "inotify", @@ -4179,7 +4198,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "objc2", "objc2-foundation", ] @@ -4200,7 +4219,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "dispatch2", "objc2", ] @@ -4211,7 +4230,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "dispatch2", "objc2", "objc2-core-foundation", @@ -4244,7 +4263,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "objc2", "objc2-core-foundation", "objc2-core-graphics", @@ -4262,7 +4281,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2", "libc", "objc2", @@ -4275,7 +4294,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "objc2", "objc2-core-foundation", ] @@ -4286,7 +4305,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "objc2", "objc2-core-foundation", "objc2-foundation", @@ -4298,7 +4317,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2", "objc2", "objc2-cloud-kit", @@ -4395,7 +4414,7 @@ version = "6.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc3cbf698f9438986c11a880c90a6d04b9de27575afd28bbf45b154b6c709e2" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "libc", "once_cell", "onig_sys", @@ -4491,7 +4510,7 @@ dependencies = [ "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", - "prost 0.14.3", + "prost 0.14.4", "reqwest", "thiserror 2.0.18", "tokio", @@ -4507,7 +4526,7 @@ checksum = "a7175df06de5eaee9909d4805a3d07e28bb752c34cab57fa9cff549da596b30f" dependencies = [ "opentelemetry", "opentelemetry_sdk", - "prost 0.14.3", + "prost 0.14.4", "tonic 0.14.6", "tonic-prost", ] @@ -4852,7 +4871,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "crc32fast", "fdeflate", "flate2", @@ -4998,12 +5017,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" +checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1" dependencies = [ "bytes", - "prost-derive 0.14.3", + "prost-derive 0.14.4", ] [[package]] @@ -5028,9 +5047,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7" +checksum = "03da047801ff44bb6a4d407d4860c05fd70bb81714e6b2f3812603d5b145b042" dependencies = [ "heck", "itertools 0.14.0", @@ -5038,8 +5057,8 @@ dependencies = [ "multimap", "petgraph 0.8.3", "prettyplease", - "prost 0.14.3", - "prost-types 0.14.3", + "prost 0.14.4", + "prost-types 0.14.4", "pulldown-cmark", "pulldown-cmark-to-cmark", "regex", @@ -5062,9 +5081,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" +checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf" dependencies = [ "anyhow", "itertools 0.14.0", @@ -5084,11 +5103,11 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" +checksum = "f94967dc7688f3054c7fac87473ffae4cc4c3904800e2d9f5b857246d8963b0a" dependencies = [ - "prost 0.14.3", + "prost 0.14.4", ] [[package]] @@ -5117,7 +5136,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "memchr", "unicase", ] @@ -5268,9 +5287,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.9" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" dependencies = [ "bytes", "cfg_aliases", @@ -5288,9 +5307,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.14" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +checksum = "4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e" dependencies = [ "bytes", "getrandom 0.3.4", @@ -5323,9 +5342,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.45" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] @@ -5370,7 +5389,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" dependencies = [ "chacha20", - "getrandom 0.4.2", + "getrandom 0.4.3", "rand_core 0.10.1", ] @@ -5511,7 +5530,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", ] [[package]] @@ -5547,9 +5566,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" dependencies = [ "aho-corasick", "memchr", @@ -5570,9 +5589,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "reqwest" @@ -5618,7 +5637,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 1.0.7", + "webpki-roots 1.0.8", ] [[package]] @@ -5662,11 +5681,11 @@ dependencies = [ [[package]] name = "ron" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4147b952f3f819eca0e99527022f7d6a8d05f111aeb0a62960c74eb283bec8fc" +checksum = "81116b9531d61eabc41aeb228e4b6b2435bcca3233b98cf3b3077d4e6e9debb3" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "once_cell", "serde", "serde_derive", @@ -5745,7 +5764,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -5758,7 +5777,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.12.1", @@ -5767,9 +5786,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.40" +version = "0.23.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" dependencies = [ "aws-lc-rs", "log", @@ -5969,7 +5988,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -6294,9 +6313,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "socket2" @@ -6407,9 +6426,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ "proc-macro2", "quote", @@ -6442,7 +6461,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -6489,7 +6508,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix 1.1.4", "windows-sys 0.61.2", @@ -6575,12 +6594,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.47" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327" dependencies = [ "deranged", - "itoa", "libc", "num-conv", "num_threads", @@ -6592,15 +6610,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.27" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935" dependencies = [ "num-conv", "time-core", @@ -6981,7 +6999,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50849f68853be452acf590cde0b146665b8d507b3b8af17261df47e02c209ea0" dependencies = [ "bytes", - "prost 0.14.3", + "prost 0.14.4", "tonic 0.14.6", ] @@ -6993,8 +7011,8 @@ checksum = "654e5643eff75d7f8c99197ce1440ed19a3474eada74c12bbac488b2cafdae27" dependencies = [ "prettyplease", "proc-macro2", - "prost-build 0.14.3", - "prost-types 0.14.3", + "prost-build 0.14.4", + "prost-types 0.14.4", "quote", "syn", "tempfile", @@ -7027,7 +7045,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ "base64 0.22.1", - "bitflags 2.12.1", + "bitflags 2.13.0", "bytes", "futures-util", "http", @@ -7466,11 +7484,11 @@ dependencies = [ [[package]] name = "uuid" -version = "1.23.2" +version = "1.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7" +checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" dependencies = [ - "getrandom 0.4.2", + "getrandom 0.4.3", "js-sys", "serde_core", "wasm-bindgen", @@ -7568,27 +7586,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.122" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", @@ -7599,9 +7608,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.72" +version = "0.4.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" dependencies = [ "js-sys", "wasm-bindgen", @@ -7609,9 +7618,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.122" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7619,9 +7628,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.122" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", @@ -7632,35 +7641,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.122" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap 2.14.0", - "wasm-encoder", - "wasmparser", -] - [[package]] name = "wasm-streams" version = "0.4.2" @@ -7674,23 +7661,11 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags 2.12.1", - "hashbrown 0.15.5", - "indexmap 2.14.0", - "semver", -] - [[package]] name = "web-sys" -version = "0.3.99" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" dependencies = [ "js-sys", "wasm-bindgen", @@ -7712,14 +7687,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.7", + "webpki-roots 1.0.8", ] [[package]] name = "webpki-roots" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" +checksum = "bf85cb06032201fa7c6f829d7db5a7e5aa45bcc0655327713065f6f0576731bf" dependencies = [ "rustls-pki-types", ] @@ -8080,100 +8055,12 @@ dependencies = [ "memchr", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap 2.14.0", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags 2.12.1", - "indexmap 2.14.0", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap 2.14.0", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "write16" version = "1.0.0" @@ -8240,18 +8127,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", @@ -8281,9 +8168,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" [[package]] name = "zeromq-src" @@ -8361,9 +8248,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" +checksum = "977347db8caa080403f6b6b7c1cda9479a8e869316f7e13a59b19076a40f94e3" [[package]] name = "zmij" diff --git a/lib/bindings/python/Cargo.lock b/lib/bindings/python/Cargo.lock index 2d612267cb86..00cdd4a318e3 100644 --- a/lib/bindings/python/Cargo.lock +++ b/lib/bindings/python/Cargo.lock @@ -178,9 +178,9 @@ checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe" [[package]] name = "as-slice" @@ -729,7 +729,7 @@ dependencies = [ "hyper-util", "pin-project-lite", "rustls 0.21.12", - "rustls 0.23.40", + "rustls 0.23.41", "rustls-native-certs 0.8.4", "rustls-pki-types", "tokio", @@ -939,7 +939,7 @@ dependencies = [ "hyper 1.10.1", "hyper-util", "pin-project-lite", - "rustls 0.23.40", + "rustls 0.23.41", "rustls-pemfile", "rustls-pki-types", "tokio", @@ -1175,13 +1175,13 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.1" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" +checksum = "5cee35f73844aa3014bb606320a6c1f010249dbdf43342fe54b5a4f6a8ed4b79" dependencies = [ "memchr", "regex-automata", - "serde", + "serde_core", ] [[package]] @@ -1216,9 +1216,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" dependencies = [ "serde", ] @@ -1244,9 +1244,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.64" +version = "1.2.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f" +checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" dependencies = [ "find-msvc-tools", "jobserver", @@ -1287,9 +1287,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chacha20" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", "cpufeatures 0.3.0", @@ -1855,6 +1855,38 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aafbece59594ed57696a1a69e8bb3ca1683fbc9cdb41d5c02726070b2cd8f19d" +[[package]] +name = "defmt" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6e524506490a1953d237cb87b1cfc1e46f88c18f10a22dfe0f507dc6bfc7f7f" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0a27770e9c8f719a79d8b638281f4d828f77d8fd61e0bd94451b9b85e576a0b" +dependencies = [ + "defmt-parser", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.18", +] + [[package]] name = "der" version = "0.6.1" @@ -2231,7 +2263,7 @@ dependencies = [ "rayon", "reqwest", "rmp-serde", - "rustls 0.23.40", + "rustls 0.23.41", "serde", "serde_json", "sha2", @@ -2464,6 +2496,8 @@ dependencies = [ "regex", "reqwest", "rmp-serde", + "rustls 0.23.41", + "rustls-pemfile", "serde", "serde_json", "socket2 0.5.10", @@ -2471,6 +2505,7 @@ dependencies = [ "tmq", "tokio", "tokio-rayon", + "tokio-rustls 0.26.4", "tokio-stream", "tokio-util", "tower-http", @@ -3130,16 +3165,14 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi 6.0.0", "rand_core 0.10.1", - "wasip2", - "wasip3", ] [[package]] @@ -3529,12 +3562,12 @@ dependencies = [ "hyper 1.10.1", "hyper-util", "log", - "rustls 0.23.40", + "rustls 0.23.41", "rustls-native-certs 0.8.4", "tokio", "tokio-rustls 0.26.4", "tower-service", - "webpki-roots 1.0.7", + "webpki-roots 1.0.8", ] [[package]] @@ -3684,12 +3717,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "ident_case" version = "1.0.1" @@ -3927,10 +3954,11 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.28" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4603d3033e49e2b0e31229fcab20a5d40089c607d975cd9c80551dc69eed9102" +checksum = "34f877a98676d2fb664698d74cc6a51ce6c484ce8c770f05d0108ec9090aeb46" dependencies = [ + "defmt", "jiff-static", "jiff-tzdb-platform", "log", @@ -3942,9 +3970,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.28" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "782d32378dddf207193ac91cefb848ad41abb58195c95168e1291227a0832b47" +checksum = "0666b5ab5ecaca213fc2a85b8c0083d9004e84ee2d5f9a7e0017aaf50986f25f" dependencies = [ "proc-macro2", "quote", @@ -3978,9 +4006,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.102" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ "cfg-if", "futures-util", @@ -4121,7 +4149,7 @@ dependencies = [ "k8s-openapi", "kube-core", "pem", - "rustls 0.23.40", + "rustls 0.23.41", "secrecy", "serde", "serde_json", @@ -4319,12 +4347,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "lebe" version = "0.5.3" @@ -4478,9 +4500,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.32" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "loop9" @@ -4651,9 +4673,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" +checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" dependencies = [ "libc", ] @@ -6384,9 +6406,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.9" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" dependencies = [ "bytes", "cfg_aliases", @@ -6394,7 +6416,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.1.2", - "rustls 0.23.40", + "rustls 0.23.41", "socket2 0.6.4", "thiserror 2.0.18", "tokio", @@ -6404,9 +6426,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.14" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +checksum = "4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e" dependencies = [ "bytes", "getrandom 0.3.4", @@ -6414,7 +6436,7 @@ dependencies = [ "rand 0.9.4", "ring", "rustc-hash 2.1.2", - "rustls 0.23.40", + "rustls 0.23.41", "rustls-pki-types", "slab", "thiserror 2.0.18", @@ -6439,9 +6461,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.45" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] @@ -6486,7 +6508,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" dependencies = [ "chacha20", - "getrandom 0.4.2", + "getrandom 0.4.3", "rand_core 0.10.1", ] @@ -6722,7 +6744,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.40", + "rustls 0.23.41", "rustls-native-certs 0.8.4", "rustls-pki-types", "serde", @@ -6740,7 +6762,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 1.0.7", + "webpki-roots 1.0.8", ] [[package]] @@ -6795,9 +6817,9 @@ dependencies = [ [[package]] name = "ron" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4147b952f3f819eca0e99527022f7d6a8d05f111aeb0a62960c74eb283bec8fc" +checksum = "81116b9531d61eabc41aeb228e4b6b2435bcca3233b98cf3b3077d4e6e9debb3" dependencies = [ "bitflags 2.13.0", "once_cell", @@ -6912,9 +6934,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.40" +version = "0.23.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" dependencies = [ "aws-lc-rs", "log", @@ -7758,7 +7780,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix 1.1.4", "windows-sys 0.61.2", @@ -7855,9 +7877,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.49" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711a53c2d47bbd818258c498c8dbfe186a2526c631495cfe7e078567f86b8469" +checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327" dependencies = [ "deranged", "libc", @@ -7877,9 +7899,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.29" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71c652a3727a9cbb9a02f707f530b618ce00d0ccd762009c8c23bd191df3c17d" +checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935" dependencies = [ "num-conv", "time-core", @@ -8063,7 +8085,7 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.40", + "rustls 0.23.41", "tokio", ] @@ -8718,7 +8740,7 @@ dependencies = [ "flate2", "log", "once_cell", - "rustls 0.23.40", + "rustls 0.23.41", "rustls-pki-types", "serde", "serde_json", @@ -8814,11 +8836,11 @@ dependencies = [ [[package]] name = "uuid" -version = "1.23.3" +version = "1.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" +checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" dependencies = [ - "getrandom 0.4.2", + "getrandom 0.4.3", "js-sys", "serde_core", "wasm-bindgen", @@ -9163,23 +9185,14 @@ version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", @@ -9190,9 +9203,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.75" +version = "0.4.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503b14d284f2c8dac03b819967e155ea753f573586193b2b2c95990cb5d69280" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" dependencies = [ "js-sys", "wasm-bindgen", @@ -9200,9 +9213,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -9210,9 +9223,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", @@ -9223,35 +9236,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap 2.14.0", - "wasm-encoder", - "wasmparser", -] - [[package]] name = "wasm-streams" version = "0.4.2" @@ -9265,23 +9256,11 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags 2.13.0", - "hashbrown 0.15.5", - "indexmap 2.14.0", - "semver", -] - [[package]] name = "web-sys" -version = "0.3.102" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6430a72df5eb332242960fe84b3002a241163998241eb596d4f739b9757061d" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" dependencies = [ "js-sys", "wasm-bindgen", @@ -9303,14 +9282,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.7", + "webpki-roots 1.0.8", ] [[package]] name = "webpki-roots" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" +checksum = "bf85cb06032201fa7c6f829d7db5a7e5aa45bcc0655327713065f6f0576731bf" dependencies = [ "rustls-pki-types", ] @@ -9671,100 +9650,12 @@ dependencies = [ "memchr", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap 2.14.0", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags 2.13.0", - "indexmap 2.14.0", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap 2.14.0", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "write16" version = "1.0.0" @@ -9958,9 +9849,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" +checksum = "977347db8caa080403f6b6b7c1cda9479a8e869316f7e13a59b19076a40f94e3" [[package]] name = "zmij" diff --git a/lib/runtime/Cargo.toml b/lib/runtime/Cargo.toml index 7aa77c2b4151..cd710b2cc414 100644 --- a/lib/runtime/Cargo.toml +++ b/lib/runtime/Cargo.toml @@ -52,8 +52,11 @@ rmp-serde = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } tokio = { workspace = true } +tokio-rustls = { workspace = true } tokio-stream = { workspace = true } tokio-util = { workspace = true } +rustls = { workspace = true } +rustls-pemfile = { workspace = true } tower-http = { workspace = true } tracing = { workspace = true } mio = { workspace = true } @@ -107,6 +110,7 @@ k8s-openapi = { version = "0.26.0", features = ["v1_32"] } [dev-dependencies] criterion = { version = "0.5", features = ["async_tokio"] } +rcgen = { workspace = true } rstest = { version = "0.23.0" } temp-env = { version = "0.3.6" , features=["async_closure"] } stdio-override = {version= "0.2.0"} diff --git a/lib/runtime/examples/Cargo.lock b/lib/runtime/examples/Cargo.lock index 2bf02373f8fd..070f6e785a88 100644 --- a/lib/runtime/examples/Cargo.lock +++ b/lib/runtime/examples/Cargo.lock @@ -62,9 +62,9 @@ checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe" [[package]] name = "async-broadcast" @@ -170,15 +170,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-lc-rs" -version = "1.16.3" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f" +checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" dependencies = [ "aws-lc-sys", "zeroize", @@ -186,9 +186,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.40.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7" +checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" dependencies = [ "cc", "cmake", @@ -304,15 +304,15 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "blake3" -version = "1.8.4" +version = "1.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d2d5991425dfd0785aed03aedcf0b321d61975c9b5b3689c774a2610ae0b51e" +checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce" dependencies = [ "arrayref", "arrayvec", @@ -333,9 +333,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytemuck" @@ -351,18 +351,18 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" dependencies = [ "serde", ] [[package]] name = "cc" -version = "1.2.61" +version = "1.2.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" +checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" dependencies = [ "find-msvc-tools", "jobserver", @@ -394,9 +394,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chacha20" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", "cpufeatures 0.3.0", @@ -405,9 +405,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "num-traits", @@ -643,9 +643,9 @@ dependencies = [ [[package]] name = "dashmap" -version = "6.1.0" +version = "6.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -678,7 +678,6 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ - "powerfmt", "serde_core", ] @@ -768,9 +767,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -836,6 +835,8 @@ dependencies = [ "regex", "reqwest", "rmp-serde", + "rustls", + "rustls-pemfile", "serde", "serde_json", "socket2 0.5.10", @@ -843,6 +844,7 @@ dependencies = [ "tmq", "tokio", "tokio-rayon", + "tokio-rustls", "tokio-stream", "tokio-util", "tower-http", @@ -891,9 +893,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" dependencies = [ "serde", ] @@ -1004,13 +1006,12 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.27" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" dependencies = [ "cfg-if", "libc", - "libredox", ] [[package]] @@ -1194,25 +1195,22 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi 6.0.0", "rand_core 0.10.1", - "wasip2", - "wasip3", ] [[package]] name = "getset" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" +checksum = "6cf442baaabe4213ce7d1239afc26c039180b6456da2cededa316ae2c8a77a77" dependencies = [ - "proc-macro-error2", "proc-macro2", "quote", "syn", @@ -1232,9 +1230,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.13" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" +checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" dependencies = [ "atomic-waker", "bytes", @@ -1279,9 +1277,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "heck" @@ -1319,9 +1317,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -1370,9 +1368,9 @@ checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "hyper" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", @@ -1405,7 +1403,7 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots 1.0.7", + "webpki-roots 1.0.8", ] [[package]] @@ -1438,7 +1436,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.3", + "socket2 0.6.4", "tokio", "tower-service", "tracing", @@ -1550,12 +1548,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "ident_case" version = "1.0.1" @@ -1575,9 +1567,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", @@ -1590,9 +1582,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.17.0", - "serde", - "serde_core", + "hashbrown 0.17.1", ] [[package]] @@ -1627,16 +1617,6 @@ version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" -[[package]] -name = "iri-string" -version = "0.7.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "itertools" version = "0.14.0" @@ -1664,26 +1644,25 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.95" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] [[package]] name = "json-patch" -version = "4.1.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f300e415e2134745ef75f04562dd0145405c2f7fd92065db029ac4b16b57fe90" +checksum = "7421438de105a0827e44fadd05377727847d717c80ce29a229f85fd04c427b72" dependencies = [ "jsonptr", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror 2.0.18", ] [[package]] @@ -1733,9 +1712,9 @@ dependencies = [ [[package]] name = "kqueue" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" +checksum = "273c0752728918e0ac4976f2b275b6fefb9ecd400585dec929419f3844cd87b5" dependencies = [ "kqueue-sys", "libc", @@ -1743,11 +1722,11 @@ dependencies = [ [[package]] name = "kqueue-sys" -version = "1.0.4" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.13.0", "libc", ] @@ -1866,30 +1845,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" -[[package]] -name = "libredox" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" -dependencies = [ - "bitflags 2.11.1", - "libc", - "plain", - "redox_syscall 0.7.4", -] - [[package]] name = "linux-raw-sys" version = "0.12.1" @@ -1904,9 +1865,9 @@ checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "local-ip-address" -version = "0.6.12" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7b0187df4e614e42405b49511b82ff7a1774fbd9a816060ee465067847cac22" +checksum = "aa08fb2b1ec3ea84575e94b489d06d4ce0cbf052d12acd515838f50e3c3d63e3" dependencies = [ "libc", "neli", @@ -1924,9 +1885,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "lru" @@ -1960,9 +1921,9 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" [[package]] name = "mime" @@ -2016,7 +1977,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22f9786d56d972959e1408b6a93be6af13b9c1392036c5c1fafa08a1b0c6ee87" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "byteorder", "derive_builder", "getset", @@ -2060,7 +2021,7 @@ version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "filetime", "fsevent-sys", "inotify", @@ -2092,9 +2053,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-traits" @@ -2247,7 +2208,7 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.18", + "redox_syscall", "smallvec", "windows-link", ] @@ -2356,18 +2317,18 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.11" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" +checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.11" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" +checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", @@ -2396,12 +2357,6 @@ version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" - [[package]] name = "portable-atomic" version = "1.13.1" @@ -2503,9 +2458,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" +checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1" dependencies = [ "bytes", "prost-derive", @@ -2513,9 +2468,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7" +checksum = "03da047801ff44bb6a4d407d4860c05fd70bb81714e6b2f3812603d5b145b042" dependencies = [ "heck", "itertools", @@ -2534,9 +2489,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" +checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf" dependencies = [ "anyhow", "itertools", @@ -2547,9 +2502,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" +checksum = "f94967dc7688f3054c7fac87473ffae4cc4c3904800e2d9f5b857246d8963b0a" dependencies = [ "prost", ] @@ -2576,11 +2531,11 @@ dependencies = [ [[package]] name = "pulldown-cmark" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c3a14896dfa883796f1cb410461aef38810ea05f2b2c33c5aded3649095fdad" +checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "memchr", "unicase", ] @@ -2596,9 +2551,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.9" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" dependencies = [ "bytes", "cfg_aliases", @@ -2607,7 +2562,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.6.3", + "socket2 0.6.4", "thiserror 2.0.18", "tokio", "tracing", @@ -2616,9 +2571,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.14" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +checksum = "4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e" dependencies = [ "bytes", "getrandom 0.3.4", @@ -2644,16 +2599,16 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.3", + "socket2 0.6.4", "tracing", "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] @@ -2698,7 +2653,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" dependencies = [ "chacha20", - "getrandom 0.4.2", + "getrandom 0.4.3", "rand_core 0.10.1", ] @@ -2772,16 +2727,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", -] - -[[package]] -name = "redox_syscall" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a" -dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", ] [[package]] @@ -2806,9 +2752,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" dependencies = [ "aho-corasick", "memchr", @@ -2829,9 +2775,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "reqwest" @@ -2857,7 +2803,7 @@ dependencies = [ "pin-project-lite", "quinn", "rustls", - "rustls-native-certs 0.8.3", + "rustls-native-certs", "rustls-pki-types", "serde", "serde_json", @@ -2874,7 +2820,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 1.0.7", + "webpki-roots 1.0.8", ] [[package]] @@ -2931,7 +2877,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys", @@ -2940,9 +2886,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.39" +version = "0.23.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2c118cb077cca2822033836dfb1b975355dfb784b5e8da48f7b6c5db74e60e" +checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" dependencies = [ "aws-lc-rs", "log", @@ -2956,9 +2902,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -2966,6 +2912,15 @@ dependencies = [ "security-framework", ] +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "rustls-pki-types" version = "1.14.1" @@ -3064,7 +3019,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.0", "core-foundation", "core-foundation-sys", "libc", @@ -3140,9 +3095,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", @@ -3258,9 +3213,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook-registry" @@ -3302,9 +3257,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "socket2" @@ -3318,9 +3273,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -3356,9 +3311,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ "proc-macro2", "quote", @@ -3435,7 +3390,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix", "windows-sys 0.61.2", @@ -3492,12 +3447,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.47" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327" dependencies = [ "deranged", - "itoa", "libc", "num-conv", "num_threads", @@ -3509,15 +3463,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.27" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935" dependencies = [ "num-conv", "time-core", @@ -3573,7 +3527,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.3", + "socket2 0.6.4", "tokio-macros", "windows-sys 0.61.2", ] @@ -3711,9 +3665,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "tonic" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fec7c61a0695dc1887c1b53952990f3ad2e3a31453e1f49f10e75424943a93ec" +checksum = "ac2a5518c70fa84342385732db33fb3f44bc4cc748936eb5833d2df34d6445ef" dependencies = [ "async-trait", "axum", @@ -3728,7 +3682,7 @@ dependencies = [ "hyper-util", "percent-encoding", "pin-project", - "socket2 0.6.3", + "socket2 0.6.4", "sync_wrapper", "tokio", "tokio-rustls", @@ -3741,9 +3695,9 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1882ac3bf5ef12877d7ed57aad87e75154c11931c2ba7e6cde5e22d63522c734" +checksum = "c68f61875ac5293cf72e6c8cf0158086428c82c37229e98c840878f1706b0322" dependencies = [ "prettyplease", "proc-macro2", @@ -3753,9 +3707,9 @@ dependencies = [ [[package]] name = "tonic-prost" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55376a0bbaa4975a3f10d009ad763d8f4108f067c7c2e74f3001fb49778d309" +checksum = "50849f68853be452acf590cde0b146665b8d507b3b8af17261df47e02c209ea0" dependencies = [ "bytes", "prost", @@ -3764,9 +3718,9 @@ dependencies = [ [[package]] name = "tonic-prost-build" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3144df636917574672e93d0f56d7edec49f90305749c668df5101751bb8f95a" +checksum = "654e5643eff75d7f8c99197ce1440ed19a3474eada74c12bbac488b2cafdae27" dependencies = [ "prettyplease", "proc-macro2", @@ -3799,23 +3753,23 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.8" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ "base64", - "bitflags 2.11.1", + "bitflags 2.13.0", "bytes", "futures-util", "http", "http-body", - "iri-string", "mime", "pin-project-lite", "tower", "tower-layer", "tower-service", "tracing", + "url", ] [[package]] @@ -3957,9 +3911,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "ucd-trie" @@ -3988,12 +3942,6 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "unsafe-libyaml" version = "0.2.11" @@ -4033,11 +3981,11 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" dependencies = [ - "getrandom 0.4.2", + "getrandom 0.4.3", "js-sys", "serde_core", "wasm-bindgen", @@ -4118,27 +4066,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.118" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", @@ -4149,9 +4088,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.68" +version = "0.4.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f371d383f2fb139252e0bfac3b81b265689bf45b6874af544ffa4c975ac1ebf8" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" dependencies = [ "js-sys", "wasm-bindgen", @@ -4159,9 +4098,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.118" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4169,9 +4108,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.118" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", @@ -4182,35 +4121,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.118" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - [[package]] name = "wasm-streams" version = "0.4.2" @@ -4224,23 +4141,11 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags 2.11.1", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "web-sys" -version = "0.3.95" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" dependencies = [ "js-sys", "wasm-bindgen", @@ -4262,14 +4167,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.7", + "webpki-roots 1.0.8", ] [[package]] name = "webpki-roots" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" +checksum = "bf85cb06032201fa7c6f829d7db5a7e5aa45bcc0655327713065f6f0576731bf" dependencies = [ "rustls-pki-types", ] @@ -4573,100 +4478,12 @@ dependencies = [ "memchr", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags 2.11.1", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "writeable" version = "0.6.3" @@ -4687,9 +4504,9 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -4710,18 +4527,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", @@ -4730,9 +4547,9 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] @@ -4751,9 +4568,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" [[package]] name = "zeromq-src" diff --git a/lib/runtime/src/config/environment_names.rs b/lib/runtime/src/config/environment_names.rs index d70f8352c4fa..dc57324cd596 100644 --- a/lib/runtime/src/config/environment_names.rs +++ b/lib/runtime/src/config/environment_names.rs @@ -516,6 +516,32 @@ pub mod tcp_response_stream { /// Host/interface for the TCP response stream server. /// If unset, the server auto-detects a routable local IP. pub const DYN_TCP_RESPONSE_STREAM_HOST: &str = "DYN_TCP_RESPONSE_STREAM_HOST"; + + /// TCP request-plane TLS configuration + pub mod tls { + /// Path to the PEM certificate used by the TCP server. + /// When set together with DYN_TCP_TLS_KEY_PATH, TLS is enabled on the + /// TCP server. To enable TLS on the client side, also set + /// DYN_TCP_TLS_CA_CERT_PATH (or DYN_TCP_TLS_INSECURE for dev). + pub const DYN_TCP_TLS_CERT_PATH: &str = "DYN_TCP_TLS_CERT_PATH"; + + /// Path to the PEM private key for the TCP server certificate. + pub const DYN_TCP_TLS_KEY_PATH: &str = "DYN_TCP_TLS_KEY_PATH"; + + /// Path to the PEM CA certificate used by TCP clients to verify the server. + /// Required on the client side when the server uses a self-signed or internal CA. + pub const DYN_TCP_TLS_CA_CERT_PATH: &str = "DYN_TCP_TLS_CA_CERT_PATH"; + + /// Disable TLS certificate verification on the TCP client. Set to "true" to skip. + /// WARNING: Only for local development. Never use in production. + pub const DYN_TCP_TLS_INSECURE: &str = "DYN_TCP_TLS_INSECURE"; + + /// Override the TLS server name (SNI) used by TCP clients when verifying the + /// server certificate. When unset, the hostname extracted from the connection + /// address is used. Useful when connecting by IP to a server whose certificate + /// uses a DNS SAN. + pub const DYN_TCP_TLS_SERVER_NAME: &str = "DYN_TCP_TLS_SERVER_NAME"; + } } /// Event Plane transport environment variables @@ -740,6 +766,11 @@ mod tests { // TCP Response Stream tcp_response_stream::DYN_TCP_RESPONSE_STREAM_PORT, tcp_response_stream::DYN_TCP_RESPONSE_STREAM_HOST, + tcp_response_stream::tls::DYN_TCP_TLS_CERT_PATH, + tcp_response_stream::tls::DYN_TCP_TLS_KEY_PATH, + tcp_response_stream::tls::DYN_TCP_TLS_CA_CERT_PATH, + tcp_response_stream::tls::DYN_TCP_TLS_INSECURE, + tcp_response_stream::tls::DYN_TCP_TLS_SERVER_NAME, // Event Plane event_plane::DYN_EVENT_PLANE, event_plane::DYN_EVENT_PLANE_CODEC, diff --git a/lib/runtime/src/lib.rs b/lib/runtime/src/lib.rs index ef327281c4e0..fc9590033689 100644 --- a/lib/runtime/src/lib.rs +++ b/lib/runtime/src/lib.rs @@ -45,6 +45,7 @@ pub mod service; pub mod slug; pub mod storage; pub mod system_health; +pub mod tls_utils; pub mod traits; pub mod transports; pub mod utils; diff --git a/lib/runtime/src/pipeline/network/tcp/client.rs b/lib/runtime/src/pipeline/network/tcp/client.rs index f1cc1fc920ca..eff7061f5233 100644 --- a/lib/runtime/src/pipeline/network/tcp/client.rs +++ b/lib/runtime/src/pipeline/network/tcp/client.rs @@ -4,14 +4,18 @@ use std::sync::Arc; use futures::{SinkExt, StreamExt}; -use tokio::io::{AsyncReadExt, ReadHalf, WriteHalf}; +use rustls::pki_types::ServerName; +use tokio::io::AsyncReadExt; use tokio::{ - io::AsyncWriteExt, net::TcpStream, time::{self, Duration, Instant}, }; +use tokio_rustls::TlsConnector; use tokio_util::codec::{FramedRead, FramedWrite}; +type BoxRead = Box; +type BoxWrite = Box; + use prometheus::IntCounter; use super::{CallHomeHandshake, ControlMessage, TcpStreamConnectionInfo}; @@ -62,6 +66,27 @@ impl TcpClient { } } + /// Connect to `address` and return split, boxed read/write halves. + /// When any TCP TLS env var is configured the connection is upgraded to TLS. + async fn connect_and_split(address: &str) -> anyhow::Result<(BoxRead, BoxWrite)> { + let stream = TcpClient::connect(address).await?; + if let Some(connector) = get_tls_connector()? { + let server_name = tls_server_name(address)?; + let tls_stream = tokio::time::timeout( + std::time::Duration::from_secs(10), + connector.connect(server_name, stream), + ) + .await + .with_context(|| format!("TLS handshake timed out connecting to {address}"))? + .with_context(|| format!("TLS handshake failed connecting to {address}"))?; + let (r, w) = tokio::io::split(tls_stream); + Ok((Box::new(r), Box::new(w))) + } else { + let (r, w) = tokio::io::split(stream); + Ok((Box::new(r), Box::new(w))) + } + } + pub async fn create_response_stream( context: Arc, info: ConnectionInfo, @@ -86,9 +111,7 @@ impl TcpClient { )); } - let stream = TcpClient::connect(&info.address).await?; - let peer_port = stream.peer_addr().ok().map(|addr| addr.port()); - let (read_half, write_half) = tokio::io::split(stream); + let (read_half, write_half) = TcpClient::connect_and_split(&info.address).await?; let framed_reader = FramedRead::new(read_half, TwoPartCodec::default()); let mut framed_writer = FramedWrite::new(write_half, TwoPartCodec::default()); @@ -146,14 +169,9 @@ impl TcpClient { // Spawn the connection monitor; errors are already logged inside // wait_for_connection_tasks, so the Result is intentionally dropped. tokio::spawn(async move { - let _ = wait_for_connection_tasks( - reader_task, - writer_task, - monitor_context, - peer_port, - subject, - ) - .await; + let _ = + wait_for_connection_tasks(reader_task, writer_task, monitor_context, None, subject) + .await; }); // set up the prologue for the stream @@ -206,8 +224,7 @@ impl TcpClient { )); } - let stream = TcpClient::connect(&info.address).await?; - let (read_half, write_half) = tokio::io::split(stream); + let (read_half, write_half) = TcpClient::connect_and_split(&info.address).await?; let framed_reader = FramedRead::new(read_half, TwoPartCodec::default()); let mut framed_writer = FramedWrite::new(write_half, TwoPartCodec::default()); @@ -243,8 +260,85 @@ impl TcpClient { } } +/// Cached TCP TLS connector — built once from env vars on first TCP connection, reused for every +/// subsequent connection. `None` means plaintext; `Some(connector)` means TLS. +/// +/// The config is intentionally immutable after the first build: `rustls::ClientConfig` is +/// cheaply `Arc`-cloned per-connection, so sharing it is free. Cert rotation requires a process +/// restart; this is consistent with how most services handle TLS credential updates. +static TCP_TLS_CONNECTOR: once_cell::sync::OnceCell> = + once_cell::sync::OnceCell::new(); + +/// Return the process-wide `TlsConnector`, initialising it on first call. +/// +/// Fails fast if any TLS env var is present but the configuration is incomplete +/// (e.g. cert without key, or client cert without CA / insecure flag). +fn get_tls_connector() -> anyhow::Result<&'static Option> { + TCP_TLS_CONNECTOR.get_or_try_init(build_tls_connector_from_env) +} + +fn build_tls_connector_from_env() -> anyhow::Result> { + use crate::config::environment_names::tcp_response_stream::tls as env; + let ca_cert_path = std::env::var(env::DYN_TCP_TLS_CA_CERT_PATH).ok(); + let insecure = std::env::var(env::DYN_TCP_TLS_INSECURE) + .map(|v| v.eq_ignore_ascii_case("true")) + .unwrap_or(false); + + let tls_requested = ca_cert_path.is_some() || insecure; + if !tls_requested { + // Warn if the server side has TLS configured — a plaintext client connecting to a + // TLS server will fail with an opaque framing error rather than a clear TLS error. + let server_tls_set = std::env::var(env::DYN_TCP_TLS_CERT_PATH).is_ok(); + if server_tls_set { + tracing::warn!( + "TCP client is running in plaintext mode but {} is set. \ + Set {} (or {} for dev) to enable client-side TLS.", + env::DYN_TCP_TLS_CERT_PATH, + env::DYN_TCP_TLS_CA_CERT_PATH, + env::DYN_TCP_TLS_INSECURE, + ); + } + return Ok(None); + } + if !insecure && ca_cert_path.is_none() { + anyhow::bail!( + "TCP TLS is enabled but {} is not set and {} is not true; \ + provide a CA cert or set insecure mode for development", + env::DYN_TCP_TLS_CA_CERT_PATH, + env::DYN_TCP_TLS_INSECURE, + ); + } + + let tls_config = crate::tls_utils::client_tls_config( + ca_cert_path.as_deref().map(std::path::Path::new), + insecure, + )?; + Ok(Some(TlsConnector::from(Arc::new(tls_config)))) +} + +/// Extract the TLS `ServerName` for an outbound connection. +/// +/// Checks `DYN_TCP_TLS_SERVER_NAME` first (explicit override), then falls back +/// to the host part of `address`. Handles both IPv4 and IPv6 socket addresses. +fn tls_server_name(address: &str) -> anyhow::Result> { + use crate::config::environment_names::tcp_response_stream::tls as env; + let name = std::env::var(env::DYN_TCP_TLS_SERVER_NAME).unwrap_or_else(|_| { + // Parse as SocketAddr first — handles IPv6 like [::1]:443 correctly. + if let Ok(sock_addr) = address.parse::() { + sock_addr.ip().to_string() + } else { + // host:port string — strip the last colon-delimited segment. + match address.rfind(':') { + Some(pos) => address[..pos].to_owned(), + None => address.to_owned(), + } + } + }); + ServerName::try_from(name).map_err(|e| anyhow::anyhow!("invalid TLS server name: {e}")) +} + async fn handle_request_reader( - mut framed_reader: FramedRead, TwoPartCodec>, + mut framed_reader: FramedRead, bytes_tx: tokio::sync::mpsc::Sender, context: Arc, cancellation_counter: Option, @@ -351,8 +445,8 @@ async fn handle_request_reader( } async fn wait_for_connection_tasks( - reader_task: tokio::task::JoinHandle, TwoPartCodec>>, - writer_task: tokio::task::JoinHandle, TwoPartCodec>>>, + reader_task: tokio::task::JoinHandle>, + writer_task: tokio::task::JoinHandle>>, context: Arc, peer_port: Option, subject: String, @@ -374,39 +468,36 @@ async fn wait_for_connection_tasks( } }; - let writer = match writer_task.await { - Ok(writer) => writer, - Err(writer_err) => { + match writer_task.await { + Ok(Ok(_)) => {} + Ok(Err(e)) => { tracing::error!( subject = %subject, peer_port = ?peer_port, - err = ?writer_err, - "writer task failed to join" + err = ?e, + "writer task returned error" ); - return Err(writer_err.into()); + return Err(e); } - }; - - let reader = reader.into_inner(); - let writer = match writer { - Ok(writer) => writer.into_inner(), - Err(e) => { + Err(writer_err) => { tracing::error!( subject = %subject, peer_port = ?peer_port, - err = ?e, - "writer task returned error" + err = ?writer_err, + "writer task failed to join" ); - return Err(e); + return Err(writer_err.into()); } - }; + } - let stream = reader.unsplit(writer); - wait_for_server_shutdown(stream, context).await + // Drain the read half until the server closes the connection (FIN). + // The write half is dropped above when the FramedWrite is discarded. + let read_half = reader.into_inner(); + wait_for_server_shutdown(read_half, context).await } async fn wait_for_server_shutdown( - mut stream: TcpStream, + mut reader: BoxRead, context: Arc, ) -> Result<()> { // `handle_writer` skips the closing sentinel on both `killed` and @@ -422,7 +513,7 @@ async fn wait_for_server_shutdown( let mut buf = [0u8; 1024]; let deadline = Instant::now() + Duration::from_secs(10); loop { - let n = time::timeout_at(deadline, stream.read(&mut buf)) + let n = time::timeout_at(deadline, reader.read(&mut buf)) .await .inspect_err(|_| { tracing::debug!("server did not close socket within the deadline"); @@ -440,11 +531,11 @@ async fn wait_for_server_shutdown( } async fn handle_reader( - framed_reader: FramedRead, TwoPartCodec>, + framed_reader: FramedRead, context: Arc, alive_tx: tokio::sync::oneshot::Sender<()>, cancellation_counter: Option, -) -> FramedRead, TwoPartCodec> { +) -> FramedRead { let mut framed_reader = framed_reader; let mut alive_tx = alive_tx; // Set on every cancellation arm; counted once after the loop. @@ -531,11 +622,11 @@ async fn handle_reader( } async fn handle_writer( - mut framed_writer: FramedWrite, TwoPartCodec>, + mut framed_writer: FramedWrite, mut bytes_rx: tokio::sync::mpsc::Receiver, alive_rx: tokio::sync::oneshot::Receiver<()>, context: Arc, -) -> Result, TwoPartCodec>> { +) -> Result> { // Only send sentinel for normal channel closure let mut send_sentinel = true; @@ -602,7 +693,7 @@ mod tests { struct WriterHarness { server: tokio::net::TcpStream, - framed_writer: FramedWrite, TwoPartCodec>, + framed_writer: FramedWrite, bytes_tx: mpsc::Sender, bytes_rx: mpsc::Receiver, alive_tx: oneshot::Sender<()>, @@ -614,7 +705,8 @@ mod tests { async fn writer_harness() -> WriterHarness { let (client, server) = create_tcp_pair().await; let (_, write_half) = tokio::io::split(client); - let framed_writer = FramedWrite::new(write_half, TwoPartCodec::default()); + let framed_writer = + FramedWrite::new(Box::new(write_half) as BoxWrite, TwoPartCodec::default()); let (bytes_tx, bytes_rx) = mpsc::channel(64); let (alive_tx, alive_rx) = oneshot::channel::<()>(); @@ -993,7 +1085,7 @@ mod tests { let context: Arc = controller; let result = tokio::time::timeout( std::time::Duration::from_millis(50), - wait_for_server_shutdown(client, context), + wait_for_server_shutdown(Box::new(client), context), ) .await; @@ -1010,8 +1102,10 @@ mod tests { async fn test_connection_monitor_skips_fin_wait_after_read_error_kills_context() { let (client, mut server) = create_tcp_pair().await; let (read_half, write_half) = tokio::io::split(client); - let framed_reader = FramedRead::new(read_half, TwoPartCodec::default()); - let framed_writer = FramedWrite::new(write_half, TwoPartCodec::default()); + let framed_reader = + FramedRead::new(Box::new(read_half) as BoxRead, TwoPartCodec::default()); + let framed_writer = + FramedWrite::new(Box::new(write_half) as BoxWrite, TwoPartCodec::default()); let (_bytes_tx, bytes_rx) = mpsc::channel(64); let (alive_tx, alive_rx) = oneshot::channel::<()>(); let controller = Arc::new(Controller::default()); @@ -1068,22 +1162,20 @@ mod tests { // Reader task that panics immediately. The explicit JoinHandle type // pins the inferred return type to the one wait_for_connection_tasks // expects; `panic!` is type `!`, which coerces to that type. - let reader_task: tokio::task::JoinHandle< - FramedRead, TwoPartCodec>, - > = tokio::spawn(async { - panic!("simulated reader panic to trigger JoinError"); - }); + let reader_task: tokio::task::JoinHandle> = + tokio::spawn(async { + panic!("simulated reader panic to trigger JoinError"); + }); // Writer task that would block indefinitely waiting on application // bytes. Under the pre-fix `tokio::join!` implementation, this would // prevent the function from returning when the reader panicked. // After the fix, the abort drives this task to completion promptly. - let writer_task: tokio::task::JoinHandle< - Result, TwoPartCodec>>, - > = tokio::spawn(async { - std::future::pending::<()>().await; - unreachable!() - }); + let writer_task: tokio::task::JoinHandle>> = + tokio::spawn(async { + std::future::pending::<()>().await; + unreachable!() + }); let controller = Arc::new(Controller::default()); let context: Arc = controller.clone(); @@ -1120,8 +1212,8 @@ mod tests { // ==================== handle_reader tests ==================== struct ReaderHarness { - framed_server: FramedWrite, TwoPartCodec>, - framed_reader: FramedRead, TwoPartCodec>, + framed_server: FramedWrite, + framed_reader: FramedRead, alive_tx: oneshot::Sender<()>, alive_rx: oneshot::Receiver<()>, controller: Arc, @@ -1133,8 +1225,10 @@ mod tests { let (read_half, _write_half) = tokio::io::split(client); let (_server_read, server_write) = tokio::io::split(server); - let framed_reader = FramedRead::new(read_half, TwoPartCodec::default()); - let framed_server = FramedWrite::new(server_write, TwoPartCodec::default()); + let framed_reader = + FramedRead::new(Box::new(read_half) as BoxRead, TwoPartCodec::default()); + let framed_server = + FramedWrite::new(Box::new(server_write) as BoxWrite, TwoPartCodec::default()); let (alive_tx, alive_rx) = oneshot::channel::<()>(); let controller = Arc::new(Controller::default()); @@ -1476,8 +1570,8 @@ mod tests { // ==================== handle_request_reader tests ==================== struct RequestReaderHarness { - framed_server: FramedWrite, TwoPartCodec>, - framed_reader: FramedRead, TwoPartCodec>, + framed_server: FramedWrite, + framed_reader: FramedRead, bytes_tx: mpsc::Sender, bytes_rx: mpsc::Receiver, controller: Arc, @@ -1488,8 +1582,10 @@ mod tests { let (read_half, _write_half) = tokio::io::split(client); let (_server_read, server_write) = tokio::io::split(server); - let framed_reader = FramedRead::new(read_half, TwoPartCodec::default()); - let framed_server = FramedWrite::new(server_write, TwoPartCodec::default()); + let framed_reader = + FramedRead::new(Box::new(read_half) as BoxRead, TwoPartCodec::default()); + let framed_server = + FramedWrite::new(Box::new(server_write) as BoxWrite, TwoPartCodec::default()); let (bytes_tx, bytes_rx) = mpsc::channel::(64); let controller = Arc::new(Controller::default()); @@ -1811,4 +1907,76 @@ mod tests { "consumer drop must not count as cancellation" ); } + + // ── TLS connector and SNI tests ────────────────────────────────────────── + + fn make_ca_file() -> tempfile::NamedTempFile { + use std::io::Write; + let key_pair = rcgen::KeyPair::generate().unwrap(); + let cert = rcgen::CertificateParams::new(vec!["localhost".to_string()]) + .unwrap() + .self_signed(&key_pair) + .unwrap(); + let mut f = tempfile::NamedTempFile::new().unwrap(); + f.write_all(cert.pem().as_bytes()).unwrap(); + f + } + + #[test] + fn connector_no_env_vars_is_plaintext() { + temp_env::with_vars_unset(["DYN_TCP_TLS_CA_CERT_PATH", "DYN_TCP_TLS_INSECURE"], || { + assert!(build_tls_connector_from_env().unwrap().is_none()); + }); + } + + #[test] + fn connector_insecure_is_tls() { + temp_env::with_vars( + [ + ("DYN_TCP_TLS_INSECURE", Some("true")), + ("DYN_TCP_TLS_CA_CERT_PATH", None), + ], + || assert!(build_tls_connector_from_env().unwrap().is_some()), + ); + } + + #[test] + fn connector_with_ca_is_tls() { + let ca = make_ca_file(); + temp_env::with_vars( + [( + "DYN_TCP_TLS_CA_CERT_PATH", + Some(ca.path().to_str().unwrap()), + )], + || assert!(build_tls_connector_from_env().unwrap().is_some()), + ); + } + + #[test] + fn sni_parsing() { + temp_env::with_var_unset("DYN_TCP_TLS_SERVER_NAME", || { + assert!(matches!( + tls_server_name("127.0.0.1:8080").unwrap(), + ServerName::IpAddress(_) + )); + assert!(matches!( + tls_server_name("worker-0.dynamo-system.svc.cluster.local:8080").unwrap(), + ServerName::DnsName(_) + )); + assert!(matches!( + tls_server_name("[::1]:8080").unwrap(), + ServerName::IpAddress(_) + )); + }); + temp_env::with_var( + "DYN_TCP_TLS_SERVER_NAME", + Some("my-server.example.com"), + || { + assert!(matches!( + tls_server_name("127.0.0.1:8080").unwrap(), + ServerName::DnsName(_) + )); + }, + ); + } } diff --git a/lib/runtime/src/pipeline/network/tcp/server.rs b/lib/runtime/src/pipeline/network/tcp/server.rs index fbafc8a228a0..10fb4c450f7d 100644 --- a/lib/runtime/src/pipeline/network/tcp/server.rs +++ b/lib/runtime/src/pipeline/network/tcp/server.rs @@ -9,8 +9,10 @@ use std::{ sync::Arc, time::Duration, }; +use tokio::io::{AsyncRead, AsyncWrite}; use tokio::sync::Mutex; use tokio::time::Instant; +use tokio_rustls::TlsAcceptor; /// Tombstone lifetime. Bridges the `register()` → `associate_instance()` /// window (sub-millisecond in practice); 5s bounds the set by recent worker @@ -226,7 +228,12 @@ impl TcpStreamServer { let state = Arc::new(Mutex::new(State::default())); - let local_port = Self::start(local_ip.clone(), options.port, state.clone()) + // Build TLS acceptor from environment if cert+key paths are configured. + let tls_acceptor = Self::build_tls_acceptor().map_err(|e| { + PipelineError::Generic(format!("Failed to build TCP TLS acceptor: {}", e)) + })?; + + let local_port = Self::start(local_ip.clone(), options.port, state.clone(), tls_acceptor) .await .map_err(|e| { PipelineError::Generic(format!("Failed to start TcpStreamServer: {}", e)) @@ -361,8 +368,51 @@ impl TcpStreamServer { state.removed_instances.remove(id); } + /// Build a TLS acceptor from env vars if `DYN_TCP_TLS_CERT_PATH` and + /// `DYN_TCP_TLS_KEY_PATH` are set. + fn build_tls_acceptor() -> anyhow::Result>> { + use crate::config::environment_names::tcp_response_stream::tls as env; + let cert_path = std::env::var(env::DYN_TCP_TLS_CERT_PATH).ok(); + let key_path = std::env::var(env::DYN_TCP_TLS_KEY_PATH).ok(); + match (cert_path, key_path) { + (Some(cert), Some(key)) => { + let server_config = + crate::tls_utils::server_tls_config(cert.as_ref(), key.as_ref())?; + tracing::info!("TCP server: TLS enabled"); + Ok(Some(Arc::new(TlsAcceptor::from(Arc::new(server_config))))) + } + (None, None) => { + // Warn if the client side has TLS configured — mixing plaintext server with + // TLS client (or vice versa) results in failed connections that are hard to debug. + let client_tls_set = std::env::var(env::DYN_TCP_TLS_CA_CERT_PATH).is_ok() + || std::env::var(env::DYN_TCP_TLS_INSECURE) + .map(|v| v.eq_ignore_ascii_case("true")) + .unwrap_or(false); + if client_tls_set { + tracing::warn!( + "TCP server is running in plaintext mode but client TLS env vars are set. \ + Set {} and {} to enable server-side TLS, or unset client TLS vars.", + env::DYN_TCP_TLS_CERT_PATH, + env::DYN_TCP_TLS_KEY_PATH, + ); + } + Ok(None) + } + _ => anyhow::bail!( + "Both {} and {} must be set to enable TCP TLS", + env::DYN_TCP_TLS_CERT_PATH, + env::DYN_TCP_TLS_KEY_PATH + ), + } + } + #[allow(clippy::await_holding_lock)] - async fn start(local_ip: String, local_port: u16, state: Arc>) -> Result { + async fn start( + local_ip: String, + local_port: u16, + state: Arc>, + tls_acceptor: Option>, + ) -> Result { let addr = format!("{}:{}", local_ip, local_port); let state_clone = state.clone(); let mut guard = state.lock().await; @@ -370,7 +420,7 @@ impl TcpStreamServer { panic!("TcpStreamServer already started"); } let (ready_tx, ready_rx) = tokio::sync::oneshot::channel::>(); - let handle = tokio::spawn(tcp_listener(addr, state_clone, ready_tx)); + let handle = tokio::spawn(tcp_listener(addr, state_clone, tls_acceptor, ready_tx)); guard.handle = Some(handle); drop(guard); let local_port = ready_rx.await??; @@ -511,6 +561,10 @@ impl ResponseService for TcpStreamServer { } } +// Type aliases for boxed split halves used throughout the nested handlers below. +type BoxRead = Box; +type BoxWrite = Box; + // this method listens on a tcp port for incoming connections // new connections are expected to send a protocol specific handshake // for us to determine the subject they are interested in, in this case, @@ -520,6 +574,7 @@ impl ResponseService for TcpStreamServer { async fn tcp_listener( addr: String, state: Arc>, + tls_acceptor: Option>, read_tx: tokio::sync::oneshot::Sender>, ) -> Result<()> { let listener = tokio::net::TcpListener::bind(&addr) @@ -575,13 +630,40 @@ async fn tcp_listener( } } - tokio::spawn(handle_connection(stream, state.clone())); + // Spawn per-connection so the accept loop is never blocked by a slow + // TLS handshake. The handshake is bounded by a 10-second timeout. + let state_clone = state.clone(); + let tls_acceptor_clone = tls_acceptor.clone(); + tokio::spawn(async move { + let (reader, writer) = if let Some(ref tls) = tls_acceptor_clone { + match tokio::time::timeout(std::time::Duration::from_secs(10), tls.accept(stream)) + .await + { + Ok(Ok(tls_stream)) => { + let (r, w) = tokio::io::split(tls_stream); + (Box::new(r) as BoxRead, Box::new(w) as BoxWrite) + } + Ok(Err(e)) => { + tracing::warn!("TLS handshake failed: {e}"); + return; + } + Err(_) => { + tracing::warn!("TLS handshake timed out"); + return; + } + } + } else { + let (r, w) = tokio::io::split(stream); + (Box::new(r) as BoxRead, Box::new(w) as BoxWrite) + }; + handle_connection(reader, writer, state_clone).await; + }); } // #[instrument(level = "trace"), skip(state)] // todo - clone before spawn and trace process_stream - async fn handle_connection(stream: tokio::net::TcpStream, state: Arc>) { - let result = process_stream(stream, state).await; + async fn handle_connection(reader: BoxRead, writer: BoxWrite, state: Arc>) { + let result = process_stream(reader, writer, state).await; match result { Ok(_) => tracing::trace!("successfully processed tcp connection"), Err(e) => { @@ -594,20 +676,22 @@ async fn tcp_listener( /// This method is responsible for the internal tcp stream handshake /// The handshake will specialize the stream as a request/sender or response/receiver stream - async fn process_stream(stream: tokio::net::TcpStream, state: Arc>) -> Result<()> { - // split the socket in to a reader and writer - let (read_half, write_half) = tokio::io::split(stream); - + async fn process_stream( + read_half: BoxRead, + write_half: BoxWrite, + state: Arc>, + ) -> Result<()> { // attach the codec to the reader and writer to get framed readers and writers let mut framed_reader = FramedRead::new(read_half, TwoPartCodec::default()); let framed_writer = FramedWrite::new(write_half, TwoPartCodec::default()); // the internal tcp [`CallHomeHandshake`] connects the socket to the requester // here we await this first message as a raw bytes two part message - let first_message = framed_reader - .next() - .await - .ok_or(error!("Connection closed without a ControlMessage"))??; + let first_message = + tokio::time::timeout(std::time::Duration::from_secs(10), framed_reader.next()) + .await + .map_err(|_| error!("Timed out waiting for CallHomeHandshake"))? + .ok_or(error!("Connection closed without a ControlMessage"))??; // we await on the raw bytes which should come in as a header only message // todo - improve error handling - check for no data @@ -647,8 +731,8 @@ async fn tcp_listener( async fn process_request_stream( subject: String, state: Arc>, - reader: FramedRead, TwoPartCodec>, - writer: FramedWrite, TwoPartCodec>, + reader: FramedRead, + writer: FramedWrite, ) -> Result<()> { // Request stream is unidirectional; we don't read from the downstream. drop(reader); @@ -709,7 +793,7 @@ async fn tcp_listener( /// The downstream `handle_request_reader` matches on the received variant /// and reacts accordingly. async fn request_stream_send_handler( - mut framed_writer: FramedWrite, TwoPartCodec>, + mut framed_writer: FramedWrite, mut request_rx: mpsc::Receiver, context: Arc, ) { @@ -768,8 +852,8 @@ async fn tcp_listener( async fn process_response_stream( subject: String, state: Arc>, - mut reader: FramedRead, TwoPartCodec>, - writer: FramedWrite, TwoPartCodec>, + mut reader: FramedRead, + writer: FramedWrite, ) -> Result<()> { let response_stream = { let mut guard = state.lock().await; @@ -797,6 +881,8 @@ async fn tcp_listener( // the [`Prologue`] // there must be a second control message it indicate the other segment's generate method was successful + // No timeout here: the worker sends the prologue only after generate() setup completes, + // which can take arbitrarily long (model load, queue delay, cold start). let prologue = reader .next() .await @@ -872,7 +958,7 @@ async fn tcp_listener( } async fn network_receive_handler( - mut framed_reader: FramedRead, TwoPartCodec>, + mut framed_reader: FramedRead, response_tx: mpsc::Sender, control_tx: mpsc::Sender, context: Arc, @@ -966,7 +1052,7 @@ async fn tcp_listener( } async fn network_send_handler( - socket_tx: FramedWrite, TwoPartCodec>, + socket_tx: FramedWrite, control_rx: mpsc::Receiver, ) { let mut socket_tx = socket_tx; @@ -1036,9 +1122,68 @@ mod tests { use crate::engine::AsyncEngineContextProvider; use crate::pipeline::Context; use crate::pipeline::network::DEFAULT_SEND_BUFFER_COUNT; + use std::io::Write; + use tempfile::NamedTempFile; use tokio::io::{AsyncWriteExt, ReadHalf, WriteHalf}; use tokio::net::TcpStream; + fn make_cert_files() -> (NamedTempFile, NamedTempFile) { + let key_pair = rcgen::KeyPair::generate().unwrap(); + let cert = rcgen::CertificateParams::new(vec!["localhost".to_string()]) + .unwrap() + .self_signed(&key_pair) + .unwrap(); + let mut cert_file = NamedTempFile::new().unwrap(); + cert_file.write_all(cert.pem().as_bytes()).unwrap(); + let mut key_file = NamedTempFile::new().unwrap(); + key_file + .write_all(key_pair.serialize_pem().as_bytes()) + .unwrap(); + (cert_file, key_file) + } + + #[test] + fn build_tls_acceptor_no_env_vars_is_plaintext() { + temp_env::with_vars_unset(["DYN_TCP_TLS_CERT_PATH", "DYN_TCP_TLS_KEY_PATH"], || { + assert!(TcpStreamServer::build_tls_acceptor().unwrap().is_none()); + }); + } + + #[test] + fn build_tls_acceptor_partial_config_errors() { + let (cert, key) = make_cert_files(); + let cert_str = cert.path().to_str().unwrap(); + let key_str = key.path().to_str().unwrap(); + // only cert + temp_env::with_vars( + [ + ("DYN_TCP_TLS_CERT_PATH", Some(cert_str)), + ("DYN_TCP_TLS_KEY_PATH", None), + ], + || assert!(TcpStreamServer::build_tls_acceptor().is_err()), + ); + // only key + temp_env::with_vars( + [ + ("DYN_TCP_TLS_CERT_PATH", None), + ("DYN_TCP_TLS_KEY_PATH", Some(key_str)), + ], + || assert!(TcpStreamServer::build_tls_acceptor().is_err()), + ); + } + + #[test] + fn build_tls_acceptor_both_paths_is_tls() { + let (cert, key) = make_cert_files(); + temp_env::with_vars( + [ + ("DYN_TCP_TLS_CERT_PATH", Some(cert.path().to_str().unwrap())), + ("DYN_TCP_TLS_KEY_PATH", Some(key.path().to_str().unwrap())), + ], + || assert!(TcpStreamServer::build_tls_acceptor().unwrap().is_some()), + ); + } + // Mock resolver that always fails to simulate the fallback scenario struct FailingIpResolver; diff --git a/lib/runtime/src/tls_utils.rs b/lib/runtime/src/tls_utils.rs new file mode 100644 index 000000000000..e0b20d263cf7 --- /dev/null +++ b/lib/runtime/src/tls_utils.rs @@ -0,0 +1,215 @@ +// SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! Shared TLS utilities for the Dynamo runtime. +//! +//! Provides helpers for loading PEM certificates and building rustls +//! `ServerConfig` / `ClientConfig` objects for transport-layer security. + +use std::{path::Path, sync::Arc}; + +use anyhow::{Context, Result}; +use rustls::{ClientConfig, RootCertStore, ServerConfig}; +use rustls_pemfile::{certs, private_key}; + +/// Build a rustls `ServerConfig` from PEM certificate and key files. +pub fn server_tls_config(cert_path: &Path, key_path: &Path) -> Result { + let cert_pem = std::fs::read(cert_path) + .with_context(|| format!("reading cert: {}", cert_path.display()))?; + let key_pem = + std::fs::read(key_path).with_context(|| format!("reading key: {}", key_path.display()))?; + + let cert_chain = certs(&mut cert_pem.as_slice()) + .collect::, _>>() + .context("parsing certificate PEM")?; + + let key = private_key(&mut key_pem.as_slice()) + .context("parsing private key PEM")? + .context("no private key found in PEM")?; + + let provider = Arc::new(rustls::crypto::ring::default_provider()); + let config = ServerConfig::builder_with_provider(provider) + .with_safe_default_protocol_versions() + .context("configuring TLS protocol versions")? + .with_no_client_auth() + .with_single_cert(cert_chain, key) + .context("building ServerConfig")?; + + Ok(config) +} + +/// Build a rustls `ClientConfig` for outbound TLS connections. +/// +/// - `ca_cert_path`: trust this CA for verifying the server certificate. +/// When `None`, the root store is empty — supply a CA cert or use `insecure`. +/// - `insecure`: skip certificate verification entirely. **Dev/test only.** +pub fn client_tls_config(ca_cert_path: Option<&Path>, insecure: bool) -> Result { + let provider = Arc::new(rustls::crypto::ring::default_provider()); + + if insecure { + tracing::warn!( + "TCP TLS certificate verification is DISABLED — \ + this must not be used in production" + ); + let config = ClientConfig::builder_with_provider(provider) + .with_safe_default_protocol_versions() + .context("configuring TLS protocol versions")? + .dangerous() + .with_custom_certificate_verifier(Arc::new(NoVerifier)) + .with_no_client_auth(); + return Ok(config); + } + + let mut root_store = RootCertStore::empty(); + if let Some(ca_path) = ca_cert_path { + let ca_pem = std::fs::read(ca_path) + .with_context(|| format!("reading CA cert: {}", ca_path.display()))?; + let ca_certs = certs(&mut ca_pem.as_slice()) + .collect::, _>>() + .context("parsing CA certificate PEM")?; + for cert in ca_certs { + root_store + .add(cert) + .context("adding CA certificate to root store")?; + } + if root_store.is_empty() { + anyhow::bail!( + "CA certificate store is empty after parsing {}; \ + ensure the file contains at least one valid PEM certificate", + ca_path.display() + ); + } + } + // When no CA cert is provided, the root store is empty — the caller must + // supply a CA cert or use `insecure = true`. This is intentional: in + // cluster deployments, certs are issued by an internal CA and system roots + // are not relevant. + + let config = ClientConfig::builder_with_provider(provider) + .with_safe_default_protocol_versions() + .context("configuring TLS protocol versions")? + .with_root_certificates(root_store) + .with_no_client_auth(); + + Ok(config) +} + +/// Certificate verifier that accepts any certificate. +/// **Only for development/testing. Never use in production.** +#[derive(Debug)] +struct NoVerifier; + +impl rustls::client::danger::ServerCertVerifier for NoVerifier { + fn verify_server_cert( + &self, + _end_entity: &rustls::pki_types::CertificateDer<'_>, + _intermediates: &[rustls::pki_types::CertificateDer<'_>], + _server_name: &rustls::pki_types::ServerName<'_>, + _ocsp_response: &[u8], + _now: rustls::pki_types::UnixTime, + ) -> std::result::Result { + Ok(rustls::client::danger::ServerCertVerified::assertion()) + } + + fn verify_tls12_signature( + &self, + _message: &[u8], + _cert: &rustls::pki_types::CertificateDer<'_>, + _dss: &rustls::DigitallySignedStruct, + ) -> std::result::Result { + Ok(rustls::client::danger::HandshakeSignatureValid::assertion()) + } + + fn verify_tls13_signature( + &self, + _message: &[u8], + _cert: &rustls::pki_types::CertificateDer<'_>, + _dss: &rustls::DigitallySignedStruct, + ) -> std::result::Result { + Ok(rustls::client::danger::HandshakeSignatureValid::assertion()) + } + + fn supported_verify_schemes(&self) -> Vec { + rustls::crypto::ring::default_provider() + .signature_verification_algorithms + .supported_schemes() + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::io::Write; + use tempfile::NamedTempFile; + + fn make_cert_files() -> (NamedTempFile, NamedTempFile) { + let key_pair = rcgen::KeyPair::generate().unwrap(); + let cert = rcgen::CertificateParams::new(vec!["localhost".to_string()]) + .unwrap() + .self_signed(&key_pair) + .unwrap(); + let mut cert_file = NamedTempFile::new().unwrap(); + cert_file.write_all(cert.pem().as_bytes()).unwrap(); + let mut key_file = NamedTempFile::new().unwrap(); + key_file + .write_all(key_pair.serialize_pem().as_bytes()) + .unwrap(); + (cert_file, key_file) + } + + #[test] + fn server_config_roundtrip() { + let (cert, key) = make_cert_files(); + server_tls_config(cert.path(), key.path()).unwrap(); + } + + #[test] + fn server_config_bad_paths() { + let missing = std::path::Path::new("/nonexistent/x.pem"); + assert!( + server_tls_config(missing, missing) + .unwrap_err() + .to_string() + .contains("reading cert") + ); + let (cert, _) = make_cert_files(); + assert!( + server_tls_config(cert.path(), missing) + .unwrap_err() + .to_string() + .contains("reading key") + ); + } + + #[test] + fn client_config_insecure() { + client_tls_config(None, true).unwrap(); + } + + #[test] + fn client_config_with_ca() { + let (cert, _) = make_cert_files(); + client_tls_config(Some(cert.path()), false).unwrap(); + } + + #[test] + fn client_config_empty_ca_errors() { + let empty = NamedTempFile::new().unwrap(); + assert!( + client_tls_config(Some(empty.path()), false) + .unwrap_err() + .to_string() + .contains("CA certificate store is empty") + ); + } + + #[test] + fn client_config_missing_ca_errors() { + assert!( + client_tls_config(Some(std::path::Path::new("/nonexistent/ca.pem")), false) + .unwrap_err() + .to_string() + .contains("reading CA cert") + ); + } +} From 58402e5ece5b9d7f239086bf2951ff88504936b8 Mon Sep 17 00:00:00 2001 From: Walid El Bouchikhi Date: Thu, 25 Jun 2026 23:54:19 +0200 Subject: [PATCH 02/11] =?UTF-8?q?feat(runtime):=20address=20review=20feedb?= =?UTF-8?q?ack=20=E2=80=94=20CLI=20flags,=20timeout,=20and=20cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add TCP TLS CLI flags to DynamoRuntimeArgGroup (shared by all backends): --tcp-tls-cert-path, --tcp-tls-key-path, --tcp-tls-ca-cert-path, --tcp-tls-insecure, --tcp-tls-server-name, --tcp-tls-handshake-timeout - Frontend: --tls-cert-path/--tls-key-path also set DYN_TCP_TLS_CERT_PATH/ KEY_PATH in lock step; --tcp-tls-ca-cert-path added for client-side CA - Reduce handshake timeout default from 10s to 3s, configurable via DYN_TCP_TLS_HANDSHAKE_TIMEOUT_SECS env var - Use "1" || "true" for boolean env parsing (matches egress/tcp_client.rs) - Fix std::result::Result → Result in tls_utils.rs - Replace removed tracing::warn! with tracing::info! for insecure mode Signed-off-by: Walid El Bouchikhi --- .../configuration/groups/runtime_args.py | 75 +++++++++++++++++++ .../src/dynamo/frontend/frontend_args.py | 9 +++ components/src/dynamo/frontend/main.py | 5 ++ lib/runtime/src/config/environment_names.rs | 4 + .../src/pipeline/network/tcp/client.rs | 4 +- .../src/pipeline/network/tcp/server.rs | 11 ++- lib/runtime/src/tls_utils.rs | 19 +++-- 7 files changed, 115 insertions(+), 12 deletions(-) diff --git a/components/src/dynamo/common/configuration/groups/runtime_args.py b/components/src/dynamo/common/configuration/groups/runtime_args.py index 10657a67e28f..b4e1aa42a4d7 100644 --- a/components/src/dynamo/common/configuration/groups/runtime_args.py +++ b/components/src/dynamo/common/configuration/groups/runtime_args.py @@ -4,6 +4,7 @@ """Dynamo runtime configuration ArgGroup.""" import argparse +import os from typing import List, Optional from dynamo._core import get_reasoning_parser_names, get_tool_parser_names @@ -48,6 +49,12 @@ class DynamoRuntimeConfig(ConfigBase): # default; when set, these surface env vars that the Rust runtime reads # directly (see lib/runtime/src/pipeline/network/ingress/shared_tcp_endpoint.rs). engine_request_limit: Optional[int] = None + tcp_tls_cert_path: Optional[str] = None + tcp_tls_key_path: Optional[str] = None + tcp_tls_ca_cert_path: Optional[str] = None + tcp_tls_insecure: bool = False + tcp_tls_server_name: Optional[str] = None + tcp_tls_handshake_timeout_secs: Optional[int] = None def validate(self) -> None: self.namespace = get_worker_namespace(self.namespace) @@ -61,6 +68,24 @@ def validate(self) -> None: f"--engine-request-limit must be a positive integer, got {self.engine_request_limit}" ) + # Propagate TCP TLS CLI flags to env vars so the Rust runtime picks them up. + if self.tcp_tls_cert_path: + os.environ["DYN_TCP_TLS_CERT_PATH"] = self.tcp_tls_cert_path + if self.tcp_tls_key_path: + os.environ["DYN_TCP_TLS_KEY_PATH"] = self.tcp_tls_key_path + if self.tcp_tls_ca_cert_path: + os.environ["DYN_TCP_TLS_CA_CERT_PATH"] = self.tcp_tls_ca_cert_path + if self.tcp_tls_insecure: + os.environ["DYN_TCP_TLS_INSECURE"] = "1" + if self.tcp_tls_server_name: + os.environ["DYN_TCP_TLS_SERVER_NAME"] = self.tcp_tls_server_name + if self.tcp_tls_handshake_timeout_secs is not None: + if self.tcp_tls_handshake_timeout_secs <= 0: + raise ValueError( + f"--tcp-tls-handshake-timeout must be a positive integer, got {self.tcp_tls_handshake_timeout_secs}" + ) + os.environ["DYN_TCP_TLS_HANDSHAKE_TIMEOUT_SECS"] = str(self.tcp_tls_handshake_timeout_secs) + def _validate_output_modalities(self) -> None: """Validate --output-modalities values.""" if not self.output_modalities: @@ -299,3 +324,53 @@ def add_arguments(self, parser: argparse.ArgumentParser) -> None: "semaphore size). Enables worker-side request rejection when set. " "Disabled by default.", ) + + add_argument( + g, + flag_name="--tcp-tls-cert-path", + env_var="DYN_TCP_TLS_CERT_PATH", + default=None, + help="Path to PEM certificate for the TCP server.", + ) + + add_argument( + g, + flag_name="--tcp-tls-key-path", + env_var="DYN_TCP_TLS_KEY_PATH", + default=None, + help="Path to PEM private key for the TCP server certificate.", + ) + + add_argument( + g, + flag_name="--tcp-tls-ca-cert-path", + env_var="DYN_TCP_TLS_CA_CERT_PATH", + default=None, + help="Path to PEM CA certificate used by this node to verify the TCP peer's certificate.", + ) + + add_negatable_bool_argument( + g, + flag_name="--tcp-tls-insecure", + env_var="DYN_TCP_TLS_INSECURE", + default=False, + help="Disable TCP TLS certificate verification. For local development only.", + ) + + add_argument( + g, + flag_name="--tcp-tls-server-name", + env_var="DYN_TCP_TLS_SERVER_NAME", + default=None, + help="Override TLS SNI server name for TCP connections (useful when connecting by IP).", + ) + + add_argument( + g, + flag_name="--tcp-tls-handshake-timeout", + env_var="DYN_TCP_TLS_HANDSHAKE_TIMEOUT_SECS", + default=None, + arg_type=int, + dest="tcp_tls_handshake_timeout_secs", + help="TLS handshake timeout in seconds (default: 3).", + ) diff --git a/components/src/dynamo/frontend/frontend_args.py b/components/src/dynamo/frontend/frontend_args.py index a87a1a473299..add4c619eab6 100644 --- a/components/src/dynamo/frontend/frontend_args.py +++ b/components/src/dynamo/frontend/frontend_args.py @@ -59,6 +59,7 @@ class FrontendConfig(RouterConfigBase, KvRouterConfigBase, AicPerfConfigBase): http_port: int tls_cert_path: Optional[pathlib.Path] tls_key_path: Optional[pathlib.Path] + tcp_tls_ca_cert_path: Optional[str] = None namespace: Optional[str] = None namespace_prefix: Optional[str] = None @@ -246,6 +247,14 @@ def add_arguments(self, parser) -> None: arg_type=pathlib.Path, ) + add_argument( + g, + flag_name="--tcp-tls-ca-cert-path", + env_var="DYN_TCP_TLS_CA_CERT_PATH", + default=None, + help="Path to PEM CA certificate used to verify the TCP peer's certificate.", + ) + # Router options (shared with dynamo.router) RouterArgGroup().add_arguments(parser) diff --git a/components/src/dynamo/frontend/main.py b/components/src/dynamo/frontend/main.py index 875dae99aaae..773328acdf09 100644 --- a/components/src/dynamo/frontend/main.py +++ b/components/src/dynamo/frontend/main.py @@ -259,8 +259,13 @@ def signal_handler(): kwargs["model_path"] = config.model_path if config.tls_cert_path: kwargs["tls_cert_path"] = config.tls_cert_path + # Enable TCP TLS in lock step with HTTP TLS on the frontend. + os.environ["DYN_TCP_TLS_CERT_PATH"] = str(config.tls_cert_path) if config.tls_key_path: kwargs["tls_key_path"] = config.tls_key_path + os.environ["DYN_TCP_TLS_KEY_PATH"] = str(config.tls_key_path) + if config.tcp_tls_ca_cert_path: + os.environ["DYN_TCP_TLS_CA_CERT_PATH"] = config.tcp_tls_ca_cert_path if config.namespace: kwargs["namespace"] = config.namespace if config.namespace_prefix: diff --git a/lib/runtime/src/config/environment_names.rs b/lib/runtime/src/config/environment_names.rs index dc57324cd596..88f128e0dde5 100644 --- a/lib/runtime/src/config/environment_names.rs +++ b/lib/runtime/src/config/environment_names.rs @@ -541,6 +541,9 @@ pub mod tcp_response_stream { /// address is used. Useful when connecting by IP to a server whose certificate /// uses a DNS SAN. pub const DYN_TCP_TLS_SERVER_NAME: &str = "DYN_TCP_TLS_SERVER_NAME"; + + /// TLS handshake timeout in seconds (default: 3). + pub const DYN_TCP_TLS_HANDSHAKE_TIMEOUT_SECS: &str = "DYN_TCP_TLS_HANDSHAKE_TIMEOUT_SECS"; } } @@ -771,6 +774,7 @@ mod tests { tcp_response_stream::tls::DYN_TCP_TLS_CA_CERT_PATH, tcp_response_stream::tls::DYN_TCP_TLS_INSECURE, tcp_response_stream::tls::DYN_TCP_TLS_SERVER_NAME, + tcp_response_stream::tls::DYN_TCP_TLS_HANDSHAKE_TIMEOUT_SECS, // Event Plane event_plane::DYN_EVENT_PLANE, event_plane::DYN_EVENT_PLANE_CODEC, diff --git a/lib/runtime/src/pipeline/network/tcp/client.rs b/lib/runtime/src/pipeline/network/tcp/client.rs index eff7061f5233..35f54294b547 100644 --- a/lib/runtime/src/pipeline/network/tcp/client.rs +++ b/lib/runtime/src/pipeline/network/tcp/client.rs @@ -73,7 +73,7 @@ impl TcpClient { if let Some(connector) = get_tls_connector()? { let server_name = tls_server_name(address)?; let tls_stream = tokio::time::timeout( - std::time::Duration::from_secs(10), + crate::tls_utils::handshake_timeout(), connector.connect(server_name, stream), ) .await @@ -281,7 +281,7 @@ fn build_tls_connector_from_env() -> anyhow::Result> { use crate::config::environment_names::tcp_response_stream::tls as env; let ca_cert_path = std::env::var(env::DYN_TCP_TLS_CA_CERT_PATH).ok(); let insecure = std::env::var(env::DYN_TCP_TLS_INSECURE) - .map(|v| v.eq_ignore_ascii_case("true")) + .map(|v| v == "1" || v == "true") .unwrap_or(false); let tls_requested = ca_cert_path.is_some() || insecure; diff --git a/lib/runtime/src/pipeline/network/tcp/server.rs b/lib/runtime/src/pipeline/network/tcp/server.rs index 10fb4c450f7d..a8b334bd5c42 100644 --- a/lib/runtime/src/pipeline/network/tcp/server.rs +++ b/lib/runtime/src/pipeline/network/tcp/server.rs @@ -386,7 +386,7 @@ impl TcpStreamServer { // TLS client (or vice versa) results in failed connections that are hard to debug. let client_tls_set = std::env::var(env::DYN_TCP_TLS_CA_CERT_PATH).is_ok() || std::env::var(env::DYN_TCP_TLS_INSECURE) - .map(|v| v.eq_ignore_ascii_case("true")) + .map(|v| v == "1" || v == "true") .unwrap_or(false); if client_tls_set { tracing::warn!( @@ -631,13 +631,16 @@ async fn tcp_listener( } // Spawn per-connection so the accept loop is never blocked by a slow - // TLS handshake. The handshake is bounded by a 10-second timeout. + // TLS handshake. The handshake is bounded by DYN_TCP_TLS_HANDSHAKE_TIMEOUT_SECS (default 3s). let state_clone = state.clone(); let tls_acceptor_clone = tls_acceptor.clone(); tokio::spawn(async move { let (reader, writer) = if let Some(ref tls) = tls_acceptor_clone { - match tokio::time::timeout(std::time::Duration::from_secs(10), tls.accept(stream)) - .await + match tokio::time::timeout( + crate::tls_utils::handshake_timeout(), + tls.accept(stream), + ) + .await { Ok(Ok(tls_stream)) => { let (r, w) = tokio::io::split(tls_stream); diff --git a/lib/runtime/src/tls_utils.rs b/lib/runtime/src/tls_utils.rs index e0b20d263cf7..b53e0be52b8a 100644 --- a/lib/runtime/src/tls_utils.rs +++ b/lib/runtime/src/tls_utils.rs @@ -12,6 +12,16 @@ use anyhow::{Context, Result}; use rustls::{ClientConfig, RootCertStore, ServerConfig}; use rustls_pemfile::{certs, private_key}; +/// TLS handshake timeout, configurable via `DYN_TCP_TLS_HANDSHAKE_TIMEOUT_SECS` (default: 3s). +pub fn handshake_timeout() -> std::time::Duration { + use crate::config::environment_names::tcp_response_stream::tls as env; + let secs = std::env::var(env::DYN_TCP_TLS_HANDSHAKE_TIMEOUT_SECS) + .ok() + .and_then(|v| v.parse::().ok()) + .unwrap_or(3); + std::time::Duration::from_secs(secs) +} + /// Build a rustls `ServerConfig` from PEM certificate and key files. pub fn server_tls_config(cert_path: &Path, key_path: &Path) -> Result { let cert_pem = std::fs::read(cert_path) @@ -20,7 +30,7 @@ pub fn server_tls_config(cert_path: &Path, key_path: &Path) -> Result, _>>() + .collect::, _>>() .context("parsing certificate PEM")?; let key = private_key(&mut key_pem.as_slice()) @@ -47,10 +57,7 @@ pub fn client_tls_config(ca_cert_path: Option<&Path>, insecure: bool) -> Result< let provider = Arc::new(rustls::crypto::ring::default_provider()); if insecure { - tracing::warn!( - "TCP TLS certificate verification is DISABLED — \ - this must not be used in production" - ); + tracing::info!("TCP TLS: certificate verification disabled (insecure mode)"); let config = ClientConfig::builder_with_provider(provider) .with_safe_default_protocol_versions() .context("configuring TLS protocol versions")? @@ -65,7 +72,7 @@ pub fn client_tls_config(ca_cert_path: Option<&Path>, insecure: bool) -> Result< let ca_pem = std::fs::read(ca_path) .with_context(|| format!("reading CA cert: {}", ca_path.display()))?; let ca_certs = certs(&mut ca_pem.as_slice()) - .collect::, _>>() + .collect::, _>>() .context("parsing CA certificate PEM")?; for cert in ca_certs { root_store From ec5078517a9885de26c8b566f30aff68d16c6200 Mon Sep 17 00:00:00 2001 From: Walid El Bouchikhi Date: Fri, 26 Jun 2026 00:02:57 +0200 Subject: [PATCH 03/11] fix(runtime): honor --no-tcp-tls-insecure over inherited env var Clear DYN_TCP_TLS_INSECURE from the environment when the CLI flag is explicitly negated, so the Rust connector respects the override. Signed-off-by: Walid El Bouchikhi --- .../src/dynamo/common/configuration/groups/runtime_args.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/src/dynamo/common/configuration/groups/runtime_args.py b/components/src/dynamo/common/configuration/groups/runtime_args.py index b4e1aa42a4d7..7666c30bef6e 100644 --- a/components/src/dynamo/common/configuration/groups/runtime_args.py +++ b/components/src/dynamo/common/configuration/groups/runtime_args.py @@ -77,6 +77,8 @@ def validate(self) -> None: os.environ["DYN_TCP_TLS_CA_CERT_PATH"] = self.tcp_tls_ca_cert_path if self.tcp_tls_insecure: os.environ["DYN_TCP_TLS_INSECURE"] = "1" + else: + os.environ.pop("DYN_TCP_TLS_INSECURE", None) if self.tcp_tls_server_name: os.environ["DYN_TCP_TLS_SERVER_NAME"] = self.tcp_tls_server_name if self.tcp_tls_handshake_timeout_secs is not None: From bf0650c03819e6566a37b2a0d1e049f2e513bf63 Mon Sep 17 00:00:00 2001 From: Walid El Bouchikhi Date: Fri, 26 Jun 2026 00:07:42 +0200 Subject: [PATCH 04/11] style: fix black formatting for long env var assignment Signed-off-by: Walid El Bouchikhi --- .../src/dynamo/common/configuration/groups/runtime_args.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/components/src/dynamo/common/configuration/groups/runtime_args.py b/components/src/dynamo/common/configuration/groups/runtime_args.py index 7666c30bef6e..c977603f8b2b 100644 --- a/components/src/dynamo/common/configuration/groups/runtime_args.py +++ b/components/src/dynamo/common/configuration/groups/runtime_args.py @@ -86,7 +86,9 @@ def validate(self) -> None: raise ValueError( f"--tcp-tls-handshake-timeout must be a positive integer, got {self.tcp_tls_handshake_timeout_secs}" ) - os.environ["DYN_TCP_TLS_HANDSHAKE_TIMEOUT_SECS"] = str(self.tcp_tls_handshake_timeout_secs) + os.environ["DYN_TCP_TLS_HANDSHAKE_TIMEOUT_SECS"] = str( + self.tcp_tls_handshake_timeout_secs + ) def _validate_output_modalities(self) -> None: """Validate --output-modalities values.""" From e86c36de1fc6e0e0bea176955c944300bae6d8e6 Mon Sep 17 00:00:00 2001 From: Walid Date: Sat, 27 Jun 2026 23:13:14 +0200 Subject: [PATCH 05/11] refactor(frontend): decouple HTTP TLS from TCP TLS HTTP --tls-cert-path/--tls-key-path no longer auto-set DYN_TCP_TLS_* env vars. TCP TLS on the frontend is now controlled independently via --tcp-tls-cert-path, --tcp-tls-key-path, and --tcp-tls-ca-cert-path. Signed-off-by: Walid --- .../src/dynamo/frontend/frontend_args.py | 18 ++++++++++++++++++ components/src/dynamo/frontend/main.py | 7 ++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/components/src/dynamo/frontend/frontend_args.py b/components/src/dynamo/frontend/frontend_args.py index add4c619eab6..54a6e87745f8 100644 --- a/components/src/dynamo/frontend/frontend_args.py +++ b/components/src/dynamo/frontend/frontend_args.py @@ -59,6 +59,8 @@ class FrontendConfig(RouterConfigBase, KvRouterConfigBase, AicPerfConfigBase): http_port: int tls_cert_path: Optional[pathlib.Path] tls_key_path: Optional[pathlib.Path] + tcp_tls_cert_path: Optional[str] = None + tcp_tls_key_path: Optional[str] = None tcp_tls_ca_cert_path: Optional[str] = None namespace: Optional[str] = None @@ -247,6 +249,22 @@ def add_arguments(self, parser) -> None: arg_type=pathlib.Path, ) + add_argument( + g, + flag_name="--tcp-tls-cert-path", + env_var="DYN_TCP_TLS_CERT_PATH", + default=None, + help="Path to PEM certificate for the TCP server.", + ) + + add_argument( + g, + flag_name="--tcp-tls-key-path", + env_var="DYN_TCP_TLS_KEY_PATH", + default=None, + help="Path to PEM private key for the TCP server certificate.", + ) + add_argument( g, flag_name="--tcp-tls-ca-cert-path", diff --git a/components/src/dynamo/frontend/main.py b/components/src/dynamo/frontend/main.py index 773328acdf09..66234cb7919a 100644 --- a/components/src/dynamo/frontend/main.py +++ b/components/src/dynamo/frontend/main.py @@ -259,11 +259,12 @@ def signal_handler(): kwargs["model_path"] = config.model_path if config.tls_cert_path: kwargs["tls_cert_path"] = config.tls_cert_path - # Enable TCP TLS in lock step with HTTP TLS on the frontend. - os.environ["DYN_TCP_TLS_CERT_PATH"] = str(config.tls_cert_path) if config.tls_key_path: kwargs["tls_key_path"] = config.tls_key_path - os.environ["DYN_TCP_TLS_KEY_PATH"] = str(config.tls_key_path) + if config.tcp_tls_cert_path: + os.environ["DYN_TCP_TLS_CERT_PATH"] = config.tcp_tls_cert_path + if config.tcp_tls_key_path: + os.environ["DYN_TCP_TLS_KEY_PATH"] = config.tcp_tls_key_path if config.tcp_tls_ca_cert_path: os.environ["DYN_TCP_TLS_CA_CERT_PATH"] = config.tcp_tls_ca_cert_path if config.namespace: From 73db19ffbf7ae198506c279e95f8216f1d51bcf9 Mon Sep 17 00:00:00 2001 From: Walid Date: Wed, 29 Jul 2026 08:29:29 +0200 Subject: [PATCH 06/11] docs(kubernetes): add TCP TLS configuration guide Signed-off-by: Walid --- docs/fern/kubernetes/tls.md | 122 ++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 docs/fern/kubernetes/tls.md diff --git a/docs/fern/kubernetes/tls.md b/docs/fern/kubernetes/tls.md new file mode 100644 index 000000000000..c27f8ccb6653 --- /dev/null +++ b/docs/fern/kubernetes/tls.md @@ -0,0 +1,122 @@ +--- +# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +title: TCP TLS +subtitle: Encrypt TCP response stream connections between frontend and workers +--- + +Dynamo supports opt-in TLS encryption on the TCP response stream transport +(the call-home path between frontends and workers). When enabled, all TCP +connections are upgraded to TLS using [rustls](https://github.com/rustls/rustls) +with the `ring` cryptographic provider. When no TLS configuration is provided, +the transport operates in plaintext exactly as before. + +## Environment variables + +All TLS configuration is driven by environment variables. The Rust runtime +reads these directly at first connection (lazy initialization). + +### Server side (frontend) + +| Variable | Description | +|---|---| +| `DYN_TCP_TLS_CERT_PATH` | Path to the PEM certificate file. When set together with `DYN_TCP_TLS_KEY_PATH`, TLS is enabled on the TCP server. | +| `DYN_TCP_TLS_KEY_PATH` | Path to the PEM private key for the server certificate. | + +### Client side (worker) + +| Variable | Description | +|---|---| +| `DYN_TCP_TLS_CA_CERT_PATH` | Path to the PEM CA certificate used to verify the server. Required when the server uses a self-signed or internal CA. | +| `DYN_TCP_TLS_INSECURE` | Set to `1` or `true` to skip certificate verification. For local development only. | +| `DYN_TCP_TLS_SERVER_NAME` | Override the TLS SNI hostname. Useful when connecting by IP to a server whose certificate has a DNS SAN. | + +### Shared + +| Variable | Description | +|---|---| +| `DYN_TCP_TLS_HANDSHAKE_TIMEOUT_SECS` | TLS handshake timeout in seconds (default: 3). | + +## CLI flags + +The same configuration is available via command-line flags on all backends +(vllm, sglang, trtllm, tokenspeed) through `DynamoRuntimeArgGroup`: + +``` +--tcp-tls-cert-path PATH Server certificate (PEM) +--tcp-tls-key-path PATH Server private key (PEM) +--tcp-tls-ca-cert-path PATH CA certificate for server verification (PEM) +--tcp-tls-insecure Disable certificate verification +--tcp-tls-server-name NAME Override TLS SNI hostname +--tcp-tls-handshake-timeout N Handshake timeout in seconds (default: 3) +``` + +The frontend (`dynamo.frontend`) also accepts `--tcp-tls-cert-path`, +`--tcp-tls-key-path`, and `--tcp-tls-ca-cert-path`. + +## Quick start + +Generate a self-signed certificate for local testing: + +```bash +# Generate CA +openssl req -x509 -newkey rsa:2048 -keyout ca-key.pem -out ca-cert.pem \ + -days 365 -nodes -subj "/CN=DynamoCA" + +# Generate server cert with SAN +openssl req -newkey rsa:2048 -keyout server-key.pem -out server-csr.pem \ + -nodes -subj "/CN=localhost" \ + -addext "subjectAltName=DNS:localhost,IP:127.0.0.1" + +openssl x509 -req -in server-csr.pem -CA ca-cert.pem -CAkey ca-key.pem \ + -CAcreateserial -out server-cert.pem -days 365 -copy_extensions copyall +``` + +Start the backend (worker) with TLS: + +```bash +python -m dynamo.vllm \ + --tcp-tls-cert-path server-cert.pem \ + --tcp-tls-key-path server-key.pem \ + --tcp-tls-ca-cert-path ca-cert.pem \ + --tcp-tls-server-name localhost \ + ... +``` + +Start the frontend with TLS: + +```bash +python -m dynamo.frontend \ + --tcp-tls-cert-path server-cert.pem \ + --tcp-tls-key-path server-key.pem \ + --tcp-tls-ca-cert-path ca-cert.pem \ + ... +``` + +## Kubernetes deployment + +In Kubernetes, TLS certificates are typically delivered by a certificate +management system (e.g., cert-manager) and mounted into pods. Set the +environment variables in the pod spec or via the Dynamo operator's +`InfrastructureConfiguration`: + +```yaml +env: + - name: DYN_TCP_TLS_CERT_PATH + value: /etc/certs/server/cert.pem + - name: DYN_TCP_TLS_KEY_PATH + value: /etc/certs/server/key.pem + - name: DYN_TCP_TLS_CA_CERT_PATH + value: /etc/certs/ca/ca.pem +``` + +## Design notes + +- TLS configuration is cached after the first TCP connection via `OnceCell`. + Certificate rotation requires a process restart. +- The TLS handshake is spawned per-connection on the server side so the accept + loop is never blocked by a slow handshake. +- When server and client TLS configurations are mismatched (e.g., server has TLS + but client does not), a warning is logged at startup. +- An empty CA certificate file is detected at load time and rejected with a + clear error message. From 3edbc964eccca1e4e5c1ac16cc2e89777bc37a4d Mon Sep 17 00:00:00 2001 From: Walid Date: Wed, 29 Jul 2026 11:19:02 +0200 Subject: [PATCH 07/11] docs(kubernetes): clarify TCP TLS scope covers response stream path only Signed-off-by: Walid --- docs/fern/kubernetes/tls.md | 40 +++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/docs/fern/kubernetes/tls.md b/docs/fern/kubernetes/tls.md index c27f8ccb6653..7baac540cdad 100644 --- a/docs/fern/kubernetes/tls.md +++ b/docs/fern/kubernetes/tls.md @@ -2,39 +2,44 @@ # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 title: TCP TLS -subtitle: Encrypt TCP response stream connections between frontend and workers +subtitle: Encrypt TCP streaming connections between frontend and workers --- -Dynamo supports opt-in TLS encryption on the TCP response stream transport -(the call-home path between frontends and workers). When enabled, all TCP -connections are upgraded to TLS using [rustls](https://github.com/rustls/rustls) -with the `ring` cryptographic provider. When no TLS configuration is provided, -the transport operates in plaintext exactly as before. +Dynamo supports opt-in TLS encryption on the TCP call-home streaming transport +(implemented by `TcpStreamServer` and `TcpClient`, handling both response +streams and request streams between frontends and workers). When enabled, all TCP +connections on this path are upgraded to TLS using +[rustls](https://github.com/rustls/rustls) with the `ring` cryptographic +provider. When no TLS configuration is provided, the transport operates in +plaintext exactly as before. + +> **Note:** The shared TCP request plane (`egress/tcp_client` and +> `ingress/shared_tcp_endpoint`) is a separate transport path not yet covered +> by this TLS implementation. This is planned for a future PR. ## Environment variables All TLS configuration is driven by environment variables. The Rust runtime reads these directly at first connection (lazy initialization). -### Server side (frontend) +Both frontends and workers act as TCP server and client depending on the +stream direction (response streams: worker dials frontend; request streams: +frontend dials worker). All TLS env vars should be set on every pod. + +### Server role (accepting connections) | Variable | Description | |---|---| | `DYN_TCP_TLS_CERT_PATH` | Path to the PEM certificate file. When set together with `DYN_TCP_TLS_KEY_PATH`, TLS is enabled on the TCP server. | | `DYN_TCP_TLS_KEY_PATH` | Path to the PEM private key for the server certificate. | -### Client side (worker) +### Client role (dialing connections) | Variable | Description | |---|---| -| `DYN_TCP_TLS_CA_CERT_PATH` | Path to the PEM CA certificate used to verify the server. Required when the server uses a self-signed or internal CA. | +| `DYN_TCP_TLS_CA_CERT_PATH` | Path to the PEM CA certificate used to verify the peer's server certificate. | | `DYN_TCP_TLS_INSECURE` | Set to `1` or `true` to skip certificate verification. For local development only. | | `DYN_TCP_TLS_SERVER_NAME` | Override the TLS SNI hostname. Useful when connecting by IP to a server whose certificate has a DNS SAN. | - -### Shared - -| Variable | Description | -|---|---| | `DYN_TCP_TLS_HANDSHAKE_TIMEOUT_SECS` | TLS handshake timeout in seconds (default: 3). | ## CLI flags @@ -72,7 +77,7 @@ openssl x509 -req -in server-csr.pem -CA ca-cert.pem -CAkey ca-key.pem \ -CAcreateserial -out server-cert.pem -days 365 -copy_extensions copyall ``` -Start the backend (worker) with TLS: +Both frontend and worker need the same flags (both act as server and client): ```bash python -m dynamo.vllm \ @@ -81,15 +86,12 @@ python -m dynamo.vllm \ --tcp-tls-ca-cert-path ca-cert.pem \ --tcp-tls-server-name localhost \ ... -``` - -Start the frontend with TLS: -```bash python -m dynamo.frontend \ --tcp-tls-cert-path server-cert.pem \ --tcp-tls-key-path server-key.pem \ --tcp-tls-ca-cert-path ca-cert.pem \ + --tcp-tls-server-name localhost \ ... ``` From e9ff9e066bf09658ec5680e3048fc508358b2708 Mon Sep 17 00:00:00 2001 From: Walid Date: Sat, 1 Aug 2026 12:09:32 +0200 Subject: [PATCH 08/11] fix(runtime): use dynamo-truthy for TCP TLS boolean parsing Replace hand-rolled `v == "1" || v == "true"` and `eq_ignore_ascii_case("true")` with `crate::config::env_is_truthy()` to pass the no_bool_parse_forks_outside_canonical_crate test. Signed-off-by: Walid --- lib/runtime/src/pipeline/network/tcp/client.rs | 4 +--- lib/runtime/src/pipeline/network/tcp/server.rs | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/runtime/src/pipeline/network/tcp/client.rs b/lib/runtime/src/pipeline/network/tcp/client.rs index 86f223c7417e..bcf78ce48fdb 100644 --- a/lib/runtime/src/pipeline/network/tcp/client.rs +++ b/lib/runtime/src/pipeline/network/tcp/client.rs @@ -280,9 +280,7 @@ fn get_tls_connector() -> anyhow::Result<&'static Option> { fn build_tls_connector_from_env() -> anyhow::Result> { use crate::config::environment_names::tcp_response_stream::tls as env; let ca_cert_path = std::env::var(env::DYN_TCP_TLS_CA_CERT_PATH).ok(); - let insecure = std::env::var(env::DYN_TCP_TLS_INSECURE) - .map(|v| v == "1" || v == "true") - .unwrap_or(false); + let insecure = crate::config::env_is_truthy(env::DYN_TCP_TLS_INSECURE); let tls_requested = ca_cert_path.is_some() || insecure; if !tls_requested { diff --git a/lib/runtime/src/pipeline/network/tcp/server.rs b/lib/runtime/src/pipeline/network/tcp/server.rs index 1205b3f47351..200dfc2e956d 100644 --- a/lib/runtime/src/pipeline/network/tcp/server.rs +++ b/lib/runtime/src/pipeline/network/tcp/server.rs @@ -385,9 +385,7 @@ impl TcpStreamServer { // Warn if the client side has TLS configured — mixing plaintext server with // TLS client (or vice versa) results in failed connections that are hard to debug. let client_tls_set = std::env::var(env::DYN_TCP_TLS_CA_CERT_PATH).is_ok() - || std::env::var(env::DYN_TCP_TLS_INSECURE) - .map(|v| v == "1" || v == "true") - .unwrap_or(false); + || crate::config::env_is_truthy(env::DYN_TCP_TLS_INSECURE); if client_tls_set { tracing::warn!( "TCP server is running in plaintext mode but client TLS env vars are set. \ From 370633660023e16ea55d1e9a174799f2f8c05ca3 Mon Sep 17 00:00:00 2001 From: Walid Date: Sat, 1 Aug 2026 13:10:19 +0200 Subject: [PATCH 09/11] docs(kubernetes): fix TLS page navigation and k8s deployment example Add TLS page to Fern index.yml so it appears in the docs site. Fix Kubernetes section to show DynamoGraphDeployment podTemplate instead of unsupported InfrastructureConfiguration. Signed-off-by: Walid --- docs/fern/index.yml | 2 ++ docs/fern/kubernetes/tls.md | 45 +++++++++++++++++++++++++++++-------- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/docs/fern/index.yml b/docs/fern/index.yml index 17edede3a65c..6d39479360e9 100644 --- a/docs/fern/index.yml +++ b/docs/fern/index.yml @@ -782,6 +782,8 @@ navigation: path: kubernetes/dynamo-operator.md - page: Service Discovery path: kubernetes/service-discovery.md + - page: TCP TLS + path: kubernetes/tls.md - page: Webhooks path: kubernetes/webhooks.md - page: Managing Models (DynamoModel) diff --git a/docs/fern/kubernetes/tls.md b/docs/fern/kubernetes/tls.md index 7baac540cdad..dbab5036369a 100644 --- a/docs/fern/kubernetes/tls.md +++ b/docs/fern/kubernetes/tls.md @@ -99,19 +99,46 @@ python -m dynamo.frontend \ In Kubernetes, TLS certificates are typically delivered by a certificate management system (e.g., cert-manager) and mounted into pods. Set the -environment variables in the pod spec or via the Dynamo operator's -`InfrastructureConfiguration`: +environment variables on each component's pod template in the +`DynamoGraphDeployment` spec: ```yaml -env: - - name: DYN_TCP_TLS_CERT_PATH - value: /etc/certs/server/cert.pem - - name: DYN_TCP_TLS_KEY_PATH - value: /etc/certs/server/key.pem - - name: DYN_TCP_TLS_CA_CERT_PATH - value: /etc/certs/ca/ca.pem +spec: + components: + - name: Frontend + podTemplate: + spec: + containers: + - name: main + env: + - name: DYN_TCP_TLS_CERT_PATH + value: /etc/certs/server/cert.pem + - name: DYN_TCP_TLS_KEY_PATH + value: /etc/certs/server/key.pem + - name: DYN_TCP_TLS_CA_CERT_PATH + value: /etc/certs/ca/ca.pem + - name: VllmWorker + podTemplate: + spec: + containers: + - name: main + env: + - name: DYN_TCP_TLS_CERT_PATH + value: /etc/certs/server/cert.pem + - name: DYN_TCP_TLS_KEY_PATH + value: /etc/certs/server/key.pem + - name: DYN_TCP_TLS_CA_CERT_PATH + value: /etc/certs/ca/ca.pem ``` +Both components need the same TLS env vars because each acts as both TCP +server and client depending on the stream direction. + +> **Note:** A future PR ([#10809](https://github.com/ai-dynamo/dynamo/issues/10809)) +> will add operator-level TLS configuration via `InfrastructureConfiguration`, +> allowing TLS to be configured once at the platform level and auto-injected +> into all DGD pods without per-component env var setup. + ## Design notes - TLS configuration is cached after the first TCP connection via `OnceCell`. From d3943d082fa844babc7ff0bf9e0fffe387b6ac66 Mon Sep 17 00:00:00 2001 From: Walid Date: Mon, 3 Aug 2026 22:15:52 +0200 Subject: [PATCH 10/11] docs(tls): move TLS doc to reference/components Per review feedback from nealvaidya: TLS configuration is not tied to Kubernetes or the operator, so it belongs alongside the other runtime reference docs instead of under the Kubernetes Operator section. Signed-off-by: Walid --- docs/fern/index.yml | 4 ++-- .../tls.md => reference/components/tls-configuration.mdx} | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/fern/pages/{developer-guide/knowledge-base/kubernetes/kubernetes-operator/tls.md => reference/components/tls-configuration.mdx} (100%) diff --git a/docs/fern/index.yml b/docs/fern/index.yml index 9e6a71ceefa9..49afa031a76a 100644 --- a/docs/fern/index.yml +++ b/docs/fern/index.yml @@ -822,8 +822,6 @@ navigation: path: pages/developer-guide/knowledge-base/kubernetes/kubernetes-operator/dynamo-operator.md - page: Service Discovery path: pages/developer-guide/knowledge-base/kubernetes/kubernetes-operator/service-discovery.md - - page: TCP TLS - path: pages/developer-guide/knowledge-base/kubernetes/kubernetes-operator/tls.md - page: Webhooks path: pages/developer-guide/knowledge-base/kubernetes/kubernetes-operator/webhooks.md - page: Managing Models (DynamoModel) @@ -995,6 +993,8 @@ navigation: contents: - page: Runtime Configuration path: pages/reference/components/runtime-configuration.mdx + - page: TLS Configuration + path: pages/reference/components/tls-configuration.mdx - page: Frontend Configuration path: pages/reference/components/frontend-configuration.mdx - page: Planner Configuration diff --git a/docs/fern/pages/developer-guide/knowledge-base/kubernetes/kubernetes-operator/tls.md b/docs/fern/pages/reference/components/tls-configuration.mdx similarity index 100% rename from docs/fern/pages/developer-guide/knowledge-base/kubernetes/kubernetes-operator/tls.md rename to docs/fern/pages/reference/components/tls-configuration.mdx From 78ba9193c9d4e3e26360899adc6fc46485d8dea3 Mon Sep 17 00:00:00 2001 From: Walid Date: Mon, 3 Aug 2026 23:17:36 +0200 Subject: [PATCH 11/11] docs(request-plane): link to the TLS reference from TCP config options The request-plane page documents all other DYN_TCP_* environment variables, so add a pointer to the TLS reference for the encryption options as well (per review feedback). Signed-off-by: Walid --- .../concepts/communication-planes/request-plane.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/fern/pages/developer-guide/knowledge-base/concepts/communication-planes/request-plane.md b/docs/fern/pages/developer-guide/knowledge-base/concepts/communication-planes/request-plane.md index 11f6ed300b56..01ee22d7ba61 100644 --- a/docs/fern/pages/developer-guide/knowledge-base/concepts/communication-planes/request-plane.md +++ b/docs/fern/pages/developer-guide/knowledge-base/concepts/communication-planes/request-plane.md @@ -99,6 +99,12 @@ Additional TCP-specific environment variables: - `DYN_TCP_CONNECT_TIMEOUT`: Connect timeout for TCP client (default: 3 seconds) - `DYN_TCP_CHANNEL_BUFFER`: Request channel buffer size for TCP client (default: 100) +**Encryption:** + +TCP request-plane traffic can be encrypted with TLS. See the +[TLS reference](../../../../reference/components/tls-configuration.mdx) for the +`DYN_TCP_TLS_*` environment variables, CLI flags, and setup. + ### Using NATS NATS provides a brokered request plane and can also carry KV events and router replica synchronization over NATS Core.