From 8090e67b9e4f7c6d663157d341a419b3159e362b Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Sat, 12 Oct 2024 22:05:17 -0700 Subject: [PATCH] Revert hyper v1 for gRPC --- src-tauri/Cargo.lock | 483 +++++++++++++++-------------- src-tauri/yaak_grpc/Cargo.toml | 33 +- src-tauri/yaak_grpc/src/manager.rs | 42 ++- src-tauri/yaak_grpc/src/proto.rs | 97 +++--- 4 files changed, 340 insertions(+), 315 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index bbaa745d..7d9b5468 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -403,30 +403,31 @@ dependencies = [ ] [[package]] -name = "aws-lc-rs" -version = "1.10.0" +name = "axum" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd82dba44d209fddb11c190e0a94b78651f95299598e472215667417a03ff1d" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" dependencies = [ - "aws-lc-sys", - "mirai-annotations", - "paste", - "zeroize", -] - -[[package]] -name = "aws-lc-sys" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7a4168111d7eb622a31b214057b8509c0a7e1794f44c546d742330dc793972" -dependencies = [ - "bindgen", - "cc", - "cmake", - "dunce", - "fs_extra", - "libc", - "paste", + "async-trait", + "axum-core 0.3.4", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "itoa 1.0.11", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper 0.1.2", + "tower", + "tower-layer", + "tower-service", ] [[package]] @@ -436,7 +437,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf" dependencies = [ "async-trait", - "axum-core", + "axum-core 0.4.3", "bytes", "futures-util", "http 1.1.0", @@ -456,6 +457,23 @@ dependencies = [ "tower-service", ] +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + [[package]] name = "axum-core" version = "0.4.3" @@ -509,29 +527,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" -[[package]] -name = "bindgen" -version = "0.69.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" -dependencies = [ - "bitflags 2.6.0", - "cexpr", - "clang-sys", - "itertools 0.12.1", - "lazy_static", - "lazycell", - "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash 1.1.0", - "shlex", - "syn 2.0.72", - "which", -] - [[package]] name = "bit_field" version = "0.10.2" @@ -808,15 +803,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom 7.1.3", -] - [[package]] name = "cfb" version = "0.7.3" @@ -871,17 +857,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "clang-sys" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" -dependencies = [ - "glob", - "libc", - "libloading 0.8.5", -] - [[package]] name = "clipboard-win" version = "5.4.0" @@ -891,15 +866,6 @@ dependencies = [ "error-code", ] -[[package]] -name = "cmake" -version = "0.1.51" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" -dependencies = [ - "cc", -] - [[package]] name = "cocoa" version = "0.25.0" @@ -1840,12 +1806,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - [[package]] name = "funty" version = "2.0.0" @@ -2375,30 +2335,6 @@ dependencies = [ "hashbrown 0.14.5", ] -[[package]] -name = "headers" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322106e6bd0cba2d5ead589ddb8150a13d7c4217cf80d7c4f682ca994ccc6aa9" -dependencies = [ - "base64 0.21.7", - "bytes", - "headers-core", - "http 1.1.0", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" -dependencies = [ - "http 1.1.0", -] - [[package]] name = "heck" version = "0.4.1" @@ -2598,26 +2534,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-proxy2" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9043b7b23fb0bc4a1c7014c27b50a4fc42cc76206f71d34fc0dfe5b28ddc3faf" -dependencies = [ - "bytes", - "futures-util", - "headers", - "http 1.1.0", - "hyper 1.4.1", - "hyper-tls", - "hyper-util", - "native-tls", - "pin-project-lite", - "tokio", - "tokio-native-tls", - "tower-service", -] - [[package]] name = "hyper-rustls" version = "0.24.2" @@ -2629,7 +2545,7 @@ dependencies = [ "hyper 0.14.30", "log", "rustls 0.21.12", - "rustls-native-certs 0.6.3", + "rustls-native-certs", "tokio", "tokio-rustls 0.24.1", ] @@ -2644,9 +2560,7 @@ dependencies = [ "http 1.1.0", "hyper 1.4.1", "hyper-util", - "log", "rustls 0.23.12", - "rustls-native-certs 0.8.0", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -3074,12 +2988,6 @@ dependencies = [ "spin", ] -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "lebe" version = "0.5.2" @@ -3349,12 +3257,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "mirai-annotations" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" - [[package]] name = "muda" version = "0.15.1" @@ -3600,7 +3502,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ "malloc_buf", - "objc_exception", ] [[package]] @@ -3608,6 +3509,9 @@ name = "objc-sys" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" +dependencies = [ + "cc", +] [[package]] name = "objc2" @@ -3635,6 +3539,30 @@ dependencies = [ "objc2-quartz-core", ] +[[package]] +name = "objc2-cloud-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-core-location", + "objc2-foundation", +] + +[[package]] +name = "objc2-contacts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", +] + [[package]] name = "objc2-core-data" version = "0.2.2" @@ -3659,6 +3587,18 @@ dependencies = [ "objc2-metal", ] +[[package]] +name = "objc2-core-location" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" +dependencies = [ + "block2", + "objc2", + "objc2-contacts", + "objc2-foundation", +] + [[package]] name = "objc2-encode" version = "4.0.3" @@ -3678,6 +3618,18 @@ dependencies = [ "objc2", ] +[[package]] +name = "objc2-link-presentation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" +dependencies = [ + "block2", + "objc2", + "objc2-app-kit", + "objc2-foundation", +] + [[package]] name = "objc2-metal" version = "0.2.2" @@ -3704,21 +3656,71 @@ dependencies = [ ] [[package]] -name = "objc_exception" -version = "0.1.2" +name = "objc2-symbols" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" dependencies = [ - "cc", + "objc2", + "objc2-foundation", ] [[package]] -name = "objc_id" -version = "0.1.1" +name = "objc2-ui-kit" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "objc", + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-image", + "objc2-core-location", + "objc2-foundation", + "objc2-link-presentation", + "objc2-quartz-core", + "objc2-symbols", + "objc2-uniform-type-identifiers", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-uniform-type-identifiers" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-core-location", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68bc69301064cebefc6c4c90ce9cba69225239e4b8ff99d445a2b5563797da65" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-app-kit", + "objc2-foundation", ] [[package]] @@ -4307,6 +4309,16 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "prost" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +dependencies = [ + "bytes", + "prost-derive 0.12.6", +] + [[package]] name = "prost" version = "0.13.3" @@ -4314,7 +4326,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" dependencies = [ "bytes", - "prost-derive", + "prost-derive 0.13.3", ] [[package]] @@ -4331,13 +4343,26 @@ dependencies = [ "once_cell", "petgraph", "prettyplease", - "prost", - "prost-types", + "prost 0.13.3", + "prost-types 0.13.3", "regex", "syn 2.0.72", "tempfile", ] +[[package]] +name = "prost-derive" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +dependencies = [ + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "prost-derive" version = "0.13.3" @@ -4353,37 +4378,46 @@ dependencies = [ [[package]] name = "prost-reflect" -version = "0.14.2" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b7535b02f0e5efe3e1dbfcb428be152226ed0c66cad9541f2274c8ba8d4cd40" +checksum = "057237efdb71cf4b3f9396302a3d6599a92fa94063ba537b66130980ea9909f3" dependencies = [ - "base64 0.22.1", + "base64 0.21.7", "once_cell", - "prost", + "prost 0.12.6", "prost-reflect-derive", - "prost-types", + "prost-types 0.12.6", "serde", "serde-value", ] [[package]] name = "prost-reflect-derive" -version = "0.14.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fce6b22f15cc8d8d400a2b98ad29202b33bd56c7d9ddd815bc803a807ecb65" +checksum = "172da1212c02be2c94901440cb27183cd92bff00ebacca5c323bf7520b8f9c04" dependencies = [ "proc-macro2", "quote", "syn 2.0.72", ] +[[package]] +name = "prost-types" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +dependencies = [ + "prost 0.12.6", +] + [[package]] name = "prost-types" version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4759aa0d3a6232fb8dbdb97b61de2c20047c68aca932c7ed76da9d788508d670" dependencies = [ - "prost", + "prost 0.13.3", ] [[package]] @@ -4465,7 +4499,7 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.0.0", + "rustc-hash", "rustls 0.23.12", "socket2", "thiserror", @@ -4482,7 +4516,7 @@ dependencies = [ "bytes", "rand 0.8.5", "ring", - "rustc-hash 2.0.0", + "rustc-hash", "rustls 0.23.12", "slab", "thiserror", @@ -4968,12 +5002,6 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc-hash" version = "2.0.0" @@ -5020,8 +5048,6 @@ version = "0.23.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" dependencies = [ - "aws-lc-rs", - "log", "once_cell", "ring", "rustls-pki-types", @@ -5042,19 +5068,6 @@ dependencies = [ "security-framework", ] -[[package]] -name = "rustls-native-certs" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" -dependencies = [ - "openssl-probe", - "rustls-pemfile 2.1.3", - "rustls-pki-types", - "schannel", - "security-framework", -] - [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -5096,7 +5109,6 @@ version = "0.102.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" dependencies = [ - "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -5498,12 +5510,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -6089,9 +6095,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5920aad0804ea5e86808d4b6e8753d3bcbae7efc8f4e41a4da00b45427559868" +checksum = "fd96d46534b10765ce0c6208f9451d98ea38636364a41b272d3610c70dd0e4c3" dependencies = [ "anyhow", "bytes", @@ -6381,9 +6387,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af12ad1af974b274ef1d32a94e6eba27a312b429ef28fcb98abc710df7f9151d" +checksum = "c8f437293d6f5e5dce829250f4dbdce4e0b52905e297a6689cc2963eb53ac728" dependencies = [ "dpi", "gtk", @@ -6400,9 +6406,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e45e88aa0b11b302d836e6ea3e507a6359044c4a8bc86b865ba99868c695753d" +checksum = "aaac63b65df8e85570993eaf93ae1dd73a6fb66d8bd99674ce65f41dc3c63e7d" dependencies = [ "gtk", "http 1.1.0", @@ -6741,6 +6747,33 @@ dependencies = [ "winnow", ] +[[package]] +name = "tonic" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" +dependencies = [ + "async-stream", + "async-trait", + "axum 0.6.20", + "base64 0.21.7", + "bytes", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "hyper-timeout 0.4.1", + "percent-encoding", + "pin-project", + "prost 0.12.6", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tonic" version = "0.12.3" @@ -6749,7 +6782,7 @@ checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" dependencies = [ "async-stream", "async-trait", - "axum", + "axum 0.7.5", "base64 0.22.1", "bytes", "h2 0.4.5", @@ -6761,7 +6794,7 @@ dependencies = [ "hyper-util", "percent-encoding", "pin-project", - "prost", + "prost 0.13.3", "socket2", "tokio", "tokio-stream", @@ -6786,15 +6819,15 @@ dependencies = [ [[package]] name = "tonic-reflection" -version = "0.12.3" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878d81f52e7fcfd80026b7fdb6a9b578b3c3653ba987f87f0dce4b64043cba27" +checksum = "3fa37c513df1339d197f4ba21d28c918b9ef1ac1768265f11ecb6b7f1cba1b76" dependencies = [ - "prost", - "prost-types", + "prost 0.12.6", + "prost-types 0.12.6", "tokio", "tokio-stream", - "tonic", + "tonic 0.10.2", ] [[package]] @@ -7444,18 +7477,6 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - [[package]] name = "whoami" version = "1.5.1" @@ -7827,14 +7848,12 @@ dependencies = [ [[package]] name = "wry" -version = "0.44.1" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "440600584cfbd8b0d28eace95c1f2c253db05dae43780b79380aa1e868f04c73" +checksum = "469a3765ecc3e8aa9ccdf3c5a52c82697ec03037cd60494488763880d31a1b3a" dependencies = [ "base64 0.22.1", - "block", - "cocoa 0.26.0", - "core-graphics 0.24.0", + "block2", "crossbeam-channel", "dpi", "dunce", @@ -7847,8 +7866,11 @@ dependencies = [ "kuchikiki", "libc", "ndk", - "objc", - "objc_id", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", "once_cell", "percent-encoding", "raw-window-handle", @@ -7984,23 +8006,20 @@ version = "0.1.0" dependencies = [ "anyhow", "dunce", - "hyper 1.4.1", - "hyper-proxy2", - "hyper-rustls 0.27.3", - "hyper-util", + "hyper 0.14.30", + "hyper-rustls 0.24.2", "log", "md5", - "prost", + "prost 0.12.6", "prost-reflect", - "prost-types", - "rustls 0.23.12", + "prost-types 0.12.6", "serde", "serde_json", "tauri", "tauri-plugin-shell", "tokio", "tokio-stream", - "tonic", + "tonic 0.10.2", "tonic-reflection", "uuid", ] @@ -8034,7 +8053,7 @@ dependencies = [ "dunce", "log", "path-slash", - "prost", + "prost 0.13.3", "rand 0.8.5", "regex", "reqwest", @@ -8044,7 +8063,7 @@ dependencies = [ "tauri-plugin-shell", "thiserror", "tokio", - "tonic", + "tonic 0.12.3", "tonic-build", "ts-rs", "yaak_models", diff --git a/src-tauri/yaak_grpc/Cargo.toml b/src-tauri/yaak_grpc/Cargo.toml index 8abac3ae..a8f2ae39 100644 --- a/src-tauri/yaak_grpc/Cargo.toml +++ b/src-tauri/yaak_grpc/Cargo.toml @@ -4,24 +4,21 @@ version = "0.1.0" edition = "2021" [dependencies] -anyhow = "1.0.79" -dunce = "1.0.4" -hyper = { version = "1.4.1" } -hyper-proxy2 = { version = "0.1.0" } -hyper-rustls = { version = "0.27.3", efault-features = false, features = ["http2", "rustls-native-certs"] } -hyper-util = { version = "0.1.9" } -log = "0.4.20" -md5 = "0.7.0" -prost = "0.13.3" -prost-reflect = { version = "0.14.2", features = ["serde", "derive"] } -prost-types = "0.13.3" -rustls = { version = "0.23.12", default-features = false, features = ["ring"] } -serde = { version = "1.0.210", features = ["derive"] } +tonic = "0.10.2" +prost = "0.12" +tokio = { version = "1.0", features = ["macros", "rt-multi-thread", "fs"] } +tonic-reflection = "0.10.2" +tokio-stream = "0.1.14" +prost-types = "0.12.3" +serde = { version = "1.0.196", features = ["derive"] } serde_json = "1.0.113" +prost-reflect = { version = "0.12.0", features = ["serde", "derive"] } +log = "0.4.20" +anyhow = "1.0.79" +hyper = { version = "0.14" } +hyper-rustls = { version = "0.24.0", features = ["http2"] } +uuid = { version = "1.7.0", features = ["v4"] } tauri = { workspace = true } tauri-plugin-shell = { workspace = true } -tokio = { version = "1.0", features = ["macros", "rt-multi-thread", "fs"] } -tokio-stream = "0.1.14" -tonic = "0.12.3" -tonic-reflection = "0.12.3" -uuid = { version = "1.7.0", features = ["v4"] } +md5 = "0.7.0" +dunce = "1.0.4" diff --git a/src-tauri/yaak_grpc/src/manager.rs b/src-tauri/yaak_grpc/src/manager.rs index fc0ce3a4..ad8e3e08 100644 --- a/src-tauri/yaak_grpc/src/manager.rs +++ b/src-tauri/yaak_grpc/src/manager.rs @@ -1,9 +1,10 @@ use std::collections::BTreeMap; use std::path::PathBuf; use std::str::FromStr; + +use hyper::client::HttpConnector; +use hyper::Client; use hyper_rustls::HttpsConnector; -use hyper_util::client::legacy::Client; -use hyper_util::client::legacy::connect::HttpConnector; pub use prost_reflect::DynamicMessage; use prost_reflect::{DescriptorPool, MethodDescriptor, ServiceDescriptor}; use serde_json::Deserializer; @@ -53,14 +54,19 @@ impl From for StreamError { impl GrpcConnection { pub fn service(&self, service: &str) -> Result { - let service = self.pool.get_service_by_name(service).ok_or("Failed to find service")?; + let service = self + .pool + .get_service_by_name(service) + .ok_or("Failed to find service")?; Ok(service) } pub fn method(&self, service: &str, method: &str) -> Result { let service = self.service(service)?; - let method = - service.methods().find(|m| m.name() == method).ok_or("Failed to find method")?; + let method = service + .methods() + .find(|m| m.name() == method) + .ok_or("Failed to find method")?; Ok(method) } @@ -126,10 +132,13 @@ impl GrpcConnection { let path = method_desc_to_path(method); let codec = DynamicCodec::new(method.clone()); client.ready().await.unwrap(); - client.client_streaming(req, path, codec).await.map_err(|e| StreamError { - message: e.message().to_string(), - status: Some(e), - }) + client + .client_streaming(req, path, codec) + .await + .map_err(|e| StreamError { + message: e.message().to_string(), + status: Some(e), + }) } pub async fn server_streaming( @@ -188,7 +197,8 @@ impl GrpcHandle { fill_pool_from_files(&self.app_handle, proto_files).await }?; - self.pools.insert(make_pool_key(id, uri, proto_files), pool.clone()); + self.pools + .insert(make_pool_key(id, uri, proto_files), pool.clone()); Ok(()) } @@ -201,7 +211,9 @@ impl GrpcHandle { // Ensure reflection is up-to-date self.reflect(id, uri, proto_files).await?; - let pool = self.get_pool(id, uri, proto_files).ok_or("Failed to get pool".to_string())?; + let pool = self + .get_pool(id, uri, proto_files) + .ok_or("Failed to get pool".to_string())?; Ok(self.services_from_pool(&pool)) } @@ -222,7 +234,7 @@ impl GrpcHandle { &pool, input_message, )) - .unwrap(), + .unwrap(), }) } def @@ -237,7 +249,9 @@ impl GrpcHandle { proto_files: &Vec, ) -> Result { self.reflect(id, uri, proto_files).await?; - let pool = self.get_pool(id, uri, proto_files).ok_or("Failed to get pool")?; + let pool = self + .get_pool(id, uri, proto_files) + .ok_or("Failed to get pool")?; let uri = uri_from_str(uri)?; let conn = get_transport(); @@ -287,4 +301,4 @@ fn make_pool_key(id: &str, uri: &str, proto_files: &Vec) -> String { ); format!("{:x}", md5::compute(pool_key)) -} +} \ No newline at end of file diff --git a/src-tauri/yaak_grpc/src/proto.rs b/src-tauri/yaak_grpc/src/proto.rs index 4370710a..ef300908 100644 --- a/src-tauri/yaak_grpc/src/proto.rs +++ b/src-tauri/yaak_grpc/src/proto.rs @@ -1,16 +1,16 @@ -use anyhow::anyhow; -use hyper_rustls::{HttpsConnector, HttpsConnectorBuilder}; -use hyper_util::client::legacy::connect::HttpConnector; -use hyper_util::client::legacy::Client; -use hyper_util::rt::TokioExecutor; -use log::{debug, warn}; -use prost::Message; -use prost_reflect::{DescriptorPool, MethodDescriptor}; -use prost_types::{FileDescriptorProto, FileDescriptorSet}; use std::env::temp_dir; use std::ops::Deref; use std::path::PathBuf; use std::str::FromStr; + +use anyhow::anyhow; +use hyper::client::HttpConnector; +use hyper::Client; +use hyper_rustls::{HttpsConnector, HttpsConnectorBuilder}; +use log::{debug, warn}; +use prost::Message; +use prost_reflect::{DescriptorPool, MethodDescriptor}; +use prost_types::{FileDescriptorProto, FileDescriptorSet}; use tauri::path::BaseDirectory; use tauri::{AppHandle, Manager}; use tauri_plugin_shell::ShellExt; @@ -20,10 +20,10 @@ use tonic::body::BoxBody; use tonic::codegen::http::uri::PathAndQuery; use tonic::transport::Uri; use tonic::Request; -use tonic_reflection::pb::v1::server_reflection_client::ServerReflectionClient; -use tonic_reflection::pb::v1::server_reflection_request::MessageRequest; -use tonic_reflection::pb::v1::server_reflection_response::MessageResponse; -use tonic_reflection::pb::v1::ServerReflectionRequest; +use tonic_reflection::pb::server_reflection_client::ServerReflectionClient; +use tonic_reflection::pb::server_reflection_request::MessageRequest; +use tonic_reflection::pb::server_reflection_response::MessageResponse; +use tonic_reflection::pb::ServerReflectionRequest; pub async fn fill_pool_from_files( app_handle: &AppHandle, @@ -38,8 +38,9 @@ pub async fn fill_pool_from_files( .expect("failed to resolve protoc include directory"); // HACK: Remove UNC prefix for Windows paths - let global_import_dir = - dunce::simplified(global_import_dir.as_path()).to_string_lossy().to_string(); + let global_import_dir = dunce::simplified(global_import_dir.as_path()) + .to_string_lossy() + .to_string(); let desc_path = dunce::simplified(desc_path.as_path()); let mut args = vec![ @@ -88,9 +89,12 @@ pub async fn fill_pool_from_files( let bytes = fs::read(desc_path).await.map_err(|e| e.to_string())?; let fdp = FileDescriptorSet::decode(bytes.deref()).map_err(|e| e.to_string())?; - pool.add_file_descriptor_set(fdp).map_err(|e| e.to_string())?; + pool.add_file_descriptor_set(fdp) + .map_err(|e| e.to_string())?; - fs::remove_file(desc_path).await.map_err(|e| e.to_string())?; + fs::remove_file(desc_path) + .await + .map_err(|e| e.to_string())?; Ok(pool) } @@ -110,34 +114,16 @@ pub async fn fill_pool_from_reflection(uri: &Uri) -> Result Client, BoxBody> { - if let Err(_) = rustls::crypto::ring::default_provider().install_default() { - warn!("Default certs already installed"); - } - - let connector = HttpsConnectorBuilder::new() - .with_native_roots() - .unwrap() - .https_or_http() - .enable_http2() - .wrap_connector({ - let mut http_connector = HttpConnector::new(); - http_connector.enforce_http(false); - http_connector - - // TODO: Figure out how to make proxy work. We'll need to run the following on every request: - // if let Some(headers) = proxy.http_headers(&uri) { - // req.headers_mut().extend(headers.clone().into_iter()); - // } - // This means we need to move this connection logic next to where the req is built - - // let proxy_uri = "http://localhost:9090".parse().unwrap(); - // let proxy = Proxy::new(Intercept::All, proxy_uri); - // let mut proxy_connector = ProxyConnector::unsecured(http_connector); - // proxy_connector.add_proxy(proxy); - // proxy_connector - }); - - Client::builder(TokioExecutor::new()).http2_only(true).build(connector) + let connector = HttpsConnectorBuilder::new().with_native_roots(); + let connector = connector.https_or_http().enable_http2().wrap_connector({ + let mut http_connector = HttpConnector::new(); + http_connector.enforce_http(false); + http_connector + }); + Client::builder() + .pool_max_idle_per_host(0) + .http2_only(true) + .build(connector) } async fn list_services( @@ -151,7 +137,11 @@ async fn list_services( _ => panic!("Expected a ListServicesResponse variant"), }; - Ok(list_services_response.service.iter().map(|s| s.name.clone()).collect::>()) + Ok(list_services_response + .service + .iter() + .map(|s| s.name.clone()) + .collect::>()) } async fn file_descriptor_set_from_service_name( @@ -163,11 +153,14 @@ async fn file_descriptor_set_from_service_name( client, MessageRequest::FileContainingSymbol(service_name.into()), ) - .await + .await { Ok(resp) => resp, Err(e) => { - warn!("Error fetching file descriptor for service {}: {}", service_name, e); + warn!( + "Error fetching file descriptor for service {}: {}", + service_name, e + ); return; } }; @@ -185,7 +178,8 @@ async fn file_descriptor_set_from_service_name( file_descriptor_set_by_filename(&dep_name, pool, client).await; } - pool.add_file_descriptor_proto(fdp).expect("add file descriptor proto"); + pool.add_file_descriptor_proto(fdp) + .expect("add file descriptor proto"); } } @@ -214,7 +208,8 @@ async fn file_descriptor_set_by_filename( for fd in file_descriptor_response.file_descriptor_proto { let fdp = FileDescriptorProto::decode(fd.deref()).unwrap(); - pool.add_file_descriptor_proto(fdp).expect("add file descriptor proto"); + pool.add_file_descriptor_proto(fdp) + .expect("add file descriptor proto"); } } @@ -254,4 +249,4 @@ pub fn method_desc_to_path(md: &MethodDescriptor) -> PathAndQuery { .ok_or_else(|| anyhow!("invalid method path")) .expect("invalid method path"); PathAndQuery::from_str(&format!("/{}/{}", namespace, method_name)).expect("invalid method path") -} +} \ No newline at end of file