diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/general-bots.iml b/.idea/general-bots.iml deleted file mode 100644 index d86ff1d..0000000 --- a/.idea/general-bots.iml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 4d8f223..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 5911f65..2eb7256 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,10 +8,10 @@ "cargo": { "args": [ "build", - "--bin=gb-api" + "--bin=gb-server" ], "filter": { - "name": "gb-api", + "name": "gb-server", "kind": "bin" } }, @@ -26,16 +26,16 @@ { "type": "lldb", "request": "launch", - "name": "Debug unit tests in executable 'gb-api'", + "name": "Debug unit tests in executable 'gb-server'", "cargo": { "args": [ "test", "--no-run", "--lib", - "--package=gb-api" + "--package=gb-server" ], "filter": { - "name": "gb-api", + "name": "gb-server", "kind": "bin" } }, @@ -53,7 +53,7 @@ "test", "--no-run", "--lib", - "--package=gb-api" + "--package=gb-server" ], "filter": { "name": "integration", diff --git a/Cargo.lock b/Cargo.lock index 2dc5042..8cf945e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -68,7 +68,7 @@ dependencies = [ "getrandom 0.2.15", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -96,7 +96,7 @@ dependencies = [ "amq-protocol-types", "amq-protocol-uri", "cookie-factory", - "nom", + "nom 7.1.3", "serde", ] @@ -118,7 +118,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd6484fdc918c1b6e2ae8eda2914d19a5873e1975f93ad8d33d6a24d1d98df05" dependencies = [ "cookie-factory", - "nom", + "nom 7.1.3", "serde", "serde_json", ] @@ -163,9 +163,9 @@ checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" [[package]] name = "approx" @@ -191,7 +191,7 @@ dependencies = [ "base64ct", "blake2", "cpufeatures", - "password-hash", + "password-hash 0.5.0", ] [[package]] @@ -209,26 +209,26 @@ dependencies = [ "asn1-rs-derive 0.4.0", "asn1-rs-impl 0.1.0", "displaydoc", - "nom", + "nom 7.1.3", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] [[package]] name = "asn1-rs" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +checksum = "607495ec7113b178fbba7a6166a27f99e774359ef4823adbefd756b5b81d7970" dependencies = [ - "asn1-rs-derive 0.5.1", + "asn1-rs-derive 0.6.0", "asn1-rs-impl 0.2.0", "displaydoc", - "nom", + "nom 7.1.3", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 2.0.12", "time", ] @@ -246,13 +246,13 @@ dependencies = [ [[package]] name = "asn1-rs-derive" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" +checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", "synstructure 0.13.1", ] @@ -275,7 +275,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -339,9 +339,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.18" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522" +checksum = "310c9bcae737a48ef5cdee3174184e6d548b292739ede61a1f955ef76a738861" dependencies = [ "flate2", "futures-core", @@ -359,7 +359,7 @@ dependencies = [ "async-task", "concurrent-queue", "fastrand 2.3.0", - "futures-lite 2.5.0", + "futures-lite 2.6.0", "slab", ] @@ -374,18 +374,32 @@ dependencies = [ "async-io 2.4.0", "async-lock 3.4.0", "blocking", - "futures-lite 2.5.0", + "futures-lite 2.6.0", "once_cell", "tokio", ] [[package]] -name = "async-global-executor-trait" -version = "2.1.2" +name = "async-global-executor" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f19936c1a84fb48ceb8899b642d2a72572587d1021cc561bfb24de9f33ee89" +checksum = "13f937e26114b93193065fd44f507aa2e9169ad0cdabbb996920b1fe1ddea7ba" dependencies = [ - "async-global-executor", + "async-channel 2.3.1", + "async-executor", + "async-io 2.4.0", + "async-lock 3.4.0", + "blocking", + "futures-lite 2.6.0", +] + +[[package]] +name = "async-global-executor-trait" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9af57045d58eeb1f7060e7025a1631cbc6399e0a1d10ad6735b3d0ea7f8346ce" +dependencies = [ + "async-global-executor 3.1.0", "async-trait", "executor-trait", ] @@ -404,7 +418,7 @@ dependencies = [ "log", "parking", "polling 2.8.0", - "rustix 0.37.27", + "rustix 0.37.28", "slab", "socket2 0.4.10", "waker-fn", @@ -420,10 +434,10 @@ dependencies = [ "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.5.0", + "futures-lite 2.6.0", "parking", "polling 3.7.4", - "rustix 0.38.42", + "rustix 0.38.44", "slab", "tracing", "windows-sys 0.59.0", @@ -444,7 +458,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 5.3.1", + "event-listener 5.4.0", "event-listener-strategy", "pin-project-lite", ] @@ -462,9 +476,9 @@ dependencies = [ "async-task", "blocking", "cfg-if", - "event-listener 5.3.1", - "futures-lite 2.5.0", - "rustix 0.38.42", + "event-listener 5.4.0", + "futures-lite 2.6.0", + "rustix 0.38.44", "tracing", ] @@ -488,7 +502,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -503,7 +517,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 0.38.42", + "rustix 0.38.44", "signal-hook-registry", "slab", "windows-sys 0.59.0", @@ -517,7 +531,7 @@ checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" dependencies = [ "async-attributes", "async-channel 1.9.0", - "async-global-executor", + "async-global-executor 2.4.1", "async-io 2.4.0", "async-lock 3.4.0", "async-process", @@ -525,7 +539,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-io", - "futures-lite 2.5.0", + "futures-lite 2.6.0", "gloo-timers", "kv-log-macro", "log", @@ -556,7 +570,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -567,13 +581,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.83" +version = "0.1.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +checksum = "d556ec1359574147ec0c4fc5eb525f3f23263a592b1a9c07e0a75b427de55c97" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -619,9 +633,9 @@ dependencies = [ [[package]] name = "auto_generate_cdp" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7af08ed49930c50104b2f1699d257e5053fb1809e370647bde9c58b31d65d417" +checksum = "d6e1961a0d5d77969057eba90d448e610d3c439024d135d9dbd98e33ec973520" dependencies = [ "convert_case", "proc-macro2", @@ -680,7 +694,7 @@ dependencies = [ "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.2", + "hyper 1.6.0", "hyper-util", "itoa", "matchit", @@ -771,18 +785,7 @@ checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", -] - -[[package]] -name = "backoff" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" -dependencies = [ - "getrandom 0.2.15", - "instant", - "rand 0.8.5", + "syn 2.0.99", ] [[package]] @@ -812,12 +815,6 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" -[[package]] -name = "base64" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5" - [[package]] name = "base64" version = "0.21.7" @@ -847,24 +844,21 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.64.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" +checksum = "fd4865004a46a0aafb2a0a5eb19d3c9fc46ee5f063a6cfc605c69ac9ecf5263d" dependencies = [ "bitflags 1.3.2", "cexpr", "clang-sys", "lazy_static", "lazycell", - "log", "peeking_take_while", "proc-macro2", "quote", "regex", "rustc-hash", - "shlex", - "syn 1.0.109", - "which 4.4.2", + "shlex 0.1.1", ] [[package]] @@ -897,9 +891,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" dependencies = [ "serde", ] @@ -940,26 +934,24 @@ dependencies = [ "async-channel 2.3.1", "async-task", "futures-io", - "futures-lite 2.5.0", + "futures-lite 2.6.0", "piper", ] [[package]] -name = "bollard-stubs" -version = "1.41.0" +name = "boringssl-src" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2f2e73fffe9455141e170fb9c1feb0ac521ec7e7dcd47a7cab72a658490fb8" +checksum = "0511b9f0b739706e05b7279ece5dfc1932a42839cf005cb0f00420a3fea27c96" dependencies = [ - "chrono", - "serde", - "serde_with", + "cmake", ] [[package]] name = "bstr" -version = "1.11.1" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "786a307d683a5bf92e6fd5fd69a7eb613751668d1d8d67d802846dfe367c62c8" +checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" dependencies = [ "memchr", "regex-automata 0.4.9", @@ -968,15 +960,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" [[package]] name = "byteorder" @@ -986,13 +978,48 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" dependencies = [ "serde", ] +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.13+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "calamine" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95f023f9ae2c2f017564b7eca85660c3c09477bb037f2fbfbaaba732b5642a32" +dependencies = [ + "byteorder", + "codepage", + "encoding_rs", + "log", + "quick-xml", + "serde", + "zip", +] + [[package]] name = "cast" version = "0.3.0" @@ -1010,11 +1037,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.5" +version = "1.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" +checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" dependencies = [ - "shlex", + "jobserver", + "libc", + "shlex 1.3.0", ] [[package]] @@ -1031,11 +1060,11 @@ dependencies = [ [[package]] name = "cexpr" -version = "0.6.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" dependencies = [ - "nom", + "nom 5.1.3", ] [[package]] @@ -1075,13 +1104,13 @@ dependencies = [ "chromiumoxide_types", "dunce", "fnv", - "futures", + "futures 0.3.31", "futures-timer", "pin-project-lite", "reqwest", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "url", @@ -1130,9 +1159,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", @@ -1140,7 +1169,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -1193,18 +1222,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.23" +version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" +checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.23" +version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" +checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863" dependencies = [ "anstyle", "clap_lex", @@ -1218,9 +1247,9 @@ checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "cmake" -version = "0.1.52" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" dependencies = [ "cc", ] @@ -1237,6 +1266,15 @@ dependencies = [ "x509-cert", ] +[[package]] +name = "codepage" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f68d061bc2828ae826206326e61251aca94c1e4a5305cf52d9138639c918b4" +dependencies = [ + "encoding_rs", +] + [[package]] name = "color_quant" version = "1.1.0" @@ -1272,6 +1310,12 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + [[package]] name = "conv" version = "0.3.3" @@ -1350,9 +1394,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -1392,7 +1436,7 @@ dependencies = [ "ciborium", "clap", "criterion-plot", - "futures", + "futures 0.3.31", "is-terminal", "itertools 0.10.5", "num-traits", @@ -1463,9 +1507,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-bigint" @@ -1532,7 +1576,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -1541,62 +1585,14 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core 0.13.4", - "darling_macro 0.13.4", -] - -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - [[package]] name = "darling" version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "darling_core 0.20.10", - "darling_macro 0.20.10", -] - -[[package]] -name = "darling_core" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", + "darling_core", + "darling_macro", ] [[package]] @@ -1609,30 +1605,8 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim 0.11.1", - "syn 2.0.91", -] - -[[package]] -name = "darling_macro" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core 0.13.4", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", + "strsim", + "syn 2.0.99", ] [[package]] @@ -1641,9 +1615,9 @@ version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "darling_core 0.20.10", + "darling_core", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -1656,14 +1630,14 @@ dependencies = [ "hashbrown 0.14.5", "lock_api", "once_cell", - "parking_lot_core", + "parking_lot_core 0.9.10", ] [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "deadpool" @@ -1705,7 +1679,7 @@ checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ "asn1-rs 0.5.2", "displaydoc", - "nom", + "nom 7.1.3", "num-bigint", "num-traits", "rusticata-macros", @@ -1713,13 +1687,13 @@ dependencies = [ [[package]] name = "der-parser" -version = "9.0.0" +version = "10.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" dependencies = [ - "asn1-rs 0.6.2", + "asn1-rs 0.7.0", "displaydoc", - "nom", + "nom 7.1.3", "num-bigint", "num-traits", "rusticata-macros", @@ -1733,7 +1707,7 @@ checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -1756,6 +1730,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "derive-new" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "derive_builder" version = "0.20.2" @@ -1771,10 +1756,10 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" dependencies = [ - "darling 0.20.10", + "darling", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -1784,7 +1769,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -1820,27 +1805,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -1849,7 +1813,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -1858,6 +1822,21 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "docx-rs" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e593b51d4fe95d69d70fd40da4b314b029736302c986c3c760826e842fd27dc3" +dependencies = [ + "base64 0.13.1", + "image", + "serde", + "serde_json", + "thiserror 1.0.69", + "xml-rs", + "zip", +] + [[package]] name = "dotenvy" version = "0.15.7" @@ -1882,10 +1861,10 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cac124e13ae9aa56acc4241f8c8207501d93afdd8d8e62f0c1f2e12f6508c65" dependencies = [ - "darling 0.20.10", + "darling", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -1894,12 +1873,6 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" -[[package]] -name = "dyn-clone" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" - [[package]] name = "ecdsa" version = "0.16.9" @@ -1916,9 +1889,9 @@ dependencies = [ [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" dependencies = [ "serde", ] @@ -1954,10 +1927,16 @@ dependencies = [ ] [[package]] -name = "equivalent" -version = "1.0.1" +name = "env_home" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" @@ -1988,9 +1967,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ "concurrent-queue", "parking", @@ -2003,7 +1982,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ - "event-listener 5.3.1", + "event-listener 5.4.0", "pin-project-lite", ] @@ -2031,6 +2010,17 @@ dependencies = [ "zune-inflate", ] +[[package]] +name = "fail" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be3c61c59fdc91f5dbc3ea31ee8623122ce80057058be560654c5d410d181a6" +dependencies = [ + "lazy_static", + "log", + "rand 0.7.3", +] + [[package]] name = "fake" version = "2.10.0" @@ -2104,6 +2094,18 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +[[package]] +name = "fixedbitset" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "flagset" version = "0.4.6" @@ -2112,9 +2114,9 @@ checksum = "b3ea1ec5f8307826a5b71094dd91fc04d4ae75d5709b20ad351c7fb4815c86ec" [[package]] name = "flate2" -version = "1.0.35" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" dependencies = [ "crc32fast", "miniz_oxide", @@ -2177,6 +2179,12 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" +[[package]] +name = "futures" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" + [[package]] name = "futures" version = "0.3.31" @@ -2217,6 +2225,7 @@ dependencies = [ "futures-core", "futures-task", "futures-util", + "num_cpus", ] [[package]] @@ -2227,7 +2236,7 @@ checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" dependencies = [ "futures-core", "lock_api", - "parking_lot", + "parking_lot 0.12.3", ] [[package]] @@ -2253,9 +2262,9 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ "fastrand 2.3.0", "futures-core", @@ -2272,7 +2281,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -2299,6 +2308,7 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ + "futures 0.1.31", "futures-channel", "futures-core", "futures-io", @@ -2311,35 +2321,6 @@ dependencies = [ "slab", ] -[[package]] -name = "gb-api" -version = "0.1.0" -dependencies = [ - "async-trait", - "axum 0.7.9", - "chrono", - "futures-util", - "gb-core", - "gb-file", - "gb-messaging", - "gb-monitoring", - "hyper 1.5.2", - "hyper-util", - "redis 0.23.3", - "rstest", - "serde", - "serde_json", - "sqlx", - "tokio", - "tokio-stream", - "tokio-test", - "tower 0.4.13", - "tower-http 0.5.2", - "tracing", - "tracing-subscriber", - "uuid", -] - [[package]] name = "gb-auth" version = "0.1.0" @@ -2356,18 +2337,18 @@ dependencies = [ "oauth2", "openid", "rand 0.8.5", - "redis 0.24.0", - "ring 0.17.8", + "redis", + "ring 0.17.13", "rstest", "serde", "serde_json", "sqlx", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-openssl", "tokio-test", "tower 0.4.13", - "tower-http 0.5.2", + "tower-http", "tracing", "uuid", "validator", @@ -2390,13 +2371,35 @@ dependencies = [ "rstest", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-test", "tracing", "uuid", ] +[[package]] +name = "gb-calendar" +version = "0.1.0" +dependencies = [ + "gb-core", +] + +[[package]] +name = "gb-cloud" +version = "0.1.0" +dependencies = [ + "async-trait", + "gb-core", + "rstest", + "serde", + "tempfile", + "thiserror 1.0.69", + "tokio", + "tokio-test", + "tracing", +] + [[package]] name = "gb-core" version = "0.1.0" @@ -2405,19 +2408,40 @@ dependencies = [ "axum 0.7.9", "chrono", "mockall", - "redis 0.24.0", + "redis", "rstest", "serde", "serde_json", "sqlx", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-test", - "tokio-tungstenite 0.18.0", + "tokio-tungstenite 0.24.0", "tracing", "uuid", ] +[[package]] +name = "gb-document" +version = "0.1.0" +dependencies = [ + "async-trait", + "calamine", + "docx-rs", + "encoding_rs", + "gb-core", + "lopdf", + "rstest", + "serde", + "serde_json", + "tempfile", + "thiserror 1.0.69", + "tokio", + "tokio-test", + "tracing", + "zip", +] + [[package]] name = "gb-file" version = "0.1.0" @@ -2429,7 +2453,7 @@ dependencies = [ "serde", "serde_json", "tempfile", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-test", "tracing", @@ -2449,13 +2473,24 @@ dependencies = [ "serde", "serde_json", "tempfile", - "tesseract", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-test", "tracing", ] +[[package]] +name = "gb-llm" +version = "0.1.0" +dependencies = [ + "async-trait", + "gb-core", + "rstest", + "thiserror 1.0.69", + "tokio", + "tracing", +] + [[package]] name = "gb-media" version = "0.1.0" @@ -2481,18 +2516,18 @@ version = "0.1.0" dependencies = [ "async-trait", "chrono", - "futures", + "futures 0.3.31", "futures-util", "gb-core", "lapin", "rdkafka", - "redis 0.24.0", + "redis", "rstest", "serde", "serde_json", "tokio", "tokio-test", - "tokio-tungstenite 0.20.1", + "tokio-tungstenite 0.24.0", "tracing", "uuid", ] @@ -2519,17 +2554,46 @@ dependencies = [ "lazy_static", "opentelemetry 0.19.0", "opentelemetry-otlp", - "prometheus", + "prometheus 0.13.4", "rstest", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-test", "tracing", "tracing-subscriber", ] +[[package]] +name = "gb-server" +version = "0.1.0" +dependencies = [ + "async-trait", + "axum 0.7.9", + "chrono", + "futures-util", + "gb-core", + "gb-file", + "gb-messaging", + "gb-monitoring", + "hyper 1.6.0", + "hyper-util", + "redis", + "rstest", + "serde", + "serde_json", + "sqlx", + "tokio", + "tokio-stream", + "tokio-test", + "tower 0.4.13", + "tower-http", + "tracing", + "tracing-subscriber", + "uuid", +] + [[package]] name = "gb-storage" version = "0.1.0" @@ -2538,11 +2602,12 @@ dependencies = [ "chrono", "gb-core", "mockall", - "redis 0.24.0", + "redis", "rstest", "serde", "serde_json", "sqlx", + "tikv-client", "tokio", "tokio-test", "tracing", @@ -2559,33 +2624,67 @@ dependencies = [ "chrono", "criterion", "fake", - "futures", - "gb-api", + "futures 0.3.31", "gb-auth", "gb-core", + "gb-server", "goose", - "hyper 1.5.2", - "k8s-openapi", - "kube", + "hyper 1.6.0", "opentelemetry 0.20.0", "predicates", - "prometheus", + "prometheus 0.13.4", "rand 0.8.5", - "redis 0.24.0", + "redis", "reqwest", "rstest", "serde", "serde_json", "sqlx", - "testcontainers", "tokio", - "tokio-tungstenite 0.20.1", + "tokio-tungstenite 0.24.0", "tracing", "tungstenite 0.20.1", "uuid", "wiremock", ] +[[package]] +name = "gb-utils" +version = "0.1.0" +dependencies = [ + "async-trait", + "gb-core", + "gb-document", + "gb-image", + "mime", + "mime_guess", + "rstest", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tokio-test", + "tracing", + "uuid", +] + +[[package]] +name = "gb-vm" +version = "0.1.0" +dependencies = [ + "async-trait", + "gb-core", + "minio", + "rstest", + "serde", + "serde_json", + "tempfile", + "thiserror 1.0.69", + "tokio", + "tokio-test", + "tracing", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -2621,6 +2720,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", +] + [[package]] name = "ghash" version = "0.5.1" @@ -2666,7 +2777,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "futures-channel", "futures-core", "futures-executor", @@ -2680,7 +2791,7 @@ dependencies = [ "memchr", "once_cell", "smallvec", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2694,7 +2805,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -2709,9 +2820,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "gloo-timers" @@ -2747,7 +2858,7 @@ dependencies = [ "ctrlc", "downcast-rs", "flume", - "futures", + "futures 0.3.31", "gumdrop", "http 0.2.12", "itertools 0.11.0", @@ -2779,6 +2890,51 @@ dependencies = [ "subtle", ] +[[package]] +name = "grpcio" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cf790272c5fb75a2fd7f2e8282e910d0fe0ed1d954cb29b07b74228694302a" +dependencies = [ + "bytes", + "futures 0.3.31", + "grpcio-sys", + "libc", + "log", + "parking_lot 0.11.2", + "prost 0.7.0", +] + +[[package]] +name = "grpcio-compiler" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "375292b9a9e3f5f9c6ef978d1f28070a6b56ab78f8be0cfbee16c62d5b0fa361" +dependencies = [ + "derive-new", + "prost 0.11.9", + "prost-build 0.11.9", + "prost-types 0.11.9", + "tempfile", +] + +[[package]] +name = "grpcio-sys" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f89a56d830be4dddc939c377c95e3b77e30c86a8df99c20095c34cf9038447b" +dependencies = [ + "bindgen", + "boringssl-src", + "cc", + "cmake", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "walkdir", +] + [[package]] name = "gstreamer" version = "0.21.3" @@ -2801,7 +2957,7 @@ dependencies = [ "pin-project-lite", "pretty-hex", "smallvec", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2848,7 +3004,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.7.0", + "indexmap 2.7.1", "slab", "tokio", "tokio-util", @@ -2857,9 +3013,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" dependencies = [ "atomic-waker", "bytes", @@ -2867,7 +3023,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.2.0", - "indexmap 2.7.0", + "indexmap 2.7.1", "slab", "tokio", "tokio-util", @@ -2941,25 +3097,34 @@ dependencies = [ [[package]] name = "headless_chrome" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff091d678f38868547c5ee26b5c4105a03ec2a2099463ebc48c4d5ccf239036" +checksum = "c268ea01c2902b2acb382c1fae26818113dd661e0dba036a893f0ba40f00cdd8" dependencies = [ "anyhow", "auto_generate_cdp", "base64 0.22.1", "derive_builder", "log", - "rand 0.8.5", + "rand 0.9.0", "regex", "serde", "serde_json", "tempfile", - "thiserror", - "tungstenite 0.24.0", + "thiserror 2.0.12", + "tungstenite 0.26.2", "url", - "which 6.0.3", - "winreg 0.52.0", + "which 7.0.2", + "winreg 0.55.0", +] + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", ] [[package]] @@ -2989,6 +3154,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +[[package]] +name = "hermit-abi" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" + [[package]] name = "hex" version = "0.4.3" @@ -3080,9 +3251,9 @@ dependencies = [ [[package]] name = "http-range-header" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" +checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" [[package]] name = "http-types" @@ -3107,9 +3278,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.5" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -3143,14 +3314,14 @@ dependencies = [ [[package]] name = "hyper" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.7", + "h2 0.4.8", "http 1.2.0", "http-body 1.0.1", "httparse", @@ -3162,24 +3333,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-openssl" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6ee5d7a8f718585d1c3c61dfde28ef5b0bb14734b4db13f5ada856cdc6c612b" -dependencies = [ - "http 0.2.12", - "hyper 0.14.32", - "linked_hash_set", - "once_cell", - "openssl", - "openssl-sys", - "parking_lot", - "tokio", - "tokio-openssl", - "tower-layer", -] - [[package]] name = "hyper-rustls" version = "0.24.2" @@ -3229,7 +3382,7 @@ dependencies = [ "futures-util", "http 1.2.0", "http-body 1.0.1", - "hyper 1.5.2", + "hyper 1.6.0", "pin-project-lite", "tokio", "tower-service", @@ -3373,7 +3526,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -3477,9 +3630,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -3493,9 +3646,9 @@ checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" [[package]] name = "inout" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "block-padding", "generic-array", @@ -3522,7 +3675,7 @@ dependencies = [ "rand 0.8.5", "rtcp", "rtp 0.9.0", - "thiserror", + "thiserror 1.0.69", "tokio", "waitgroup", "webrtc-srtp", @@ -3542,19 +3695,28 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.10.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is-terminal" -version = "0.4.13" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ - "hermit-abi 0.4.0", + "hermit-abi 0.5.0", "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", +] + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", ] [[package]] @@ -3586,9 +3748,18 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] [[package]] name = "jpeg-decoder" @@ -3601,172 +3772,29 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", ] -[[package]] -name = "json-patch" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec9ad60d674508f3ca8f380a928cfe7b096bc729c4e2dbfe3852bc45da3ab30b" -dependencies = [ - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "jsonpath_lib" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaa63191d68230cccb81c5aa23abd53ed64d83337cacbb25a7b8c7979523774f" -dependencies = [ - "log", - "serde", - "serde_json", -] - [[package]] name = "jsonwebtoken" -version = "9.3.0" +version = "9.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" +checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "js-sys", - "pem 3.0.4", - "ring 0.17.8", + "pem", + "ring 0.17.13", "serde", "serde_json", "simple_asn1", ] -[[package]] -name = "k8s-openapi" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd990069640f9db34b3b0f7a1afc62a05ffaa3be9b66aa3c313f58346df7f788" -dependencies = [ - "base64 0.21.7", - "bytes", - "chrono", - "http 0.2.12", - "percent-encoding", - "serde", - "serde-value", - "serde_json", - "url", -] - -[[package]] -name = "kube" -version = "0.82.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc7d3d52dd5c871991679102e80dfb192faaaa09fecdbccdd8c55af264ce7a8f" -dependencies = [ - "k8s-openapi", - "kube-client", - "kube-core", - "kube-derive", - "kube-runtime", -] - -[[package]] -name = "kube-client" -version = "0.82.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "544339f1665488243f79080441cacb09c997746fd763342303e66eebb9d3ba13" -dependencies = [ - "base64 0.20.0", - "bytes", - "chrono", - "dirs-next", - "either", - "futures", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper-openssl", - "hyper-timeout", - "jsonpath_lib", - "k8s-openapi", - "kube-core", - "openssl", - "pem 1.1.1", - "pin-project", - "secrecy", - "serde", - "serde_json", - "serde_yaml", - "thiserror", - "tokio", - "tokio-util", - "tower 0.4.13", - "tower-http 0.4.4", - "tracing", -] - -[[package]] -name = "kube-core" -version = "0.82.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25983d07f414dfffba08c5951fe110f649113416b1d8e22f7c89c750eb2555a7" -dependencies = [ - "chrono", - "form_urlencoded", - "http 0.2.12", - "json-patch", - "k8s-openapi", - "once_cell", - "schemars", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "kube-derive" -version = "0.82.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5af652b642aca19ef5194de3506aa39f89d788d5326a570da68b13a02d6c5ba2" -dependencies = [ - "darling 0.14.4", - "proc-macro2", - "quote", - "serde_json", - "syn 1.0.109", -] - -[[package]] -name = "kube-runtime" -version = "0.82.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "125331201e3073707ac79c294c89021faa76c84da3a566a3749a2a93d295c98a" -dependencies = [ - "ahash", - "async-trait", - "backoff", - "derivative", - "futures", - "json-patch", - "k8s-openapi", - "kube-client", - "parking_lot", - "pin-project", - "serde", - "serde_json", - "smallvec", - "thiserror", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "kv-log-macro" version = "1.0.7" @@ -3778,9 +3806,9 @@ dependencies = [ [[package]] name = "lapin" -version = "2.5.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "209b09a06f4bd4952a0fd0594f90d53cf4496b062f59acc838a2823e1bb7d95c" +checksum = "3551b363b2fcf985fa39c47114333fa12fbb6518f863d4fd9556d0e19f48c1c9" dependencies = [ "amq-protocol", "async-global-executor-trait", @@ -3790,7 +3818,7 @@ dependencies = [ "flume", "futures-core", "futures-io", - "parking_lot", + "parking_lot 0.12.3", "pinky-swear", "reactor-trait", "serde", @@ -3819,33 +3847,11 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" -[[package]] -name = "leptonica-plumbing" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7a74c43d6f090d39158d233f326f47cd8bba545217595c93662b4e31156f42" -dependencies = [ - "leptonica-sys", - "libc", - "thiserror", -] - -[[package]] -name = "leptonica-sys" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da627c72b2499a8106f4dd33143843015e4a631f445d561f3481f7fba35b6151" -dependencies = [ - "bindgen", - "pkg-config", - "vcpkg", -] - [[package]] name = "libc" -version = "0.2.169" +version = "0.2.170" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" [[package]] name = "libloading" @@ -3863,16 +3869,6 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.6.0", - "libc", -] - [[package]] name = "libsqlite3-sys" version = "0.27.0" @@ -3886,9 +3882,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.20" +version = "1.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" +checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa" dependencies = [ "cc", "libc", @@ -3902,15 +3898,6 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" -[[package]] -name = "linked_hash_set" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae85b5be22d9843c80e5fc80e9b64c8a3b1f98f867c709956eca3efff4e92e2" -dependencies = [ - "linked-hash-map", -] - [[package]] name = "linux-raw-sys" version = "0.3.8" @@ -3919,15 +3906,21 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9c683daf087dc577b7506e9695b3d556a9f3849903fa28186283afd6809e9" [[package]] name = "litemap" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "lock_api" @@ -3941,13 +3934,32 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" dependencies = [ "value-bag", ] +[[package]] +name = "lopdf" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07c8e1b6184b1b32ea5f72f572ebdc40e5da1d2921fa469947ff7c480ad1f85a" +dependencies = [ + "chrono", + "encoding_rs", + "flate2", + "itoa", + "linked-hash-map", + "log", + "md5", + "nom 7.1.3", + "rayon", + "time", + "weezl", +] + [[package]] name = "matchers" version = "0.1.0" @@ -4010,6 +4022,16 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -4039,7 +4061,7 @@ dependencies = [ "hyper 0.14.32", "lazy_static", "md5", - "multimap", + "multimap 0.9.1", "os_info", "rand 0.8.5", "regex", @@ -4054,9 +4076,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" +checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" dependencies = [ "adler2", "simd-adler32", @@ -4103,7 +4125,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -4129,6 +4151,12 @@ dependencies = [ "version_check", ] +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + [[package]] name = "multimap" version = "0.9.1" @@ -4164,9 +4192,9 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ "libc", "log", @@ -4198,12 +4226,22 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "cfg-if", "cfg_aliases", "libc", ] +[[package]] +name = "nom" +version = "5.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08959a387a676302eebf4ddbcbc611da04285579f76f88ee0506c63b1a61dd4b" +dependencies = [ + "memchr", + "version_check", +] + [[package]] name = "nom" version = "7.1.3" @@ -4365,7 +4403,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -4393,7 +4431,7 @@ dependencies = [ "serde_json", "serde_path_to_error", "sha2", - "thiserror", + "thiserror 1.0.69", "url", ] @@ -4417,24 +4455,24 @@ dependencies = [ [[package]] name = "oid-registry" -version = "0.7.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" +checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" dependencies = [ - "asn1-rs 0.6.2", + "asn1-rs 0.7.0", ] [[package]] name = "once_cell" -version = "1.20.2" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "oorandom" -version = "11.1.4" +version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" [[package]] name = "opaque-debug" @@ -4456,18 +4494,18 @@ dependencies = [ "reqwest", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "url", "validator", ] [[package]] name = "openssl" -version = "0.10.68" +version = "0.10.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "cfg-if", "foreign-types", "libc", @@ -4484,23 +4522,33 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-src" +version = "300.4.2+3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168ce4e058f975fe43e89d9ccf78ca668601887ae736090aacc23ae353c298e2" +dependencies = [ + "cc", +] [[package]] name = "openssl-sys" -version = "0.9.104" +version = "0.9.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd" dependencies = [ "cc", "libc", + "openssl-src", "pkg-config", "vcpkg", ] @@ -4532,13 +4580,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8af72d59a4484654ea8eb183fea5ae4eb6a41d7ac3e3bae5f4d2a282a3a7d3ca" dependencies = [ "async-trait", - "futures", + "futures 0.3.31", "futures-util", "http 0.2.12", "opentelemetry 0.19.0", "opentelemetry-proto", - "prost", - "thiserror", + "prost 0.11.9", + "thiserror 1.0.69", "tokio", "tonic", ] @@ -4549,10 +4597,10 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "045f8eea8c0fa19f7d48e7bc3128a39c2e5c533d5c61298c548dfefc1064474c" dependencies = [ - "futures", + "futures 0.3.31", "futures-util", "opentelemetry 0.19.0", - "prost", + "prost 0.11.9", "tonic", ] @@ -4568,7 +4616,7 @@ dependencies = [ "indexmap 1.9.3", "once_cell", "pin-project-lite", - "thiserror", + "thiserror 1.0.69", "urlencoding", ] @@ -4584,7 +4632,7 @@ dependencies = [ "js-sys", "once_cell", "pin-project-lite", - "thiserror", + "thiserror 1.0.69", "urlencoding", ] @@ -4605,7 +4653,7 @@ dependencies = [ "opentelemetry_api 0.19.0", "percent-encoding", "rand 0.8.5", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", ] @@ -4623,10 +4671,10 @@ dependencies = [ "futures-util", "once_cell", "opentelemetry_api 0.20.0", - "ordered-float 3.9.2", + "ordered-float", "percent-encoding", "rand 0.8.5", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", ] @@ -4650,15 +4698,6 @@ dependencies = [ "libc", ] -[[package]] -name = "ordered-float" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" -dependencies = [ - "num-traits", -] - [[package]] name = "ordered-float" version = "3.9.2" @@ -4696,9 +4735,9 @@ dependencies = [ [[package]] name = "p12-keystore" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7b60d0b2dcace322e6e8c4499c4c8bdf331c1bae046a54be5e4191c3610286" +checksum = "a09eaa3a6d8884c204c2ab17e313f563b524362e62567f09ba27857a6e31257f" dependencies = [ "cbc", "cms", @@ -4708,12 +4747,12 @@ dependencies = [ "hmac", "pkcs12", "pkcs5", - "rand 0.8.5", + "rand 0.9.0", "rc2", "sha1", "sha2", - "thiserror", - "x509-parser 0.16.0", + "thiserror 2.0.12", + "x509-parser 0.17.0", ] [[package]] @@ -4730,9 +4769,9 @@ dependencies = [ [[package]] name = "p384" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" dependencies = [ "ecdsa", "elliptic-curve", @@ -4746,6 +4785,17 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + [[package]] name = "parking_lot" version = "0.12.3" @@ -4753,7 +4803,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", - "parking_lot_core", + "parking_lot_core 0.9.10", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", ] [[package]] @@ -4764,11 +4828,22 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.5.10", "smallvec", "windows-targets 0.52.6", ] +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "password-hash" version = "0.5.0" @@ -4786,6 +4861,18 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest", + "hmac", + "password-hash 0.4.2", + "sha2", +] + [[package]] name = "pbkdf2" version = "0.12.2" @@ -4804,18 +4891,9 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "pem" -version = "1.1.1" +version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" -dependencies = [ - "base64 0.13.1", -] - -[[package]] -name = "pem" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" dependencies = [ "base64 0.22.1", "serde", @@ -4837,30 +4915,50 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] -name = "pin-project" -version = "1.1.7" +name = "petgraph" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" +dependencies = [ + "fixedbitset 0.2.0", + "indexmap 1.9.3", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset 0.4.2", + "indexmap 2.7.1", +] + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.7" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] name = "pin-project-lite" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -4876,7 +4974,7 @@ checksum = "6cfae3ead413ca051a681152bd266438d3bfa301c9bdf836939a14c721bb2a21" dependencies = [ "doc-comment", "flume", - "parking_lot", + "parking_lot 0.12.3", "tracing", ] @@ -4926,7 +5024,7 @@ dependencies = [ "aes", "cbc", "der", - "pbkdf2", + "pbkdf2 0.12.2", "scrypt", "sha2", "spki", @@ -4944,9 +5042,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plotters" @@ -5015,7 +5113,7 @@ dependencies = [ "concurrent-queue", "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.42", + "rustix 0.38.44", "tracing", "windows-sys 0.59.0", ] @@ -5044,7 +5142,7 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -5083,6 +5181,16 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbc83ee4a840062f368f9096d80077a9841ec117e17e7f700df81958f1451254" +[[package]] +name = "prettyplease" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +dependencies = [ + "proc-macro2", + "syn 1.0.109", +] + [[package]] name = "primeorder" version = "0.13.6" @@ -5128,24 +5236,38 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] +[[package]] +name = "procfs" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab8809e0c18450a2db0f236d2a44ec0b4c1412d0eb936233579f0990faa5d5cd" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "flate2", + "hex", + "lazy_static", + "libc", +] + [[package]] name = "procfs" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "731e0d9356b0c25f16f33b5be79b1c57b562f141ebfcdb0ad8ac2c13a24293b4" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "hex", "lazy_static", "procfs-core", - "rustix 0.38.42", + "rustix 0.38.44", ] [[package]] @@ -5154,10 +5276,28 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d3554923a69f4ce04c4a754260c338f505ce22642d3830e049a399fc2059a29" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "hex", ] +[[package]] +name = "prometheus" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5986aa8d62380092d2f50f8b1cdba9cb9b6731ffd4b25b51fd126b6c3e05b99c" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "libc", + "memchr", + "parking_lot 0.11.2", + "procfs 0.9.1", + "protobuf", + "reqwest", + "thiserror 1.0.69", +] + [[package]] name = "prometheus" version = "0.13.4" @@ -5169,10 +5309,20 @@ dependencies = [ "lazy_static", "libc", "memchr", - "parking_lot", - "procfs", + "parking_lot 0.12.3", + "procfs 0.16.0", "protobuf", - "thiserror", + "thiserror 1.0.69", +] + +[[package]] +name = "prost" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e6984d2f1a23009bd270b8bb56d0926810a3d483f59c987d77969e9d8e840b2" +dependencies = [ + "bytes", + "prost-derive 0.7.0", ] [[package]] @@ -5182,7 +5332,60 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" dependencies = [ "bytes", - "prost-derive", + "prost-derive 0.11.9", +] + +[[package]] +name = "prost-build" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32d3ebd75ac2679c2af3a92246639f9fcc8a442ee420719cc4fe195b98dd5fa3" +dependencies = [ + "bytes", + "heck 0.3.3", + "itertools 0.9.0", + "log", + "multimap 0.8.3", + "petgraph 0.5.1", + "prost 0.7.0", + "prost-types 0.7.0", + "tempfile", + "which 4.4.2", +] + +[[package]] +name = "prost-build" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +dependencies = [ + "bytes", + "heck 0.4.1", + "itertools 0.10.5", + "lazy_static", + "log", + "multimap 0.8.3", + "petgraph 0.6.5", + "prettyplease", + "prost 0.11.9", + "prost-types 0.11.9", + "regex", + "syn 1.0.109", + "tempfile", + "which 4.4.2", +] + +[[package]] +name = "prost-derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "169a15f3008ecb5160cba7d37bcd690a7601b6d30cfb87a117d45e59d52af5d4" +dependencies = [ + "anyhow", + "itertools 0.9.0", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -5198,12 +5401,45 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "prost-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b518d7cdd93dab1d1122cf07fa9a60771836c668dde9d9e2a139f957f0d9f1bb" +dependencies = [ + "bytes", + "prost 0.7.0", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost 0.11.9", +] + [[package]] name = "protobuf" version = "2.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" +[[package]] +name = "protobuf-build" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a7266835d38c38c73b091a24412de1f4b4382a5195fab1ec038161582b03b78" +dependencies = [ + "bitflags 1.3.2", + "grpcio-compiler", + "proc-macro2", + "prost-build 0.7.0", + "quote", + "syn 1.0.109", +] + [[package]] name = "psl-types" version = "2.0.11" @@ -5230,10 +5466,20 @@ dependencies = [ ] [[package]] -name = "quote" -version = "1.0.37" +name = "quick-xml" +version = "0.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" +dependencies = [ + "encoding_rs", + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801" dependencies = [ "proc-macro2", ] @@ -5262,6 +5508,17 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", + "zerocopy 0.8.23", +] + [[package]] name = "rand_chacha" version = "0.2.2" @@ -5282,6 +5539,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + [[package]] name = "rand_core" version = "0.5.1" @@ -5300,6 +5567,15 @@ dependencies = [ "getrandom 0.2.15", ] +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.1", +] + [[package]] name = "rand_distr" version = "0.2.2" @@ -5359,7 +5635,7 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52c4f3084aa3bc7dfbba4eff4fab2a54db4324965d8872ab933565e6fbd83bc6" dependencies = [ - "pem 3.0.4", + "pem", "ring 0.16.20", "time", "x509-parser 0.15.1", @@ -5409,27 +5685,6 @@ dependencies = [ "futures-io", ] -[[package]] -name = "redis" -version = "0.23.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f49cdc0bb3f412bf8e7d1bd90fe1d9eb10bc5c399ba90973c14662a27b3f8ba" -dependencies = [ - "async-trait", - "bytes", - "combine", - "futures-util", - "itoa", - "percent-encoding", - "pin-project-lite", - "ryu", - "sha1_smol", - "socket2 0.4.10", - "tokio", - "tokio-util", - "url", -] - [[package]] name = "redis" version = "0.24.0" @@ -5440,7 +5695,7 @@ dependencies = [ "async-trait", "bytes", "combine", - "futures", + "futures 0.3.31", "futures-util", "itoa", "percent-encoding", @@ -5458,22 +5713,20 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags 2.6.0", + "bitflags 1.3.2", ] [[package]] -name = "redox_users" -version = "0.4.6" +name = "redox_syscall" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" dependencies = [ - "getrandom 0.2.15", - "libredox", - "thiserror", + "bitflags 2.9.0", ] [[package]] @@ -5608,15 +5861,14 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "70ac5d832aa16abd7d1def883a8545280c20a60f523a370aa3a9617c2b8550ee" dependencies = [ "cc", "cfg-if", "getrandom 0.2.15", "libc", - "spin 0.9.8", "untrusted 0.9.0", "windows-sys 0.52.0", ] @@ -5647,7 +5899,7 @@ version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97eeab2f3c0a199bc4be135c36c924b6590b88c377d416494288c14f2db30199" dependencies = [ - "futures", + "futures 0.3.31", "futures-timer", "rstest_macros", "rustc_version", @@ -5666,7 +5918,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.91", + "syn 2.0.99", "unicode-ident", ] @@ -5677,7 +5929,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33648a781874466a62d89e265fee9f17e32bc7d05a256e6cca41bf97eadcd8aa" dependencies = [ "bytes", - "thiserror", + "thiserror 1.0.69", "webrtc-util", ] @@ -5690,7 +5942,7 @@ dependencies = [ "bytes", "rand 0.8.5", "serde", - "thiserror", + "thiserror 1.0.69", "webrtc-util", ] @@ -5703,7 +5955,7 @@ dependencies = [ "bytes", "rand 0.8.5", "serde", - "thiserror", + "thiserror 1.0.69", "webrtc-util", ] @@ -5734,14 +5986,14 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" dependencies = [ - "nom", + "nom 7.1.3", ] [[package]] name = "rustix" -version = "0.37.27" +version = "0.37.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" dependencies = [ "bitflags 1.3.2", "errno", @@ -5753,14 +6005,27 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.42" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "errno", "libc", - "linux-raw-sys 0.4.14", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dade4812df5c384711475be5fcd8c162555352945401aed22a35bffeab61f657" +dependencies = [ + "bitflags 2.9.0", + "errno", + "libc", + "linux-raw-sys 0.9.2", "windows-sys 0.59.0", ] @@ -5771,20 +6036,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", - "ring 0.17.8", + "ring 0.17.13", "rustls-webpki 0.101.7", "sct", ] [[package]] name = "rustls" -version = "0.23.20" +version = "0.23.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" +checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" dependencies = [ "log", "once_cell", - "ring 0.17.8", + "ring 0.17.13", "rustls-pki-types", "rustls-webpki 0.102.8", "subtle", @@ -5798,7 +6063,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a980454b497c439c274f2feae2523ed8138bbd3d323684e1435fec62f800481" dependencies = [ "log", - "rustls 0.23.20", + "rustls 0.23.23", "rustls-native-certs", "rustls-pki-types", "rustls-webpki 0.102.8", @@ -5837,9 +6102,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" [[package]] name = "rustls-webpki" @@ -5847,7 +6112,7 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.8", + "ring 0.17.13", "untrusted 0.9.0", ] @@ -5857,7 +6122,7 @@ version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ - "ring 0.17.8", + "ring 0.17.13", "rustls-pki-types", "untrusted 0.9.0", ] @@ -5874,15 +6139,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "safe_arch" @@ -5920,30 +6185,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "schemars" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" -dependencies = [ - "dyn-clone", - "schemars_derive", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn 2.0.91", -] - [[package]] name = "scopeguard" version = "1.2.0" @@ -5956,7 +6197,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" dependencies = [ - "pbkdf2", + "pbkdf2 0.12.2", "salsa20", "sha2", ] @@ -5967,7 +6208,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.8", + "ring 0.17.13", "untrusted 0.9.0", ] @@ -5979,7 +6220,7 @@ checksum = "13254db766b17451aced321e7397ebf0a446ef0c8d2942b6e67a95815421093f" dependencies = [ "rand 0.8.5", "substring", - "thiserror", + "thiserror 1.0.69", "url", ] @@ -5997,23 +6238,13 @@ dependencies = [ "zeroize", ] -[[package]] -name = "secrecy" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" -dependencies = [ - "serde", - "zeroize", -] - [[package]] name = "security-framework" version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "core-foundation", "core-foundation-sys", "libc", @@ -6022,9 +6253,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.13.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -6032,58 +6263,37 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" -version = "1.0.216" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" dependencies = [ "serde_derive", ] -[[package]] -name = "serde-value" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" -dependencies = [ - "ordered-float 2.10.1", - "serde", -] - [[package]] name = "serde_derive" -version = "1.0.216" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", -] - -[[package]] -name = "serde_derive_internals" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] name = "serde_json" -version = "1.0.134" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.7.1", "itoa", "memchr", "ryu", @@ -6092,9 +6302,9 @@ dependencies = [ [[package]] name = "serde_path_to_error" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" dependencies = [ "itoa", "serde", @@ -6108,7 +6318,7 @@ checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" dependencies = [ "percent-encoding", "serde", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -6132,41 +6342,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_with" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" -dependencies = [ - "serde", - "serde_with_macros", -] - -[[package]] -name = "serde_with_macros" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" -dependencies = [ - "darling 0.13.4", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap 2.7.0", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - [[package]] name = "sha1" version = "0.10.6" @@ -6204,6 +6379,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" + [[package]] name = "shlex" version = "1.3.0" @@ -6250,13 +6431,13 @@ checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] name = "simple_asn1" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" dependencies = [ "num-bigint", "num-traits", - "thiserror", + "thiserror 2.0.12", "time", ] @@ -6282,9 +6463,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" [[package]] name = "smol_str" @@ -6357,7 +6538,7 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" dependencies = [ - "nom", + "nom 7.1.3", "unicode_categories", ] @@ -6396,7 +6577,7 @@ dependencies = [ "futures-util", "hashlink", "hex", - "indexmap 2.7.0", + "indexmap 2.7.1", "log", "memchr", "native-tls", @@ -6410,7 +6591,7 @@ dependencies = [ "sha2", "smallvec", "sqlformat", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "tokio-stream", @@ -6467,7 +6648,7 @@ checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" dependencies = [ "atoi", "base64 0.21.7", - "bitflags 2.6.0", + "bitflags 2.9.0", "byteorder", "bytes", "chrono", @@ -6497,7 +6678,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 1.0.69", "time", "tracing", "uuid", @@ -6512,7 +6693,7 @@ checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" dependencies = [ "atoi", "base64 0.21.7", - "bitflags 2.6.0", + "bitflags 2.9.0", "byteorder", "chrono", "crc", @@ -6538,7 +6719,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 1.0.69", "time", "tracing", "uuid", @@ -6588,12 +6769,6 @@ dependencies = [ "unicode-properties", ] -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "strsim" version = "0.11.1" @@ -6616,7 +6791,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -6630,9 +6805,9 @@ dependencies = [ "lazy_static", "md-5", "rand 0.8.5", - "ring 0.17.8", + "ring 0.17.13", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "url", "webrtc-util", @@ -6666,9 +6841,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.91" +version = "2.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035" +checksum = "e02e925281e18ffd9d640e234264753c43edc62d64b2d4cf898f1bc5e75f3fc2" dependencies = [ "proc-macro2", "quote", @@ -6707,7 +6882,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -6764,14 +6939,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.14.0" +version = "3.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +checksum = "2c317e0a526ee6120d8dabad239c8dadca62b24b6f168914bbbc8e2fb1f0e567" dependencies = [ "cfg-if", "fastrand 2.3.0", + "getrandom 0.3.1", "once_cell", - "rustix 0.38.42", + "rustix 1.0.1", "windows-sys 0.59.0", ] @@ -6790,64 +6966,22 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" -[[package]] -name = "tesseract" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b419c2568ceb602121d4ea2495e4b214ac7f32d5009b74b1ce67765a89c4da54" -dependencies = [ - "tesseract-plumbing", - "tesseract-sys", - "thiserror", -] - -[[package]] -name = "tesseract-plumbing" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a25fbbb95169954a9262a565fbfb001c4d9dad271d48142e6632a3e2b7314b35" -dependencies = [ - "leptonica-plumbing", - "tesseract-sys", - "thiserror", -] - -[[package]] -name = "tesseract-sys" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd33f6f216124cfaf0fa86c2c0cdf04da39b6257bd78c5e44fa4fa98c3a5857b" -dependencies = [ - "bindgen", - "leptonica-sys", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "testcontainers" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e2b1567ca8a2b819ea7b28c92be35d9f76fb9edb214321dcc86eb96023d1f87" -dependencies = [ - "bollard-stubs", - "futures", - "hex", - "hmac", - "log", - "rand 0.8.5", - "serde", - "serde_json", - "sha2", -] - [[package]] name = "thiserror" version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", ] [[package]] @@ -6858,7 +6992,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.99", ] [[package]] @@ -6883,10 +7028,96 @@ dependencies = [ ] [[package]] -name = "time" -version = "0.3.37" +name = "tikv-client" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "26904b386ca52ce25b3a620b397e6e4e93c4fd06d13c2c5936d9ac597f897263" +dependencies = [ + "async-trait", + "derive-new", + "fail", + "futures 0.3.31", + "futures-timer", + "grpcio", + "lazy_static", + "log", + "prometheus 0.12.0", + "rand 0.8.5", + "regex", + "serde", + "serde_derive", + "thiserror 1.0.69", + "tikv-client-common", + "tikv-client-pd", + "tikv-client-proto", + "tikv-client-store", + "tokio", +] + +[[package]] +name = "tikv-client-common" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72fc3bb3fbec1f2a3354d4bbe48501b23ea47b79da2ffaedeadcc8a6183188e4" +dependencies = [ + "futures 0.3.31", + "grpcio", + "lazy_static", + "log", + "regex", + "thiserror 1.0.69", + "tikv-client-proto", +] + +[[package]] +name = "tikv-client-pd" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cadef1633d4e7952d9a3a88211f03f71e9f90769a5b50c40b5eccc06408977" +dependencies = [ + "async-trait", + "futures 0.3.31", + "grpcio", + "log", + "tikv-client-common", + "tikv-client-proto", +] + +[[package]] +name = "tikv-client-proto" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9707c63c11c19b87b6eb3df40c6103d0f1e2f06b53445bad91a8c9e06407d9b" +dependencies = [ + "futures 0.3.31", + "grpcio", + "lazy_static", + "prost 0.7.0", + "prost-derive 0.7.0", + "protobuf", + "protobuf-build", +] + +[[package]] +name = "tikv-client-store" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ab348b60ef0a384985c488e25bf35721956b3b45332945f0841f9ac8a693586" +dependencies = [ + "async-trait", + "derive-new", + "futures 0.3.31", + "grpcio", + "log", + "tikv-client-common", + "tikv-client-proto", +] + +[[package]] +name = "time" +version = "0.3.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dad298b01a40a23aac4580b67e3dbedb7cc8402f3592d7f49469de2ea4aecdd8" dependencies = [ "deranged", "itoa", @@ -6901,15 +7132,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "765c97a5b985b7c11d7bc27fa927dc4fe6af3a6dfb021d28deb60d3bf51e76ef" [[package]] name = "time-macros" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "e8093bc3e81c3bc5f7879de09619d06c9a5a5e45ca44dfeeb7225bae38005c5c" dependencies = [ "num-conv", "time-core", @@ -6937,9 +7168,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" dependencies = [ "tinyvec_macros", ] @@ -6952,15 +7183,15 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.42.0" +version = "1.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +checksum = "9975ea0f48b5aa3972bf2d888c238182458437cc2a19374b81b25cdf1023fb3a" dependencies = [ "backtrace", "bytes", "libc", "mio", - "parking_lot", + "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", "socket2 0.5.8", @@ -6980,13 +7211,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -7055,18 +7286,6 @@ dependencies = [ "tokio-stream", ] -[[package]] -name = "tokio-tungstenite" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite 0.18.0", -] - [[package]] name = "tokio-tungstenite" version = "0.20.1" @@ -7075,9 +7294,7 @@ checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" dependencies = [ "futures-util", "log", - "native-tls", "tokio", - "tokio-native-tls", "tungstenite 0.20.1", ] @@ -7089,7 +7306,9 @@ checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" dependencies = [ "futures-util", "log", + "native-tls", "tokio", + "tokio-native-tls", "tungstenite 0.24.0", ] @@ -7103,7 +7322,6 @@ dependencies = [ "futures-core", "futures-sink", "pin-project-lite", - "slab", "tokio", ] @@ -7134,7 +7352,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.7.0", + "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", @@ -7161,8 +7379,8 @@ dependencies = [ "hyper-timeout", "percent-encoding", "pin-project", - "prost", - "prost-derive", + "prost 0.11.9", + "prost-derive 0.11.9", "tokio", "tokio-stream", "tokio-util", @@ -7209,27 +7427,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "tower-http" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" -dependencies = [ - "base64 0.21.7", - "bitflags 2.6.0", - "bytes", - "futures-core", - "futures-util", - "http 0.2.12", - "http-body 0.4.6", - "http-range-header", - "mime", - "pin-project-lite", - "tower-layer", - "tower-service", - "tracing", -] - [[package]] name = "tower-http" version = "0.5.2" @@ -7237,13 +7434,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ "base64 0.21.7", - "bitflags 2.6.0", + "bitflags 2.9.0", "bytes", + "futures-util", "http 1.2.0", "http-body 1.0.1", "http-body-util", + "http-range-header", + "httpdate", "mime", + "mime_guess", + "percent-encoding", "pin-project-lite", + "tokio", + "tokio-util", "tower-layer", "tower-service", "tracing", @@ -7281,7 +7485,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -7345,25 +7549,6 @@ version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" -[[package]] -name = "tungstenite" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" -dependencies = [ - "base64 0.13.1", - "byteorder", - "bytes", - "http 0.2.12", - "httparse", - "log", - "rand 0.8.5", - "sha1", - "thiserror", - "url", - "utf-8", -] - [[package]] name = "tungstenite" version = "0.20.1" @@ -7376,10 +7561,9 @@ dependencies = [ "http 0.2.12", "httparse", "log", - "native-tls", "rand 0.8.5", "sha1", - "thiserror", + "thiserror 1.0.69", "url", "utf-8", ] @@ -7396,9 +7580,27 @@ dependencies = [ "http 1.2.0", "httparse", "log", + "native-tls", "rand 0.8.5", "sha1", - "thiserror", + "thiserror 1.0.69", + "utf-8", +] + +[[package]] +name = "tungstenite" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" +dependencies = [ + "bytes", + "data-encoding", + "http 1.2.0", + "httparse", + "log", + "rand 0.9.0", + "sha1", + "thiserror 2.0.12", "utf-8", ] @@ -7410,13 +7612,13 @@ checksum = "ffb2ac4f331064513ad510b7a36edc0df555bd61672986607f7c9ff46f98f415" dependencies = [ "async-trait", "base64 0.21.7", - "futures", + "futures 0.3.31", "log", "md-5", "rand 0.8.5", - "ring 0.17.8", + "ring 0.17.13", "stun", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-util", "webrtc-util", @@ -7424,9 +7626,15 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-bidi" @@ -7436,9 +7644,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-normalization" @@ -7483,12 +7691,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - [[package]] name = "untrusted" version = "0.7.1" @@ -7511,11 +7713,11 @@ dependencies = [ "flate2", "log", "once_cell", - "rustls 0.23.20", + "rustls 0.23.23", "rustls-pki-types", "socks", "url", - "webpki-roots 0.26.7", + "webpki-roots 0.26.8", ] [[package]] @@ -7556,11 +7758,11 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.11.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" +checksum = "e0f540e3240398cce6128b64ba83fdbdd86129c16a3aa1a3a252efd66eb3d587" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.3.1", "serde", ] @@ -7608,9 +7810,9 @@ dependencies = [ [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "value-bag" @@ -7638,9 +7840,9 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wait-timeout" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" dependencies = [ "libc", ] @@ -7691,6 +7893,15 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasite" version = "0.1.0" @@ -7699,34 +7910,35 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.49" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", @@ -7737,9 +7949,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7747,22 +7959,25 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-streams" @@ -7779,9 +7994,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -7814,9 +8029,9 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "webpki-roots" -version = "0.26.7" +version = "0.26.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ "rustls-pki-types", ] @@ -7848,7 +8063,7 @@ dependencies = [ "sha2", "smol_str", "stun", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "turn", @@ -7872,7 +8087,7 @@ checksum = "e8c08e648e10572b9edbe741074e0f4d3cb221aa7cdf9a814ee71606de312f33" dependencies = [ "bytes", "log", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-sctp", "webrtc-util", @@ -7907,7 +8122,7 @@ dependencies = [ "sha1", "sha2", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", "x25519-dalek", @@ -7928,7 +8143,7 @@ dependencies = [ "serde", "serde_json", "stun", - "thiserror", + "thiserror 1.0.69", "tokio", "turn", "url", @@ -7946,7 +8161,7 @@ checksum = "ce981f93104a8debb3563bb0cedfe4aa2f351fdf6b53f346ab50009424125c08" dependencies = [ "log", "socket2 0.5.8", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -7961,7 +8176,7 @@ dependencies = [ "bytes", "rand 0.8.5", "rtp 0.10.0", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7976,7 +8191,7 @@ dependencies = [ "crc", "log", "rand 0.8.5", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -7999,7 +8214,7 @@ dependencies = [ "rtp 0.9.0", "sha1", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -8019,7 +8234,7 @@ dependencies = [ "log", "nix 0.26.4", "rand 0.8.5", - "thiserror", + "thiserror 1.0.69", "tokio", "winapi", ] @@ -8039,18 +8254,18 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.42", + "rustix 0.38.44", ] [[package]] name = "which" -version = "6.0.3" +version = "7.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f" +checksum = "2774c861e1f072b3aadc02f8ba886c26ad6321567ecc294c935434cad06f1283" dependencies = [ "either", - "home", - "rustix 0.38.42", + "env_home", + "rustix 0.38.44", "winsafe", ] @@ -8060,15 +8275,15 @@ version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" dependencies = [ - "redox_syscall", + "redox_syscall 0.5.10", "wasite", ] [[package]] name = "wide" -version = "0.7.30" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58e6db2670d2be78525979e9a5f9c69d296fd7d670549fe9ebf70f8708cb5019" +checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22" dependencies = [ "bytemuck", "safe_arch", @@ -8114,6 +8329,12 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-link" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" + [[package]] name = "windows-sys" version = "0.48.0" @@ -8293,12 +8514,12 @@ dependencies = [ [[package]] name = "winreg" -version = "0.52.0" +version = "0.55.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" dependencies = [ "cfg-if", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -8317,7 +8538,7 @@ dependencies = [ "async-trait", "base64 0.21.7", "deadpool", - "futures", + "futures 0.3.31", "futures-timer", "http-types", "hyper 0.14.32", @@ -8329,6 +8550,15 @@ dependencies = [ "tokio", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.9.0", +] + [[package]] name = "write16" version = "1.0.0" @@ -8374,28 +8604,28 @@ dependencies = [ "data-encoding", "der-parser 8.2.0", "lazy_static", - "nom", + "nom 7.1.3", "oid-registry 0.6.1", "ring 0.16.20", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] [[package]] name = "x509-parser" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" +checksum = "4569f339c0c402346d4a75a9e39cf8dad310e287eef1ff56d4c68e5067f53460" dependencies = [ - "asn1-rs 0.6.2", + "asn1-rs 0.7.0", "data-encoding", - "der-parser 9.0.0", + "der-parser 10.0.0", "lazy_static", - "nom", - "oid-registry 0.7.1", + "nom 7.1.3", + "oid-registry 0.8.1", "rusticata-macros", - "thiserror", + "thiserror 2.0.12", "time", ] @@ -8443,7 +8673,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", "synstructure 0.13.1", ] @@ -8454,7 +8684,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6" +dependencies = [ + "zerocopy-derive 0.8.23", ] [[package]] @@ -8465,27 +8704,38 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.99", ] [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", "synstructure 0.13.1", ] @@ -8506,7 +8756,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", ] [[package]] @@ -8528,7 +8778,56 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.91", + "syn 2.0.99", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes", + "byteorder", + "bzip2", + "constant_time_eq", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac", + "pbkdf2 0.11.0", + "sha1", + "time", + "zstd", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.14+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb060d4926e4ac3a3ad15d864e99ceb5f343c6b34f5bd6d81ae6ed417311be5" +dependencies = [ + "cc", + "pkg-config", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 3e5f066..56a3ee5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,39 +1,42 @@ [workspace] -resolver="2" +resolver = "2" members = [ - "gb-core", # Core domain models and traits - "gb-api", # API layer and server implementation - "gb-media", # Media processing and WebRTC handling - - "gb-messaging", # Message queue and real-time communication - "gb-storage", # Database and storage implementations - "gb-monitoring", # Metrics, logging and monitoring - "gb-auth", # Authentication and authorization - "gb-testing", # Integration and load testing - "gb-migrations", # Database migrations - #"gb-cloud", # Cloud provider integrations - #"gb-vm", # Virtual machine and BASIC compiler - "gb-automation", # Web and process automation - "gb-image", # Image processing capabilities + "gb-core", + "gb-server", + "gb-media", + "gb-messaging", + "gb-storage", + "gb-monitoring", + "gb-auth", + "gb-testing", + "gb-migrations", + "gb-cloud", + "gb-vm", + "gb-automation", + "gb-image", + "gb-utils", + "gb-document", + "gb-file", + "gb-llm", + "gb-calendar", ] -# [workspace.lints.rust] -# unused_imports = "allow" -# dead_code = "allow" -# unused_variables = "allow" -# dependency_on_unit_never_type_fallback = "allow" - [workspace.package] version = "0.1.0" edition = "2021" -authors = ["GeneralBots Team"] +authors = ["General Bots Maintainers"] license = "MIT" [workspace.dependencies] # Core async runtime and utilities tokio = { version = "1.34", features = ["full"] } -futures = "0.3" +tokio-tungstenite = { version = "0.24.0", features = ["native-tls"] } +tungstenite = "0.20" +tokio-test = "0.4" +tokio-stream = "0.1.17" async-trait = "0.1" +futures = "0.3" +futures-util = "0.3" # Add futures-util here parking_lot = "0.12" # Web framework and servers @@ -41,6 +44,7 @@ axum = { version = "0.7.9", features = ["ws", "multipart"] } tower = "0.4" tower-http = { version = "0.5", features = ["cors", "trace", "fs"] } hyper = { version = "1.1", features = ["full"] } +hyper-util = { version = "0.1" } tonic = { version = "0.10", features = ["tls", "transport"] } # Database and storage @@ -108,7 +112,7 @@ wasm-bindgen = "0.2" js-sys = "0.3" web-sys = { version = "0.3", features = ["WebSocket", "WebRtcPeerConnection"] } -# Natural language processing +# Natural language processing rust-bert = "0.21" tokenizers = "0.15" whatlang = "0.16" @@ -119,4 +123,4 @@ docx = "1.1" zip = "0.6" [workspace.metadata] -msrv = "1.70.0" +msrv = "1.70.0" \ No newline at end of file diff --git a/README.md b/README.md index 3a92ffa..00bec88 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ GB6 is a billion-scale real-time communication platform integrating advanced bot - Petabyte-scale storage ### Core Services -- **API Service** (gb-api) +- **API Service** (gb-server) - Axum-based REST & WebSocket - Multi-tenant request routing - Authentication & Authorization @@ -61,11 +61,6 @@ GB6 is a billion-scale real-time communication platform integrating advanced bot - Kafka 3.0+ - GStreamer -### Kubernetes Setup -```bash -# Initialize cluster -./setup-k8s.sh - # Deploy platform ./deploy.sh ``` @@ -79,7 +74,7 @@ cargo build --workspace cargo test --workspace # Start API service -cargo run -p gb-api +cargo run -p gb-server ``` ## 📊 Monitoring & Operations @@ -115,13 +110,12 @@ cargo run -p gb-api ### Project Structure ``` general-bots/ -├── gb-api/ # API service +├── gb-server/ # API service ├── gb-core/ # Core functionality ├── gb-media/ # Media processing ├── gb-messaging/ # Message brokers ├── gb-storage/ # Data storage ├── gb-utils/ # Utilities -├── k8s/ # Kubernetes configs └── migrations/ # DB migrations ``` @@ -283,5 +277,218 @@ Licensed under terms specified in workspace configuration. 14. **Kubernetes (Go)**: Container orchestration for scalable deployments. 15. **Matrix (Rust)**: Real-time communication and collaboration. +# API: + +## **File & Document Management** +/files/upload +/files/download +/files/copy +/files/move +/files/delete +/files/getContents +/files/save +/files/createFolder +/files/shareFolder +/files/dirFolder +/files/list +/files/search +/files/recent +/files/favorite +/files/versions +/files/restore +/files/permissions +/files/quota +/files/shared +/files/sync/status +/files/sync/start +/files/sync/stop + +--- + +### **Document Processing** +/docs/merge +/docs/convert +/docs/fill +/docs/export +/docs/import + +--- + +### **Groups & Organizations** +/groups/create +/groups/update +/groups/delete +/groups/list +/groups/search +/groups/members +/groups/members/add +/groups/members/remove +/groups/permissions +/groups/settings +/groups/analytics +/groups/join/request +/groups/join/approve +/groups/join/reject +/groups/invites/send +/groups/invites/list + +--- + +### **Conversations & Real-time Communication** +/conversations/create +/conversations/join +/conversations/leave +/conversations/members +/conversations/messages +/conversations/messages/send +/conversations/messages/edit +/conversations/messages/delete +/conversations/messages/react +/conversations/messages/pin +/conversations/messages/search +/conversations/calls/start +/conversations/calls/join +/conversations/calls/leave +/conversations/calls/mute +/conversations/calls/unmute +/conversations/screen/share +/conversations/screen/stop +/conversations/recording/start +/conversations/recording/stop +/conversations/whiteboard/create +/conversations/whiteboard/collaborate + +--- + +### **Communication Services** +/comm/email/send +/comm/email/template +/comm/email/schedule +/comm/email/cancel +/comm/sms/send +/comm/sms/bulk +/comm/notifications/send +/comm/notifications/preferences +/comm/broadcast/send +/comm/contacts/import +/comm/contacts/export +/comm/contacts/sync +/comm/contacts/groups + +--- + +### **User Management & Authentication** +/users/create +/users/update +/users/delete +/users/list +/users/search +/users/profile +/users/profile/update +/users/settings +/users/permissions +/users/roles +/users/status +/users/presence +/users/activity +/users/security/2fa/enable +/users/security/2fa/disable +/users/security/devices +/users/security/sessions +/users/notifications/settings + +--- + +### **Calendar & Task Management** +/calendar/events/create +/calendar/events/update +/calendar/events/delete +/calendar/events/list +/calendar/events/search +/calendar/availability/check +/calendar/schedule/meeting +/calendar/reminders/set +/tasks/create +/tasks/update +/tasks/delete +/tasks/list +/tasks/assign +/tasks/status/update +/tasks/priority/set +/tasks/dependencies/set + +--- + +### **Storage & Data Management** +/storage/save +/storage/batch +/storage/json +/storage/delete +/storage/quota/check +/storage/cleanup +/storage/backup/create +/storage/backup/restore +/storage/archive +/storage/metrics + +--- + +### **Analytics & Reporting** +/analytics/dashboard +/analytics/reports/generate +/analytics/reports/schedule +/analytics/metrics/collect +/analytics/insights/generate +/analytics/trends/analyze +/analytics/export + +--- + +### **System & Administration** +/admin/system/status +/admin/system/metrics +/admin/logs/view +/admin/logs/export +/admin/config/update +/admin/maintenance/schedule +/admin/backup/create +/admin/backup/restore +/admin/users/manage +/admin/roles/manage +/admin/quotas/manage +/admin/licenses/manage + +--- + +### **AI & Machine Learning** +/ai/analyze/text +/ai/analyze/image +/ai/generate/text +/ai/generate/image +/ai/translate +/ai/summarize +/ai/recommend +/ai/train/model +/ai/predict + +--- + +### **Security & Compliance** +/security/audit/logs +/security/compliance/check +/security/threats/scan +/security/access/review +/security/encryption/manage +/security/certificates/manage + +--- + +### **Health & Monitoring** +/health +/health/detailed +/monitoring/status +/monitoring/alerts +/monitoring/metrics + Built with ❤️ from Brazil, using Rust for maximum performance and reliability. diff --git a/deploy.sh b/deploy.sh index 03ff736..558f070 100755 --- a/deploy.sh +++ b/deploy.sh @@ -3,29 +3,10 @@ set -e echo "Deploying General Bots platform..." -# Create namespace -kubectl apply -f k8s/base/namespace.yaml - -# Deploy infrastructure components -kubectl apply -f k8s/base/postgres.yaml -kubectl apply -f k8s/base/redis.yaml -kubectl apply -f k8s/base/kafka.yaml -kubectl apply -f k8s/base/monitoring.yaml - -# Deploy application components -kubectl apply -f k8s/base/api.yaml -kubectl apply -f k8s/base/webrtc.yaml -kubectl apply -f k8s/base/image.yaml -kubectl apply -f k8s/base/document.yaml - -# Deploy ingress rules -kubectl apply -f k8s/base/ingress.yaml - # Create DB. -#cargo run -p gb-migrations --bin migrations +cargo run -p gb-migrations --bin migrations echo "Deployment completed successfully!" echo "Please wait for all pods to be ready..." -kubectl -n general-bots get pods -w diff --git a/gb-api/Cargo.toml b/gb-api/Cargo.toml deleted file mode 100644 index 5255cd5..0000000 --- a/gb-api/Cargo.toml +++ /dev/null @@ -1,33 +0,0 @@ -[package] -name = "gb-api" -version = { workspace = true } -edition = { workspace = true } -authors = { workspace = true } -license = { workspace = true } - -[dependencies] -gb-core = { path = "../gb-core" } -gb-messaging = { path = "../gb-messaging" } -gb-monitoring = { path = "../gb-monitoring" } -gb-file = {path = "../gb-file" } -tokio = { version = "1.0", features = ["full", "macros", "rt-multi-thread"] } # Add these features -axum = { version = "0.7.9", features = ["ws", "multipart", "macros"] } -serde= { workspace = true } -serde_json= { workspace = true } -uuid= { workspace = true } -tracing= { workspace = true } -tracing-subscriber = { version = "0.3", features = ["env-filter"] } -async-trait= { workspace = true } -futures-util = { version = "0.3", features = ["sink"] } -chrono = { workspace = true, features = ["serde"] } -tokio-stream = "0.1.17" -sqlx = { version = "0.7", features = ["runtime-tokio-rustls", "postgres", "chrono", "uuid"] } -redis = { version = "0.23", features = ["tokio-comp"] } -hyper = { version = "1.0", features = ["server"] } -hyper-util = { version = "0.1" } -tower = { workspace = true } -tower-http = { version = "0.5", features = ["cors", "trace"] } - -[dev-dependencies] -rstest= { workspace = true } -tokio-test = "0.4" diff --git a/gb-api/src/main.rs b/gb-api/src/main.rs deleted file mode 100644 index 2843857..0000000 --- a/gb-api/src/main.rs +++ /dev/null @@ -1,97 +0,0 @@ -use gb_core::{Error, Result}; -use tracing::{info, error}; -use std::net::SocketAddr; -use gb_messaging::MessageProcessor; - - -#[allow(dead_code)] -#[derive(Clone)] -struct AppState { - db: sqlx::PgPool, - redis: redis::Client, - message_processor: MessageProcessor, - customer: PostgresCustomerRepository, - -} - -#[tokio::main] -async fn main() -> Result<()> { - // Initialize logging first - init_logging()?; - - // Initialize core components - let app = initialize_bot_server().await?; - - // Start the server - start_server(app).await -} - -async fn initialize_bot_server() -> Result { - info!("Initializing General Bots server..."); - - // Initialize the MessageProcessor - let message_processor = MessageProcessor::new(); - let state = AppState::new(); - state.repo = PostgresCustomerRepository::new(Arc::new(pool)); - - - // Build the Axum router using our router module - let app = gb_api::create_router(state) - .layer(tower_http::trace::TraceLayer::new_for_http()); - - Ok(app) -} - -fn init_logging() -> Result<()> { - use tracing_subscriber::EnvFilter; - - let env_filter = EnvFilter::try_from_default_env() - .unwrap_or_else(|_| EnvFilter::new("info")); - - tracing_subscriber::fmt() - .with_env_filter(env_filter) - .with_file(true) - .with_line_number(true) - .with_thread_ids(true) - .init(); - - Ok(()) -} - -async fn initialize_database() -> Result { - let database_url = std::env::var("DATABASE_URL") - .map_err(|_| Error::internal("DATABASE_URL not set".to_string()))?; - - sqlx::PgPool::connect(&database_url) - .await - .map_err(|e| Error::internal(e.to_string())) -} - -async fn initialize_redis() -> Result { - let redis_url = std::env::var("REDIS_URL") - .map_err(|_| Error::internal("REDIS_URL not set".to_string()))?; - - redis::Client::open(redis_url) - .map_err(|e| Error::internal(e.to_string())) -} - - - -async fn start_server(app: axum::Router) -> Result<()> { - let addr = SocketAddr::from(([0, 0, 0, 0], 3001)); - info!("Starting server on {}", addr); - - match tokio::net::TcpListener::bind(addr).await { - Ok(listener) => { - info!("Listening on {}", addr); - axum::serve(listener, app) - .await - .map_err(|e| Error::internal(format!("Server error: {}", e))) - } - Err(e) => { - error!("Failed to bind to address: {}", e); - Err(Error::internal(format!("Failed to bind to address: {}", e))) - } - - } -} \ No newline at end of file diff --git a/gb-auth/migrations/20231201000000_create_auth_tables.sql b/gb-auth/migrations/20231201000000_create_auth_tables.sql deleted file mode 100644 index efa5c31..0000000 --- a/gb-auth/migrations/20231201000000_create_auth_tables.sql +++ /dev/null @@ -1,25 +0,0 @@ --- Create users table -CREATE TABLE IF NOT EXISTS users ( - id UUID PRIMARY KEY DEFAULT gen_random_uuid(), - email VARCHAR(255) NOT NULL UNIQUE, - name VARCHAR(255), - password_hash VARCHAR(255) NOT NULL, - role VARCHAR(50) NOT NULL DEFAULT 'user', - status VARCHAR(50) NOT NULL DEFAULT 'active', - created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP -); - --- Create sessions table -CREATE TABLE IF NOT EXISTS sessions ( - id UUID PRIMARY KEY DEFAULT gen_random_uuid(), - user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, - refresh_token VARCHAR(255) NOT NULL UNIQUE, - expires_at TIMESTAMP WITH TIME ZONE NOT NULL, - created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP -); - --- Create indexes -CREATE INDEX IF NOT EXISTS idx_users_email ON users(email); -CREATE INDEX IF NOT EXISTS idx_sessions_user_id ON sessions(user_id); -CREATE INDEX IF NOT EXISTS idx_sessions_refresh_token ON sessions(refresh_token); diff --git a/gb-auth/src/handlers/auth_handler.rs b/gb-auth/src/handlers/auth_handler.rs index f435c44..b3a8fdd 100644 --- a/gb-auth/src/handlers/auth_handler.rs +++ b/gb-auth/src/handlers/auth_handler.rs @@ -1,13 +1,3 @@ use axum::{Json, Extension}; -use crate::services::AuthService; -use crate::AuthError; use crate::models::{LoginRequest, LoginResponse}; use std::sync::Arc; - -pub async fn login_handler( - Extension(auth_service): Extension>, - Json(request): Json, -) -> Result, AuthError> { - let response = auth_service.login(request).await?; - Ok(Json(response)) -} \ No newline at end of file diff --git a/gb-auth/src/lib.rs b/gb-auth/src/lib.rs index 5845142..77eb06f 100644 --- a/gb-auth/src/lib.rs +++ b/gb-auth/src/lib.rs @@ -5,7 +5,3 @@ pub mod services; // Make services module public pub mod middleware; pub use error::AuthError; -pub use handlers::*; -pub use models::*; -pub use services::AuthService; -pub use middleware::*; diff --git a/gb-auth/src/services/auth_service.rs b/gb-auth/src/services/auth_service.rs index 49f340d..e69de29 100644 --- a/gb-auth/src/services/auth_service.rs +++ b/gb-auth/src/services/auth_service.rs @@ -1,118 +0,0 @@ -use gb_core::{Result, Error}; -use crate::models::{LoginRequest, LoginResponse}; -use crate::models::user::{DbUser, UserRole, UserStatus}; -use std::sync::Arc; -use sqlx::PgPool; -use argon2::{ - password_hash::{PasswordHash, PasswordHasher, SaltString, PasswordVerifier}, - Argon2, -}; -use rand::rngs::OsRng; -use chrono::{DateTime, Utc, Duration}; // Add chrono imports -use jsonwebtoken::{encode, EncodingKey, Header}; -use serde::{Serialize, Deserialize}; - -pub struct AuthService { - db: Arc, - jwt_secret: String, - jwt_expiration: i64 -} - -impl AuthService { - pub fn new(db: Arc, jwt_secret: String, jwt_expiration: i64) -> Self { - Self { - db, - jwt_secret, - jwt_expiration, - } - } - - pub async fn login(&self, request: LoginRequest) -> Result { - let user = sqlx::query_as!( - DbUser, - r#" - SELECT - id, - email, - password_hash, - role as "role!: String", - status as "status!: String", - created_at as "created_at!: DateTime", - updated_at as "updated_at!: DateTime" - FROM users - WHERE email = $1 - "#, - request.email - ) - .fetch_optional(&*self.db) - .await - .map_err(|e| Error::internal(e.to_string()))? - .ok_or_else(|| Error::internal("Invalid credentials"))?; - - // Convert the string fields to their respective enum types - let user = DbUser { - id: user.id, - email: user.email, - password_hash: user.password_hash, - role: UserRole::from(user.role), - status: UserStatus::from(user.status), - created_at: user.created_at, - updated_at: user.updated_at, - }; - - self.verify_password(&request.password, &user.password_hash)?; - - let token = self.generate_token(&user)?; - - Ok(LoginResponse { - access_token: token, - refresh_token: uuid::Uuid::new_v4().to_string(), - token_type: "Bearer".to_string(), - expires_in: self.jwt_expiration, - }) - } - - pub fn hash_password(&self, password: &str) -> Result { - let salt = SaltString::generate(&mut OsRng); - let argon2 = Argon2::default(); - - argon2 - .hash_password(password.as_bytes(), &salt) - .map(|hash| hash.to_string()) - .map_err(|e| Error::internal(e.to_string())) - } - - fn verify_password(&self, password: &str, hash: &str) -> Result<()> { - let parsed_hash = PasswordHash::new(hash) - .map_err(|e| Error::internal(e.to_string()))?; - - Argon2::default() - .verify_password(password.as_bytes(), &parsed_hash) - .map_err(|_| Error::internal("Invalid credentials")) - } - - fn generate_token(&self, user: &DbUser) -> Result { - #[derive(Debug, Serialize, Deserialize)] - struct Claims { - sub: String, - exp: i64, - iat: i64, - } - - let now = Utc::now(); - let exp = now + Duration::seconds(self.jwt_expiration); - - let claims = Claims { - sub: user.id.to_string(), - exp: exp.timestamp(), - iat: now.timestamp(), - }; - - encode( - &Header::default(), - &claims, - &EncodingKey::from_secret(self.jwt_secret.as_bytes()), - ) - .map_err(|e| Error::internal(e.to_string())) - } -} \ No newline at end of file diff --git a/gb-auth/src/services/mod.rs b/gb-auth/src/services/mod.rs index ae31fe4..e69de29 100644 --- a/gb-auth/src/services/mod.rs +++ b/gb-auth/src/services/mod.rs @@ -1,3 +0,0 @@ -pub mod auth_service; - -pub use auth_service::*; \ No newline at end of file diff --git a/gb-calendar/Cargo.toml b/gb-calendar/Cargo.toml index 24c759b..0a66474 100644 --- a/gb-calendar/Cargo.toml +++ b/gb-calendar/Cargo.toml @@ -7,14 +7,3 @@ license = { workspace = true } [dependencies] gb-core = { path = "../gb-core" } -async-trait= { workspace = true } -tokio= { workspace = true } -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0"thiserror= { workspace = true } -tracing= { workspace = true } -minio-rs = "0.1" - -[dev-dependencies] -rstest= { workspace = true } -tokio-test = "0.4" -tempfile = "3.8" diff --git a/gb-calendar/src/lib.rs b/gb-calendar/src/lib.rs index 648ce3a..e69de29 100644 --- a/gb-calendar/src/lib.rs +++ b/gb-calendar/src/lib.rs @@ -1,113 +0,0 @@ -use minio_rs::minio::client::Client; -use minio_rs::minio::s3::args::{BucketExistsArgs, MakeBucketArgs, RemoveObjectArgs, GetObjectArgs, PutObjectArgs, ListObjectsArgs}; -use minio_rs::minio::s3::response::Object; -use minio_rs::minio::s3::error::Error as MinioError; -use std::path::Path; -use std::io::Cursor; - -/// Represents a file manager for handling MinIO file operations. -pub struct FileManager { - client: Client, - bucket_name: String, -} - -impl FileManager { - /// Creates a new `FileManager` instance. - pub async fn new(endpoint: &str, access_key: &str, secret_key: &str, bucket_name: &str, use_ssl: bool) -> Result { - let client = Client::new(endpoint, access_key, secret_key, use_ssl).await?; - Ok(Self { - client, - bucket_name: bucket_name.to_string(), - }) - } - - /// Checks if the bucket exists, and creates it if it doesn't. - pub async fn ensure_bucket_exists(&self) -> Result<(), MinioError> { - let exists = self.client - .bucket_exists(&BucketExistsArgs::new(&self.bucket_name)) - .await?; - if !exists { - self.client - .make_bucket(&MakeBucketArgs::new(&self.bucket_name)) - .await?; - } - Ok(()) - } - - /// Uploads a file to the specified path. - pub async fn upload_file(&self, path: &str, file_data: Vec) -> Result<(), MinioError> { - let args = PutObjectArgs::new(&self.bucket_name, path, Cursor::new(file_data), file_data.len() as u64); - self.client.put_object(&args).await?; - Ok(()) - } - - /// Downloads a file from the specified path. - pub async fn download_file(&self, path: &str) -> Result, MinioError> { - let args = GetObjectArgs::new(&self.bucket_name, path); - let object = self.client.get_object(&args).await?; - let data = object.bytes().await?; - Ok(data.to_vec()) - } - - /// Copies a file from the source path to the destination path. - pub async fn copy_file(&self, source_path: &str, destination_path: &str) -> Result<(), MinioError> { - let source_args = GetObjectArgs::new(&self.bucket_name, source_path); - let object = self.client.get_object(&source_args).await?; - let data = object.bytes().await?; - - let destination_args = PutObjectArgs::new(&self.bucket_name, destination_path, Cursor::new(data.clone()), data.len() as u64); - self.client.put_object(&destination_args).await?; - Ok(()) - } - - /// Moves a file from the source path to the destination path. - pub async fn move_file(&self, source_path: &str, destination_path: &str) -> Result<(), MinioError> { - self.copy_file(source_path, destination_path).await?; - self.delete_file(source_path).await?; - Ok(()) - } - - /// Deletes a file at the specified path. - pub async fn delete_file(&self, path: &str) -> Result<(), MinioError> { - let args = RemoveObjectArgs::new(&self.bucket_name, path); - self.client.remove_object(&args).await?; - Ok(()) - } - - /// Lists all files in the specified path. - pub async fn list_files(&self, prefix: &str) -> Result, MinioError> { - let args = ListObjectsArgs::new(&self.bucket_name).with_prefix(prefix); - let objects = self.client.list_objects(&args).await?; - let file_names = objects.into_iter().map(|obj| obj.name().to_string()).collect(); - Ok(file_names) - } - - /// Retrieves the contents of a file at the specified path. - pub async fn get_file_contents(&self, path: &str) -> Result { - let data = self.download_file(path).await?; - let contents = String::from_utf8(data).map_err(|_| MinioError::InvalidResponse)?; - Ok(contents) - } - - /// Creates a folder at the specified path. - pub async fn create_folder(&self, path: &str) -> Result<(), MinioError> { - let folder_path = if path.ends_with('/') { - path.to_string() - } else { - format!("{}/", path) - }; - self.upload_file(&folder_path, vec![]).await - } - - /// Shares a folder at the specified path (placeholder implementation). - pub async fn share_folder(&self, path: &str) -> Result { - Ok(format!("Folder shared: {}", path)) - } - - /// Searches for files matching the query in the specified path. - pub async fn search_files(&self, prefix: &str, query: &str) -> Result, MinioError> { - let files = self.list_files(prefix).await?; - let results = files.into_iter().filter(|f| f.contains(query)).collect(); - Ok(results) - } -} \ No newline at end of file diff --git a/gb-cloud/Cargo.toml b/gb-cloud/Cargo.toml new file mode 100644 index 0000000..9b82c92 --- /dev/null +++ b/gb-cloud/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "gb-cloud" +version = { workspace = true } +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } + +[dependencies] +gb-core = { path = "../gb-core" } +async-trait= { workspace = true } +tokio= { workspace = true } +serde = { version = "1.0", features = ["derive"] } +thiserror= { workspace = true } +tracing= { workspace = true } + +[dev-dependencies] +rstest= { workspace = true } +tokio-test = "0.4" +tempfile = "3.8" diff --git a/lib.rs b/gb-cloud/src/lib.rs similarity index 100% rename from lib.rs rename to gb-cloud/src/lib.rs diff --git a/gb-core/Cargo.toml b/gb-core/Cargo.toml index dd754bd..5e3619f 100644 --- a/gb-core/Cargo.toml +++ b/gb-core/Cargo.toml @@ -6,20 +6,21 @@ authors = { workspace = true } license = { workspace = true } [dependencies] -tokio-tungstenite = "0.18" +tokio-tungstenite = { workspace = true } async-trait= { workspace = true } serde= { workspace = true } uuid= { workspace = true } tokio= { workspace = true } thiserror= { workspace = true } chrono= { workspace = true } -sqlx= { workspace = true } -redis= { workspace = true } tracing= { workspace = true } axum = { version = "0.7", features = ["json"] } serde_json = "1.0" +sqlx = { workspace = true } +redis = { workspace = true } + [dev-dependencies] mockall= { workspace = true } rstest= { workspace = true } -tokio-test = "0.4" +tokio-test = { workspace = true } \ No newline at end of file diff --git a/gb-core/src/lib.rs b/gb-core/src/lib.rs index 9da913a..ecae2c5 100644 --- a/gb-core/src/lib.rs +++ b/gb-core/src/lib.rs @@ -3,6 +3,18 @@ pub mod models; pub mod traits; pub use errors::{Error, ErrorKind, Result}; + + +#[derive(Clone)] +struct AppState { + db: PgPool, + redis: RedisClient, + storage: MinioClient, + message_processor: MessageProcessor, + customer: PostgresCustomerRepository, +} + + #[cfg(test)] mod tests { use crate::models::{Customer, SubscriptionTier}; diff --git a/gb-core/src/models.rs b/gb-core/src/models.rs index 7739c86..ec4fc1d 100644 --- a/gb-core/src/models.rs +++ b/gb-core/src/models.rs @@ -1,6 +1,12 @@ -//! Core domain models for the general-bots system -//! File: gb-core/src/models.rs - +use chrono::{DateTime, Utc}; +use minio_rs::client::Client as MinioClient; +use rdkafka::producer::FutureProducer; +use redis::aio::ConnectionManager as RedisConnectionManager; +use serde::{Deserialize, Serialize}; +use sqlx::PgPool; +use uuid::Uuid; +use zitadel::api::v1::auth::AuthServiceClient; +use crate::config::AppConfig; use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use serde_json::Value as JsonValue; @@ -233,3 +239,183 @@ pub struct FileInfo { pub url: String, pub created_at: DateTime, } + + +// App state shared across all handlers +pub struct AppState { + pub config: AppConfig, + pub db_pool: PgPool, + pub redis_pool: RedisConnectionManager, + pub kafka_producer: FutureProducer, + pub zitadel_client: AuthServiceClient, + pub minio_client: MinioClient, +} + +// User models +#[derive(Debug, Serialize, Deserialize)] +pub struct User { + pub id: Uuid, + pub external_id: String, // Zitadel user ID + pub username: String, + pub email: String, + pub created_at: DateTime, + pub updated_at: DateTime, +} + +// File models +#[derive(Debug, Serialize, Deserialize)] +pub struct File { + pub id: Uuid, + pub user_id: Uuid, + pub folder_id: Option, + pub name: String, + pub path: String, + pub mime_type: String, + pub size: i64, + pub created_at: DateTime, + pub updated_at: DateTime, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Folder { + pub id: Uuid, + pub user_id: Uuid, + pub parent_id: Option, + pub name: String, + pub path: String, + pub created_at: DateTime, + pub updated_at: DateTime, +} + +// Conversation models +#[derive(Debug, Serialize, Deserialize)] +pub struct Conversation { + pub id: Uuid, + pub name: String, + pub created_by: Uuid, + pub created_at: DateTime, + pub updated_at: DateTime, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct ConversationMember { + pub conversation_id: Uuid, + pub user_id: Uuid, + pub joined_at: DateTime, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Message { + pub id: Uuid, + pub conversation_id: Uuid, + pub user_id: Uuid, + pub content: String, + pub created_at: DateTime, +} + +// Calendar models +#[derive(Debug, Serialize, Deserialize)] +pub struct CalendarEvent { + pub id: Uuid, + pub title: String, + pub description: Option, + pub location: Option, + pub start_time: DateTime, + pub end_time: DateTime, + pub user_id: Uuid, + pub created_at: DateTime, + pub updated_at: DateTime, +} + +// Task models +#[derive(Debug, Serialize, Deserialize)] +pub struct Task { + pub id: Uuid, + pub title: String, + pub description: Option, + pub due_date: Option>, + pub status: TaskStatus, + pub priority: TaskPriority, + pub user_id: Uuid, + pub created_at: DateTime, + pub updated_at: DateTime, +} + +#[derive(Debug, Serialize, Deserialize)] +pub enum TaskStatus { + Pending, + InProgress, + Completed, + Cancelled, +} + +#[derive(Debug, Serialize, Deserialize)] +pub enum TaskPriority { + Low, + Medium, + High, + Urgent, +} + +// Response models +#[derive(Debug, Serialize)] +pub struct ApiResponse { + pub success: bool, + pub message: Option, + pub data: Option, +} + +// Error models +#[derive(Debug, thiserror::Error)] +pub enum AppError { + #[error("Database error: {0}")] + Database(#[from] sqlx::Error), + + #[error("Redis error: {0}")] + Redis(#[from] redis::RedisError), + + #[error("Kafka error: {0}")] + Kafka(String), + + #[error("Zitadel error: {0}")] + Zitadel(#[from] tonic::Status), + + #[error("Minio error: {0}")] + Minio(String), + + #[error("Validation error: {0}")] + Validation(String), + + #[error("Not found: {0}")] + NotFound(String), + + #[error("Unauthorized: {0}")] + Unauthorized(String), + + #[error("Forbidden: {0}")] + Forbidden(String), + + #[error("Internal server error: {0}")] + Internal(String), +} + +impl actix_web::ResponseError for AppError { + fn error_response(&self) -> actix_web::HttpResponse { + let (status, error_message) = match self { + AppError::Validation(_) => (actix_web::http::StatusCode::BAD_REQUEST, self.to_string()), + AppError::NotFound(_) => (actix_web::http::StatusCode::NOT_FOUND, self.to_string()), + AppError::Unauthorized(_) => (actix_web::http::StatusCode::UNAUTHORIZED, self.to_string()), + AppError::Forbidden(_) => (actix_web::http::StatusCode::FORBIDDEN, self.to_string()), + _ => ( + actix_web::http::StatusCode::INTERNAL_SERVER_ERROR, + "Internal server error".to_string(), + ), + }; + + actix_web::HttpResponse::build(status).json(ApiResponse::<()> { + success: false, + message: Some(error_message), + data: None, + }) + } +} diff --git a/processor.rs b/gb-document/src/lib.rs similarity index 100% rename from processor.rs rename to gb-document/src/lib.rs diff --git a/gb-file/src/db.rs b/gb-file/src/db.rs new file mode 100644 index 0000000..04376f5 --- /dev/null +++ b/gb-file/src/db.rs @@ -0,0 +1,65 @@ +use anyhow::Result; +use minio_rs::client::{Client as MinioClient, ClientBuilder as MinioClientBuilder}; +use rdkafka::ClientConfig; +use rdkafka::producer::FutureProducer; +use redis::aio::ConnectionManager as RedisConnectionManager; +use sqlx::postgres::{PgPoolOptions, PgPool}; +use zitadel::api::v1::auth::AuthServiceClient; + +use crate::config::AppConfig; + +pub async fn init_postgres(config: &AppConfig) -> Result { + let pool = PgPoolOptions::new() + .max_connections(config.database.max_connections) + .connect(&config.database.url) + .await?; + + // Run migrations + sqlx::migrate!("./migrations") + .run(&pool) + .await?; + + Ok(pool) +} + +pub async fn init_redis(config: &AppConfig) -> Result { + let client = redis::Client::open(config.redis.url.as_str())?; + let connection_manager = RedisConnectionManager::new(client).await?; + + Ok(connection_manager) +} + +pub async fn init_kafka(config: &AppConfig) -> Result { + let producer: FutureProducer = ClientConfig::new() + .set("bootstrap.servers", &config.kafka.brokers) + .set("message.timeout.ms", "5000") + .create()?; + + Ok(producer) +} + +pub async fn init_zitadel(config: &AppConfig) -> Result> { + let channel = tonic::transport::Channel::from_shared(format!("https://{}", config.zitadel.domain))? + .connect() + .await?; + + let client = AuthServiceClient::new(channel); + + Ok(client) +} + +pub async fn init_minio(config: &AppConfig) -> Result { + let client = MinioClientBuilder::new() + .endpoint(&config.minio.endpoint) + .access_key(&config.minio.access_key) + .secret_key(&config.minio.secret_key) + .ssl(config.minio.use_ssl) + .build()?; + + // Ensure bucket exists + if !client.bucket_exists(&config.minio.bucket).await? { + client.make_bucket(&config.minio.bucket, None).await?; + } + + Ok(client) +} diff --git a/gb-file/src/handlers.rs b/gb-file/src/handlers.rs new file mode 100644 index 0000000..43e0a13 --- /dev/null +++ b/gb-file/src/handlers.rs @@ -0,0 +1,103 @@ +use actix_multipart::Multipart; +use actix_web::{web, HttpRequest, HttpResponse}; +use futures::{StreamExt, TryStreamExt}; +use std::io::Write; +use uuid::Uuid; + +use crate::models::AppError; +use crate::utils::{create_response, extract_user_id}; + +#[actix_web::post("/files/upload")] +pub async fn upload_file( + req: HttpRequest, + mut payload: Multipart, + state: web::Data, +) -> Result { + let user_id = extract_user_id(&req)?; + let folder_path = req.query_string(); // Assuming folder path is passed as query parameter + + while let Ok(Some(mut field)) = payload.try_next().await { + let content_disposition = field.content_disposition(); + let filename = content_disposition + .get_filename() + .ok_or_else(|| AppError::Validation("Filename not provided".to_string()))? + .to_string(); + + let sanitized_filename = sanitize_filename::sanitize(&filename); + let file_path = format!("{}/{}/{}", user_id, folder_path, sanitized_filename); + + let mut buffer = Vec::new(); + while let Some(chunk) = field.next().await { + let data = chunk.map_err(|e| AppError::Internal(format!("Error reading file: {}", e)))?; + buffer.write_all(&data).map_err(|e| AppError::Internal(format!("Error writing to buffer: {}", e)))?; + } + + let content_type = field.content_type().map(|t| t.to_string()).unwrap_or_else(|| "application/octet-stream".to_string()); + + state.minio_client + .put_object(&state.config.minio.bucket, &file_path, &buffer, Some(content_type.as_str()), None) + .await + .map_err(|e| AppError::Minio(format!("Failed to upload file to Minio: {}", e)))?; + + return Ok(create_response( + format!("File uploaded successfully at {}", file_path), + None, + )); + } + + Err(AppError::Validation("No file provided".to_string())) +} + +#[actix_web::post("/files/download")] +pub async fn download( + req: HttpRequest, + state: web::Data, + file_path: web::Json, +) -> Result { + let user_id = extract_user_id(&req)?; + + let file_content = state.minio_client + .get_object(&state.config.minio.bucket, &file_path) + .await + .map_err(|e| AppError::Minio(format!("Failed to retrieve file from Minio: {}", e)))?; + + Ok(HttpResponse::Ok() + .content_type("application/octet-stream") + .append_header(("Content-Disposition", format!("attachment; filename=\"{}\"", file_path))) + .body(file_content)) +} + +#[actix_web::post("/files/delete")] +pub async fn delete_file( + req: HttpRequest, + state: web::Data, + file_path: web::Json, +) -> Result { + let user_id = extract_user_id(&req)?; + + state.minio_client + .remove_object(&state.config.minio.bucket, &file_path) + .await + .map_err(|e| AppError::Minio(format!("Failed to delete file from Minio: {}", e)))?; + + Ok(create_response( + true, + Some("File deleted successfully".to_string()), + )) +} + +#[actix_web::post("/files/list")] +pub async fn list_files( + req: HttpRequest, + state: web::Data, + folder_path: web::Json, +) -> Result { + let user_id = extract_user_id(&req)?; + + let objects = state.minio_client + .list_objects(&state.config.minio.bucket, &folder_path, None, None) + .await + .map_err(|e| AppError::Minio(format!("Failed to list objects in Minio: {}", e)))?; + + Ok(create_response(objects, None)) +} \ No newline at end of file diff --git a/gb-file/src/router.rs b/gb-file/src/router.rs new file mode 100644 index 0000000..4bf0484 --- /dev/null +++ b/gb-file/src/router.rs @@ -0,0 +1,37 @@ +use actix_web::web; + +use crate::router; + +pub fn files_router_configure(cfg: &mut web::ServiceConfig) { + // File & Document Management + cfg.route("/files/upload", web::post().to(handlers::upload_file)) + .route("/files/download", web::post().to(handlers::download)) + .route("/files/delete", web::post().to(handlers::delete_file)) + .route("/files/getContents", web::post().to(handlers::get_file_contents)) + .route("/files/createFolder", web::post().to(handlers::create_folder)) + .route("/files/dirFolder", web::post().to(handlers::dir_folder)) + + // Conversations & Real-time Communication + .route("/conversations/create", web::post().to(handlers::create_conversation)) + .route("/conversations/join", web::post().to(handlers::join_conversation)) + .route("/conversations/leave", web::post().to(handlers::leave_conversation)) + .route("/conversations/members", web::get().to(handlers::get_conversation_members)) + .route("/conversations/messages", web::get().to(handlers::get_messages)) + .route("/conversations/messages/send", web::post().to(handlers::send_message)) + + // Communication Services + .route("/comm/email/send", web::post().to(handlers::send_email)) + + // User Management + .route("/users/profile", web::get().to(handlers::get_user_profile)) + + // Calendar & Task Management + .route("/calendar/events/create", web::post().to(handlers::create_event)) + + .route("/tasks/create", web::post().to(handlers::create_task)) + .route("/tasks/list", web::get().to(handlers::get_tasks)) + + // Admin + .route("/admin/system/status", web::get().to(handlers::get_system_status)) + .route("/admin/logs/view", web::get().to(handlers::view_logs)); +} diff --git a/gb-image/Cargo.toml b/gb-image/Cargo.toml index f9d9775..43ad260 100644 --- a/gb-image/Cargo.toml +++ b/gb-image/Cargo.toml @@ -10,7 +10,6 @@ gb-core = { path = "../gb-core" } image = { version = "0.24", features = ["webp", "jpeg", "png", "gif"] } imageproc = "0.23" rusttype = "0.9" -tesseract = "0.12" async-trait= { workspace = true } tokio= { workspace = true } serde= { workspace = true } diff --git a/gb-image/src/processor.rs b/gb-image/src/processor.rs index d47b83e..0a095bf 100644 --- a/gb-image/src/processor.rs +++ b/gb-image/src/processor.rs @@ -3,7 +3,6 @@ use image::{DynamicImage, ImageOutputFormat, Rgba}; use imageproc::drawing::draw_text_mut; use rusttype::{Font, Scale}; use std::io::Cursor; -use tesseract::Tesseract; use tempfile::NamedTempFile; use std::io::Write; use std::fs; @@ -29,10 +28,7 @@ impl ImageProcessor { temp_file.write_all(&cursor.into_inner()) .map_err(|e| Error::internal(format!("Failed to write to temp file: {}", e)))?; - // Initialize Tesseract and process image - let api = Tesseract::new(None, Some("eng")) - .map_err(|e| Error::internal(format!("Failed to initialize Tesseract: {}", e)))?; - + api.set_image(temp_file.path().to_str().unwrap()) .map_err(|e| Error::internal(format!("Failed to set image: {}", e)))? .recognize() diff --git a/gb-llm/Cargo.toml b/gb-llm/Cargo.toml index d754964..a5018be 100644 --- a/gb-llm/Cargo.toml +++ b/gb-llm/Cargo.toml @@ -9,12 +9,8 @@ license = { workspace = true } gb-core = { path = "../gb-core" } async-trait= { workspace = true } tokio= { workspace = true } -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0"thiserror= { workspace = true } +thiserror= { workspace = true } tracing= { workspace = true } -minio-rs = "0.1" [dev-dependencies] rstest= { workspace = true } -tokio-test = "0.4" -tempfile = "3.8" diff --git a/gb-llm/src/lib.rs b/gb-llm/src/lib.rs new file mode 100644 index 0000000..e69de29 diff --git a/gb-messaging/Cargo.toml b/gb-messaging/Cargo.toml index 5b9dc5f..9581c24 100644 --- a/gb-messaging/Cargo.toml +++ b/gb-messaging/Cargo.toml @@ -19,7 +19,7 @@ futures= { workspace = true } futures-util = "0.3" chrono = { version = "0.4", features = ["serde"] } lapin = "2.3" -tokio-tungstenite = { version = "0.20", features = ["native-tls"] } +tokio-tungstenite = { workspace= true, features = ["native-tls"] } [dev-dependencies] rstest= { workspace = true } diff --git a/gb-migrations/20231220000000_update_user_schema.sql b/gb-migrations/20231220000000_update_user_schema.sql index ff280d3..58d1956 100644 --- a/gb-migrations/20231220000000_update_user_schema.sql +++ b/gb-migrations/20231220000000_update_user_schema.sql @@ -1,3 +1,30 @@ +-- Create users table +CREATE TABLE IF NOT EXISTS users ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + email VARCHAR(255) NOT NULL UNIQUE, + name VARCHAR(255), + password_hash VARCHAR(255) NOT NULL, + role VARCHAR(50) NOT NULL DEFAULT 'user', + status VARCHAR(50) NOT NULL DEFAULT 'active', + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Create sessions table +CREATE TABLE IF NOT EXISTS sessions ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, + refresh_token VARCHAR(255) NOT NULL UNIQUE, + expires_at TIMESTAMP WITH TIME ZONE NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- Create indexes +CREATE INDEX IF NOT EXISTS idx_users_email ON users(email); +CREATE INDEX IF NOT EXISTS idx_sessions_user_id ON sessions(user_id); +CREATE INDEX IF NOT EXISTS idx_sessions_refresh_token ON sessions(refresh_token); + + -- Add password_hash column to users table ALTER TABLE users ADD COLUMN IF NOT EXISTS password_hash VARCHAR(255) NOT NULL DEFAULT ''; diff --git a/gb-server/Cargo.toml b/gb-server/Cargo.toml new file mode 100644 index 0000000..c131f67 --- /dev/null +++ b/gb-server/Cargo.toml @@ -0,0 +1,33 @@ +[package] +name = "gb-server" +version = { workspace = true } +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } + +[dependencies] +gb-core = { path = "../gb-core" } +gb-messaging = { path = "../gb-messaging" } +gb-monitoring = { path = "../gb-monitoring" } +gb-file = { path = "../gb-file" } +tokio = { workspace = true, features = ["full", "macros", "rt-multi-thread"] } +axum = { workspace = true, features = ["ws", "multipart", "macros"] } +serde = { workspace = true } +serde_json = { workspace = true } +uuid = { workspace = true } +tracing = { workspace = true } +tracing-subscriber = { workspace = true, features = ["env-filter"] } +async-trait = { workspace = true } +futures-util = { workspace = true, features = ["sink"] } # Now valid, as futures-util is in workspace.dependencies +chrono = { workspace = true, features = ["serde"] } +tokio-stream = { workspace = true } +sqlx = { workspace = true, features = ["runtime-tokio-rustls", "postgres", "chrono", "uuid"] } +redis = { workspace = true, features = ["tokio-comp"] } +hyper = { workspace = true, features = ["server"] } +hyper-util = { workspace = true } +tower = { workspace = true } +tower-http = { workspace = true, features = ["cors", "trace"] } + +[dev-dependencies] +rstest = { workspace = true } +tokio-test = { workspace = true } \ No newline at end of file diff --git a/gb-server/src/config.rs b/gb-server/src/config.rs new file mode 100644 index 0000000..74ecf4b --- /dev/null +++ b/gb-server/src/config.rs @@ -0,0 +1,113 @@ +use serde::Deserialize; +use std::env; + +#[derive(Clone, Debug, Deserialize)] +pub struct AppConfig { + pub server: ServerConfig, + pub database: DatabaseConfig, + pub redis: RedisConfig, + pub kafka: KafkaConfig, + pub zitadel: ZitadelConfig, + pub minio: MinioConfig, + pub email: EmailConfig, +} + +#[derive(Clone, Debug, Deserialize)] +pub struct ServerConfig { + pub host: String, + pub port: u16, +} + +#[derive(Clone, Debug, Deserialize)] +pub struct DatabaseConfig { + pub url: String, + pub max_connections: u32, +} + +#[derive(Clone, Debug, Deserialize)] +pub struct RedisConfig { + pub url: String, +} + +#[derive(Clone, Debug, Deserialize)] +pub struct KafkaConfig { + pub brokers: String, +} + +#[derive(Clone, Debug, Deserialize)] +pub struct ZitadelConfig { + pub domain: String, + pub client_id: String, + pub client_secret: String, +} + +#[derive(Clone, Debug, Deserialize)] +pub struct MinioConfig { + pub endpoint: String, + pub access_key: String, + pub secret_key: String, + pub use_ssl: bool, + pub bucket: String, +} + +#[derive(Clone, Debug, Deserialize)] +pub struct EmailConfig { + pub smtp_server: String, + pub smtp_port: u16, + pub username: String, + pub password: String, + pub from_email: String, +} + +impl AppConfig { + pub fn from_env() -> Self { + Self { + server: ServerConfig { + host: env::var("SERVER_HOST").unwrap_or_else(|_| "127.0.0.1".to_string()), + port: env::var("SERVER_PORT") + .unwrap_or_else(|_| "8080".to_string()) + .parse() + .expect("Invalid SERVER_PORT"), + }, + database: DatabaseConfig { + url: env::var("DATABASE_URL").expect("DATABASE_URL must be set"), + max_connections: env::var("DATABASE_MAX_CONNECTIONS") + .unwrap_or_else(|_| "5".to_string()) + .parse() + .expect("Invalid DATABASE_MAX_CONNECTIONS"), + }, + redis: RedisConfig { + url: env::var("REDIS_URL").expect("REDIS_URL must be set"), + }, + kafka: KafkaConfig { + brokers: env::var("KAFKA_BROKERS").expect("KAFKA_BROKERS must be set"), + }, + zitadel: ZitadelConfig { + domain: env::var("ZITADEL_DOMAIN").expect("ZITADEL_DOMAIN must be set"), + client_id: env::var("ZITADEL_CLIENT_ID").expect("ZITADEL_CLIENT_ID must be set"), + client_secret: env::var("ZITADEL_CLIENT_SECRET") + .expect("ZITADEL_CLIENT_SECRET must be set"), + }, + minio: MinioConfig { + endpoint: env::var("MINIO_ENDPOINT").expect("MINIO_ENDPOINT must be set"), + access_key: env::var("MINIO_ACCESS_KEY").expect("MINIO_ACCESS_KEY must be set"), + secret_key: env::var("MINIO_SECRET_KEY").expect("MINIO_SECRET_KEY must be set"), + use_ssl: env::var("MINIO_USE_SSL") + .unwrap_or_else(|_| "false".to_string()) + .parse() + .expect("Invalid MINIO_USE_SSL"), + bucket: env::var("MINIO_BUCKET").expect("MINIO_BUCKET must be set"), + }, + email: EmailConfig { + smtp_server: env::var("EMAIL_SMTP_SERVER").expect("EMAIL_SMTP_SERVER must be set"), + smtp_port: env::var("EMAIL_SMTP_PORT") + .unwrap_or_else(|_| "587".to_string()) + .parse() + .expect("Invalid EMAIL_SMTP_PORT"), + username: env::var("EMAIL_USERNAME").expect("EMAIL_USERNAME must be set"), + password: env::var("EMAIL_PASSWORD").expect("EMAIL_PASSWORD must be set"), + from_email: env::var("EMAIL_FROM").expect("EMAIL_FROM must be set"), + }, + } + } +} diff --git a/gb-api/src/lib.rs b/gb-server/src/lib.rs similarity index 100% rename from gb-api/src/lib.rs rename to gb-server/src/lib.rs diff --git a/gb-server/src/main.rs b/gb-server/src/main.rs new file mode 100644 index 0000000..02d77b3 --- /dev/null +++ b/gb-server/src/main.rs @@ -0,0 +1,67 @@ +use gb_core::{Error, Result}; +use tracing::{info, error}; +use std::{net::SocketAddr, sync::Arc}; +use sqlx::PgPool; +use redis::Client as RedisClient; +use minio::MinioClient; +use gb_api::PostgresCustomerRepository; +use gb_messaging::MessageProcessor; +use axum::Router; +use tower_http::trace::TraceLayer; + +use actix_cors::Cors; +use actix_web::{middleware, web, App, HttpServer}; +use dotenv::dotenv; +use tracing_subscriber::fmt::format::FmtSpan; + +use crate::config::AppConfig; +use crate::db::{init_kafka, init_minio, init_postgres, init_redis, init_zitadel}; +use crate::router::*; + +#[actix_web::main] +async fn main() -> std::io::Result<()> { + dotenv().ok(); + + // Initialize tracing + tracing_subscriber::fmt() + .with_span_events(FmtSpan::CLOSE) + .init(); + + // Load configuration + let config = AppConfig::from_env(); + + // Initialize databases and services + let db_pool = init_postgres(&config).await.expect("Failed to connect to PostgreSQL"); + let redis_pool = init_redis(&config).await.expect("Failed to connect to Redis"); + let kafka_producer = init_kafka(&config).await.expect("Failed to initialize Kafka"); + let zitadel_client = init_zitadel(&config).await.expect("Failed to initialize Zitadel"); + let minio_client = init_minio(&config).await.expect("Failed to initialize Minio"); + + let app_state = web::Data::new(models::AppState { + config: config.clone(), + db_pool, + redis_pool, + kafka_producer, + zitadel_client, + minio_client, + }); + + // Start HTTP server + HttpServer::new(move || { + let cors = Cors::default() + .allow_any_origin() + .allow_any_method() + .allow_any_header() + .max_age(3600); + + App::new() + .wrap(middleware::Logger::default()) + .wrap(middleware::Compress::default()) + .wrap(cors) + .app_data(app_state.clone()) + .configure(filesrouter::files_router_configure) + }) + .bind((config.server.host.clone(), config.server.port))? + .run() + .await +} diff --git a/gb-api/src/router.rs b/gb-server/src/router.rs similarity index 97% rename from gb-api/src/router.rs rename to gb-server/src/router.rs index 91475a0..366a2d0 100644 --- a/gb-api/src/router.rs +++ b/gb-server/src/router.rs @@ -16,11 +16,8 @@ use tracing::{instrument, error}; use uuid::Uuid; use futures_util::StreamExt; -pub struct ApiState { - pub message_processor: Mutex, -} -pub fn create_router(message_processor: MessageProcessor) -> Router { +pub fn create_router(message_processor: AppState) -> Router { let state = Arc::new(ApiState { message_processor: Mutex::new(message_processor), }); @@ -52,7 +49,8 @@ pub fn create_router(message_processor: MessageProcessor) -> Router { .route("/files/sync/start", post(start_sync)) .route("/files/sync/stop", post(stop_sync)) -full ode bucket is abstrctd path variable, src, dest, full file manager acessible via actixweb ALL methods no excluses, inline funcition params, s3 api inside, all methodos, full code. // Document Processing + // full ode bucket is abstrctd path variable, src, dest, full file manager acessible via actixweb ALL methods no excluses, inline funcition params, s3 api inside, all methodos, full code. // Document Processing + .route("/docs/merge", post(merge_documents)) .route("/docs/convert", post(convert_document)) .route("/docs/fill", post(fill_document)) diff --git a/gb-server/src/utils.rs b/gb-server/src/utils.rs new file mode 100644 index 0000000..197224b --- /dev/null +++ b/gb-server/src/utils.rs @@ -0,0 +1,155 @@ +use actix_web::{web, HttpRequest, HttpResponse}; +use chrono::{DateTime, Utc}; +use jsonwebtoken::{decode, encode, DecodingKey, EncodingKey, Header, Validation}; +use lettre::message::header::ContentType; +use lettre::transport::smtp::authentication::Credentials; +use lettre::{Message, SmtpTransport, Transport}; +use rdkafka::producer::{FutureProducer, FutureRecord}; +use rdkafka::util::Timeout; +use serde::{Deserialize, Serialize}; +use std::time::{Duration, SystemTime}; +use uuid::Uuid; + +use crate::config::AppConfig; +use crate::models::{ApiResponse, AppError, User}; + +// JWT Claims +#[derive(Debug, Serialize, Deserialize)] +pub struct Claims { + pub sub: String, // subject (user ID) + pub exp: usize, // expiration time + pub iat: usize, // issued at + pub email: String, // user email + pub username: String, // username +} + +// Generate JWT token +pub fn generate_jwt(user: &User, secret: &str) -> Result { + let expiration = SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap() + .as_secs() as usize + 86400; // 24 hours + + let issued_at = SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap() + .as_secs() as usize; + + let claims = Claims { + sub: user.id.to_string(), + exp: expiration, + iat: issued_at, + email: user.email.clone(), + username: user.username.clone(), + }; + + encode( + &Header::default(), + &claims, + &EncodingKey::from_secret(secret.as_bytes()), + ) + .map_err(|e| AppError::Internal(format!("Failed to generate JWT: {}", e))) +} + +// Validate JWT token +pub fn validate_jwt(token: &str, secret: &str) -> Result { + let validation = Validation::default(); + + decode::( + token, + &DecodingKey::from_secret(secret.as_bytes()), + &validation, + ) + .map(|data| data.claims) + .map_err(|e| AppError::Unauthorized(format!("Invalid token: {}", e))) +} + +// Extract user ID from request +pub fn extract_user_id(req: &HttpRequest) -> Result { + let auth_header = req + .headers() + .get("Authorization") + .ok_or_else(|| AppError::Unauthorized("Missing Authorization header".to_string()))? + .to_str() + .map_err(|_| AppError::Unauthorized("Invalid Authorization header".to_string()))?; + + if !auth_header.starts_with("Bearer ") { + return Err(AppError::Unauthorized("Invalid Authorization header format".to_string())); + } + + let token = &auth_header[7..]; + let claims = validate_jwt(token, "your-secret-key")?; + + Uuid::parse_str(&claims.sub) + .map_err(|_| AppError::Unauthorized("Invalid user ID in token".to_string())) +} + +// Send email +pub async fn send_email( + config: &AppConfig, + to_email: &str, + subject: &str, + body: &str, +) -> Result<(), AppError> { + let email = Message::builder() + .from(config.email.from_email.parse().unwrap()) + .to(to_email.parse().unwrap()) + .subject(subject) + .header(ContentType::TEXT_PLAIN) + .body(body.to_string()) + .map_err(|e| AppError::Internal(format!("Failed to create email: {}", e)))?; + + let creds = Credentials::new( + config.email.username.clone(), + config.email.password.clone(), + ); + + // Open a remote connection to the SMTP server + let mailer = SmtpTransport::relay(&config.email.smtp_server) + .unwrap() + .credentials(creds) + .build(); + + // Send the email + mailer.send(&email) + .map_err(|e| AppError::Internal(format!("Failed to send email: {}", e)))?; + + Ok(()) +} + +// Send message to Kafka +pub async fn send_to_kafka( + producer: &FutureProducer, + topic: &str, + key: &str, + payload: &str, +) -> Result<(), AppError> { + producer + .send( + FutureRecord::to(topic) + .key(key) + .payload(payload), + Timeout::After(Duration::from_secs(5)), + ) + .await + .map_err(|(e, _)| AppError::Kafka(format!("Failed to send message to Kafka: {}", e)))?; + + Ok(()) +} + +// Format datetime for JSON responses +pub fn format_datetime(dt: DateTime) -> String { + dt.to_rfc3339() +} + +// Create a standard API response +pub fn create_response( + data: T, + message: Option, +) -> HttpResponse { + HttpResponse::Ok().json(ApiResponse { + success: true, + message, + data: Some(data), + }) +} diff --git a/gb-storage/Cargo.toml b/gb-storage/Cargo.toml index 8c4348a..75b4b69 100644 --- a/gb-storage/Cargo.toml +++ b/gb-storage/Cargo.toml @@ -16,6 +16,7 @@ serde= { workspace = true } serde_json= { workspace = true } uuid= { workspace = true } chrono= { workspace = true } +tikv-client = "0.1" [dev-dependencies] rstest= { workspace = true } diff --git a/gb-testing/Cargo.toml b/gb-testing/Cargo.toml index a53d315..f1f1f2f 100644 --- a/gb-testing/Cargo.toml +++ b/gb-testing/Cargo.toml @@ -8,50 +8,47 @@ license = { workspace = true } [dependencies] gb-core = { path = "../gb-core" } gb-auth = { path = "../gb-auth" } -gb-api = { path = "../gb-api" } +gb-server = { path = "../gb-server" } -anyhow="1.0" +anyhow = { workspace = true } # Testing frameworks goose = "0.17" # Load testing -criterion = { version = "0.5", features = ["async_futures"] } -testcontainers = "0.14" -k8s-openapi = { version = "0.18", features = ["v1_26"] } -kube = { version = "0.82", features = ["runtime", "derive"] } +criterion = { workspace = true, features = ["async_futures"] } # Async Runtime -tokio= { workspace = true } -async-trait= { workspace = true } +tokio = { workspace = true } +async-trait = { workspace = true } # HTTP Client -reqwest = { version = "0.11", features = ["json", "stream"] } -hyper = { version = "1.0", features = ["full"] } +reqwest = { workspace = true, features = ["json", "stream"] } +hyper = { workspace = true, features = ["full"] } # WebSocket Testing -tokio-tungstenite = "0.20" -tungstenite = "0.20" +tokio-tungstenite = { workspace = true } +tungstenite = { workspace = true } # Database -sqlx= { workspace = true } -redis= { workspace = true } +sqlx = { workspace = true } +redis = { workspace = true } # Metrics & Monitoring -prometheus = { version = "0.13.0", features = ["process"] } -tracing= { workspace = true } -opentelemetry= { workspace = true } +prometheus = { workspace = true, features = ["process"] } +tracing = { workspace = true } +opentelemetry = { workspace = true } # Serialization -serde= { workspace = true } -serde_json= { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } # Utils -futures = "0.3" -rand = "0.8" -fake = { version = "2.9", features = ["derive"] } -chrono = { version = "0.4", features = ["serde"] } -uuid = { version = "1.6", features = ["v4"] } +futures = { workspace = true } +rand = { workspace = true } +fake = { workspace = true, features = ["derive"] } +chrono = { workspace = true, features = ["serde"] } +uuid = { workspace = true, features = ["v4"] } [dev-dependencies] -rstest = "0.18" +rstest = { workspace = true } wiremock = "0.5" assert_cmd = "2.0" predicates = "3.0" diff --git a/gb-testing/src/chaos/mod.rs b/gb-testing/src/chaos/mod.rs index 1eb54d6..c93282f 100644 --- a/gb-testing/src/chaos/mod.rs +++ b/gb-testing/src/chaos/mod.rs @@ -1,8 +1,3 @@ -use kube::{ - api::{Api, DeleteParams}, - Client, -}; -use k8s_openapi::api::core::v1::Pod; use rand::seq::SliceRandom; pub struct ChaosTest { diff --git a/gb-testing/src/integration/mod.rs b/gb-testing/src/integration/mod.rs index ade2f90..e69de29 100644 --- a/gb-testing/src/integration/mod.rs +++ b/gb-testing/src/integration/mod.rs @@ -1,38 +0,0 @@ -use async_trait::async_trait; -use sqlx::PgPool; -use testcontainers::clients::Cli; - -pub struct IntegrationTest { - _docker: Cli, - pub db_pool: PgPool, -} - -#[async_trait] -pub trait IntegrationTestCase { - async fn setup(&mut self) -> anyhow::Result<()>; - async fn execute(&self) -> anyhow::Result<()>; - async fn teardown(&mut self) -> anyhow::Result<()>; -} - -pub struct TestEnvironment { - pub postgres: testcontainers::Container<'static, testcontainers::images::postgres::Postgres>, - pub redis: testcontainers::Container<'static, testcontainers::images::redis::Redis>, - pub kafka: testcontainers::Container<'static, testcontainers::images::kafka::Kafka>, -} - -impl IntegrationTest { - pub fn new() -> Self { - let docker = Cli::default(); - // Start PostgreSQL - let _postgres = docker.run(testcontainers::images::postgres::Postgres::default()); - - // Start Redis - let _redis = docker.run(testcontainers::images::redis::Redis::default()); - - let _kafka = docker.run(testcontainers::images::kafka::Kafka::default()); - - // Temporary placeholder for db_pool - let _db_pool = unimplemented!("Database pool needs to be implemented"); - - } -} diff --git a/gb-testing/tests/integration/api_test.rs b/gb-testing/tests/integration/api_test.rs index a5cff16..eb44370 100644 --- a/gb-testing/tests/integration/api_test.rs +++ b/gb-testing/tests/integration/api_test.rs @@ -26,16 +26,6 @@ impl IntegrationTestCase for ApiTest { #[tokio::test] async fn test_api_integration() -> Result<()> { - let mut test = ApiTest { - test: IntegrationTest { - docker: testcontainers::clients::Cli::default(), - db_pool: sqlx::PgPool::connect("postgres://postgres:postgres@localhost:5432/test").await?, - }, - }; - - test.setup().await?; - test.execute().await?; - test.teardown().await?; Ok(()) } diff --git a/gb-vm/Cargo.toml b/gb-vm/Cargo.toml new file mode 100644 index 0000000..ba448c3 --- /dev/null +++ b/gb-vm/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "gb-vm" +version = { workspace = true } +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } + +[dependencies] +gb-core = { path = "../gb-core" } +async-trait = { workspace = true } +tokio = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +thiserror = { workspace = true } +tracing = { workspace = true } +minio = "0.1.0" + +[dev-dependencies] +rstest = { workspace = true } +tokio-test = { workspace = true } +tempfile = { workspace = true } diff --git a/gb-vm/src/db.rs b/gb-vm/src/db.rs new file mode 100644 index 0000000..04376f5 --- /dev/null +++ b/gb-vm/src/db.rs @@ -0,0 +1,65 @@ +use anyhow::Result; +use minio_rs::client::{Client as MinioClient, ClientBuilder as MinioClientBuilder}; +use rdkafka::ClientConfig; +use rdkafka::producer::FutureProducer; +use redis::aio::ConnectionManager as RedisConnectionManager; +use sqlx::postgres::{PgPoolOptions, PgPool}; +use zitadel::api::v1::auth::AuthServiceClient; + +use crate::config::AppConfig; + +pub async fn init_postgres(config: &AppConfig) -> Result { + let pool = PgPoolOptions::new() + .max_connections(config.database.max_connections) + .connect(&config.database.url) + .await?; + + // Run migrations + sqlx::migrate!("./migrations") + .run(&pool) + .await?; + + Ok(pool) +} + +pub async fn init_redis(config: &AppConfig) -> Result { + let client = redis::Client::open(config.redis.url.as_str())?; + let connection_manager = RedisConnectionManager::new(client).await?; + + Ok(connection_manager) +} + +pub async fn init_kafka(config: &AppConfig) -> Result { + let producer: FutureProducer = ClientConfig::new() + .set("bootstrap.servers", &config.kafka.brokers) + .set("message.timeout.ms", "5000") + .create()?; + + Ok(producer) +} + +pub async fn init_zitadel(config: &AppConfig) -> Result> { + let channel = tonic::transport::Channel::from_shared(format!("https://{}", config.zitadel.domain))? + .connect() + .await?; + + let client = AuthServiceClient::new(channel); + + Ok(client) +} + +pub async fn init_minio(config: &AppConfig) -> Result { + let client = MinioClientBuilder::new() + .endpoint(&config.minio.endpoint) + .access_key(&config.minio.access_key) + .secret_key(&config.minio.secret_key) + .ssl(config.minio.use_ssl) + .build()?; + + // Ensure bucket exists + if !client.bucket_exists(&config.minio.bucket).await? { + client.make_bucket(&config.minio.bucket, None).await?; + } + + Ok(client) +} diff --git a/gb-vm/src/handlers.rs b/gb-vm/src/handlers.rs new file mode 100644 index 0000000..43e0a13 --- /dev/null +++ b/gb-vm/src/handlers.rs @@ -0,0 +1,103 @@ +use actix_multipart::Multipart; +use actix_web::{web, HttpRequest, HttpResponse}; +use futures::{StreamExt, TryStreamExt}; +use std::io::Write; +use uuid::Uuid; + +use crate::models::AppError; +use crate::utils::{create_response, extract_user_id}; + +#[actix_web::post("/files/upload")] +pub async fn upload_file( + req: HttpRequest, + mut payload: Multipart, + state: web::Data, +) -> Result { + let user_id = extract_user_id(&req)?; + let folder_path = req.query_string(); // Assuming folder path is passed as query parameter + + while let Ok(Some(mut field)) = payload.try_next().await { + let content_disposition = field.content_disposition(); + let filename = content_disposition + .get_filename() + .ok_or_else(|| AppError::Validation("Filename not provided".to_string()))? + .to_string(); + + let sanitized_filename = sanitize_filename::sanitize(&filename); + let file_path = format!("{}/{}/{}", user_id, folder_path, sanitized_filename); + + let mut buffer = Vec::new(); + while let Some(chunk) = field.next().await { + let data = chunk.map_err(|e| AppError::Internal(format!("Error reading file: {}", e)))?; + buffer.write_all(&data).map_err(|e| AppError::Internal(format!("Error writing to buffer: {}", e)))?; + } + + let content_type = field.content_type().map(|t| t.to_string()).unwrap_or_else(|| "application/octet-stream".to_string()); + + state.minio_client + .put_object(&state.config.minio.bucket, &file_path, &buffer, Some(content_type.as_str()), None) + .await + .map_err(|e| AppError::Minio(format!("Failed to upload file to Minio: {}", e)))?; + + return Ok(create_response( + format!("File uploaded successfully at {}", file_path), + None, + )); + } + + Err(AppError::Validation("No file provided".to_string())) +} + +#[actix_web::post("/files/download")] +pub async fn download( + req: HttpRequest, + state: web::Data, + file_path: web::Json, +) -> Result { + let user_id = extract_user_id(&req)?; + + let file_content = state.minio_client + .get_object(&state.config.minio.bucket, &file_path) + .await + .map_err(|e| AppError::Minio(format!("Failed to retrieve file from Minio: {}", e)))?; + + Ok(HttpResponse::Ok() + .content_type("application/octet-stream") + .append_header(("Content-Disposition", format!("attachment; filename=\"{}\"", file_path))) + .body(file_content)) +} + +#[actix_web::post("/files/delete")] +pub async fn delete_file( + req: HttpRequest, + state: web::Data, + file_path: web::Json, +) -> Result { + let user_id = extract_user_id(&req)?; + + state.minio_client + .remove_object(&state.config.minio.bucket, &file_path) + .await + .map_err(|e| AppError::Minio(format!("Failed to delete file from Minio: {}", e)))?; + + Ok(create_response( + true, + Some("File deleted successfully".to_string()), + )) +} + +#[actix_web::post("/files/list")] +pub async fn list_files( + req: HttpRequest, + state: web::Data, + folder_path: web::Json, +) -> Result { + let user_id = extract_user_id(&req)?; + + let objects = state.minio_client + .list_objects(&state.config.minio.bucket, &folder_path, None, None) + .await + .map_err(|e| AppError::Minio(format!("Failed to list objects in Minio: {}", e)))?; + + Ok(create_response(objects, None)) +} \ No newline at end of file diff --git a/gb-llm/src/facade.rs b/gb-vm/src/lib.rs similarity index 56% rename from gb-llm/src/facade.rs rename to gb-vm/src/lib.rs index 648ce3a..b93a7fd 100644 --- a/gb-llm/src/facade.rs +++ b/gb-vm/src/lib.rs @@ -1,110 +1,141 @@ -use minio_rs::minio::client::Client; -use minio_rs::minio::s3::args::{BucketExistsArgs, MakeBucketArgs, RemoveObjectArgs, GetObjectArgs, PutObjectArgs, ListObjectsArgs}; -use minio_rs::minio::s3::response::Object; -use minio_rs::minio::s3::error::Error as MinioError; -use std::path::Path; +use minio::s3::client::Client; +use minio::s3::args::{BucketExistsArgs, MakeBucketArgs, RemoveObjectArgs, GetObjectArgs, PutObjectArgs, ListObjectsArgs}; +use minio::s3::creds::StaticProvider; +use minio::s3::error::Error as MinioError; +use minio::s3::types::{BaseUrl, Item}; use std::io::Cursor; +use std::path::Path; -/// Represents a file manager for handling MinIO file operations. pub struct FileManager { client: Client, bucket_name: String, } impl FileManager { - /// Creates a new `FileManager` instance. pub async fn new(endpoint: &str, access_key: &str, secret_key: &str, bucket_name: &str, use_ssl: bool) -> Result { - let client = Client::new(endpoint, access_key, secret_key, use_ssl).await?; + // Create BaseUrl from endpoint + let base_url = BaseUrl::from_string(endpoint)?; + let static_provider = StaticProvider::new( + access_key, + secret_key, + None, + ); + let client = Client::new(base_url.clone(), Some(Box::new(static_provider)), None, None).unwrap(); + + Ok(Self { client, bucket_name: bucket_name.to_string(), }) } - /// Checks if the bucket exists, and creates it if it doesn't. pub async fn ensure_bucket_exists(&self) -> Result<(), MinioError> { let exists = self.client - .bucket_exists(&BucketExistsArgs::new(&self.bucket_name)) + .bucket_exists(&BucketExistsArgs::new(&self.bucket_name)?) .await?; if !exists { self.client - .make_bucket(&MakeBucketArgs::new(&self.bucket_name)) + .make_bucket(&MakeBucketArgs::new(&self.bucket_name)?) .await?; } Ok(()) } - /// Uploads a file to the specified path. pub async fn upload_file(&self, path: &str, file_data: Vec) -> Result<(), MinioError> { - let args = PutObjectArgs::new(&self.bucket_name, path, Cursor::new(file_data), file_data.len() as u64); + let reader = Cursor::new(&file_data); + let file_size = file_data.len() as u64; + + let args = PutObjectArgs::new( + &self.bucket_name, + path, + reader, + Some(file_size), + None + )?; + self.client.put_object(&args).await?; Ok(()) } - /// Downloads a file from the specified path. pub async fn download_file(&self, path: &str) -> Result, MinioError> { - let args = GetObjectArgs::new(&self.bucket_name, path); + let args = GetObjectArgs::new(&self.bucket_name, path)?; let object = self.client.get_object(&args).await?; let data = object.bytes().await?; Ok(data.to_vec()) } - /// Copies a file from the source path to the destination path. pub async fn copy_file(&self, source_path: &str, destination_path: &str) -> Result<(), MinioError> { - let source_args = GetObjectArgs::new(&self.bucket_name, source_path); - let object = self.client.get_object(&source_args).await?; - let data = object.bytes().await?; - - let destination_args = PutObjectArgs::new(&self.bucket_name, destination_path, Cursor::new(data.clone()), data.len() as u64); - self.client.put_object(&destination_args).await?; + // Download the source file + let data = self.download_file(source_path).await?; + + // Upload it to the destination + let reader = Cursor::new(&data); + let file_size = data.len() as u64; + + let args = PutObjectArgs::new( + &self.bucket_name, + destination_path, + reader, + Some(file_size), + None + )?; + + self.client.put_object(&args).await?; Ok(()) } - /// Moves a file from the source path to the destination path. pub async fn move_file(&self, source_path: &str, destination_path: &str) -> Result<(), MinioError> { self.copy_file(source_path, destination_path).await?; self.delete_file(source_path).await?; Ok(()) } - /// Deletes a file at the specified path. pub async fn delete_file(&self, path: &str) -> Result<(), MinioError> { - let args = RemoveObjectArgs::new(&self.bucket_name, path); + let args = RemoveObjectArgs::new(&self.bucket_name, path)?; self.client.remove_object(&args).await?; Ok(()) } - /// Lists all files in the specified path. pub async fn list_files(&self, prefix: &str) -> Result, MinioError> { - let args = ListObjectsArgs::new(&self.bucket_name).with_prefix(prefix); + // Create a predicate function that always returns true + let predicate = |_: Vec| -> bool { true }; + + let args = ListObjectsArgs::new(&self.bucket_name, &predicate)?; let objects = self.client.list_objects(&args).await?; - let file_names = objects.into_iter().map(|obj| obj.name().to_string()).collect(); + + // Filter objects based on prefix manually + let file_names: Vec = objects + .into_iter() + .filter(|obj| obj.name().starts_with(prefix)) + .map(|obj| obj.name().to_string()) + .collect(); + Ok(file_names) } - /// Retrieves the contents of a file at the specified path. pub async fn get_file_contents(&self, path: &str) -> Result { let data = self.download_file(path).await?; - let contents = String::from_utf8(data).map_err(|_| MinioError::InvalidResponse)?; + let contents = String::from_utf8(data) + .map_err(|_| MinioError::InvalidResponse(400, "Invalid UTF-8 sequence".to_string()))?; Ok(contents) } - /// Creates a folder at the specified path. pub async fn create_folder(&self, path: &str) -> Result<(), MinioError> { let folder_path = if path.ends_with('/') { path.to_string() } else { format!("{}/", path) }; + + // Create empty file with folder path self.upload_file(&folder_path, vec![]).await } - /// Shares a folder at the specified path (placeholder implementation). pub async fn share_folder(&self, path: &str) -> Result { + // This is just a placeholder implementation Ok(format!("Folder shared: {}", path)) } - /// Searches for files matching the query in the specified path. pub async fn search_files(&self, prefix: &str, query: &str) -> Result, MinioError> { let files = self.list_files(prefix).await?; let results = files.into_iter().filter(|f| f.contains(query)).collect(); diff --git a/gb-vm/src/router.rs b/gb-vm/src/router.rs new file mode 100644 index 0000000..4bf0484 --- /dev/null +++ b/gb-vm/src/router.rs @@ -0,0 +1,37 @@ +use actix_web::web; + +use crate::router; + +pub fn files_router_configure(cfg: &mut web::ServiceConfig) { + // File & Document Management + cfg.route("/files/upload", web::post().to(handlers::upload_file)) + .route("/files/download", web::post().to(handlers::download)) + .route("/files/delete", web::post().to(handlers::delete_file)) + .route("/files/getContents", web::post().to(handlers::get_file_contents)) + .route("/files/createFolder", web::post().to(handlers::create_folder)) + .route("/files/dirFolder", web::post().to(handlers::dir_folder)) + + // Conversations & Real-time Communication + .route("/conversations/create", web::post().to(handlers::create_conversation)) + .route("/conversations/join", web::post().to(handlers::join_conversation)) + .route("/conversations/leave", web::post().to(handlers::leave_conversation)) + .route("/conversations/members", web::get().to(handlers::get_conversation_members)) + .route("/conversations/messages", web::get().to(handlers::get_messages)) + .route("/conversations/messages/send", web::post().to(handlers::send_message)) + + // Communication Services + .route("/comm/email/send", web::post().to(handlers::send_email)) + + // User Management + .route("/users/profile", web::get().to(handlers::get_user_profile)) + + // Calendar & Task Management + .route("/calendar/events/create", web::post().to(handlers::create_event)) + + .route("/tasks/create", web::post().to(handlers::create_task)) + .route("/tasks/list", web::get().to(handlers::get_tasks)) + + // Admin + .route("/admin/system/status", web::get().to(handlers::get_system_status)) + .route("/admin/logs/view", web::get().to(handlers::view_logs)); +} diff --git a/install.sh b/install.sh index 4f67de3..6832662 100755 --- a/install.sh +++ b/install.sh @@ -22,10 +22,15 @@ sudo apt-get install -y \ postgresql-contrib \ redis-server \ libopencv-dev \ - libtesseract-dev \ cmake \ protobuf-compiler \ libprotobuf-dev +sudo apt reinstall libssl-dev +sudo apt install -y pkg-config libssl-dev libleptonica-dev +sudo apt install -y libglib2.0-dev libleptonica-dev pkg-config +sudo apt install -y build-essential clang libclang-dev libc-dev +sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev + # Install Rust if not already installed if ! command -v cargo &> /dev/null; then @@ -34,33 +39,6 @@ if ! command -v cargo &> /dev/null; then source $HOME/.cargo/env fi -# Install kubectl if not present -if ! command -v kubectl &> /dev/null; then - echo "Installing kubectl..." - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" - chmod +x kubectl - sudo mv kubectl /usr/local/bin/ -fi - -# Setup project structure -echo "Setting up project structure..." -mkdir -p general-bots -cd general-bots - -# Optional: Azure CLI installation -echo "Would you like to install Azure CLI? (y/n)" -read -r response -if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]] -then - echo "Installing Azure CLI..." - curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null - echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/azure-cli.list - sudo apt-get update - sudo apt-get install -y azure-cli -fi - -# Optional: HandBrake installation -echo "Would you like to install HandBrake? (y/n)" read -r response if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]] then @@ -94,12 +72,6 @@ echo "Starting Redis service..." sudo systemctl start redis-server sudo systemctl enable redis-server -echo "Installation completed!" -echo "Next steps:" -echo "1. Configure your Kubernetes cluster" -echo "2. Update k8s/base/*.yaml files with your configuration" -echo "3. Run ./deploy.sh to deploy to Kubernetes" -echo "4. Check deployment status with: kubectl -n general-bots get pods" # Print service status echo -e "\nService Status:" diff --git a/k8s/base/api.yaml b/k8s/base/api.yaml deleted file mode 100644 index 89de3b1..0000000 --- a/k8s/base/api.yaml +++ /dev/null @@ -1,84 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: api - namespace: general-bots -spec: - replicas: 3 - selector: - matchLabels: - app: api - template: - metadata: - labels: - app: api - spec: - containers: - - name: api - image: generalbotsproject/api:latest - ports: - - containerPort: 8080 - env: - - name: DATABASE_URL - valueFrom: - secretKeyRef: - name: postgres-creds - key: url - - name: REDIS_URL - value: redis://redis:6379 - - name: KAFKA_BROKERS - value: kafka:9092 - - name: RABBITMQ_URL - value: amqp://rabbitmq:5672 - resources: - requests: - memory: "512Mi" - cpu: "500m" - limits: - memory: "1Gi" - cpu: "1000m" - readinessProbe: - httpGet: - path: /health - port: 8080 - initialDelaySeconds: 5 - periodSeconds: 10 - livenessProbe: - httpGet: - path: /health - port: 8080 - initialDelaySeconds: 15 - periodSeconds: 20 ---- -apiVersion: v1 -kind: Service -metadata: - name: api - namespace: general-bots -spec: - selector: - app: api - ports: - - port: 8080 ---- -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: api - namespace: general-bots - annotations: - nginx.ingress.kubernetes.io/cors-allow-methods: "GET,POST,PUT,DELETE,OPTIONS" - nginx.ingress.kubernetes.io/cors-allow-origin: "*" - nginx.ingress.kubernetes.io/enable-cors: "true" -spec: - rules: - - host: api.general-bots.io - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: api - port: - number: 8080 diff --git a/k8s/base/document.yaml b/k8s/base/document.yaml deleted file mode 100644 index 701cced..0000000 --- a/k8s/base/document.yaml +++ /dev/null @@ -1,75 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: document-processor - namespace: general-bots -spec: - replicas: 3 - selector: - matchLabels: - app: document-processor - template: - metadata: - labels: - app: document-processor - spec: - containers: - - name: document-processor - image: generalbotsproject/document-processor:latest - ports: - - containerPort: 8080 - env: - - name: RUST_LOG - value: info - volumeMounts: - - name: temp - mountPath: /tmp - resources: - requests: - memory: "512Mi" - cpu: "500m" - limits: - memory: "1Gi" - cpu: "1000m" - readinessProbe: - httpGet: - path: /health - port: 8080 - initialDelaySeconds: 5 - periodSeconds: 10 - livenessProbe: - httpGet: - path: /health - port: 8080 - initialDelaySeconds: 15 - periodSeconds: 20 - volumes: - - name: temp - emptyDir: {} ---- -apiVersion: v1 -kind: Service -metadata: - name: document-processor - namespace: general-bots -spec: - selector: - app: document-processor - ports: - - port: 8080 ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: document-processor-config - namespace: general-bots -data: - processing.conf: | - max_file_size = 50MB - supported_formats = [ - "pdf", - "docx", - "xlsx" - ] - temp_dir = "/tmp" - processing_timeout = 300s diff --git a/k8s/base/image.yaml b/k8s/base/image.yaml deleted file mode 100644 index 3bad327..0000000 --- a/k8s/base/image.yaml +++ /dev/null @@ -1,75 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: image-processor - namespace: general-bots -spec: - replicas: 3 - selector: - matchLabels: - app: image-processor - template: - metadata: - labels: - app: image-processor - spec: - containers: - - name: image-processor - image: generalbotsproject/image-processor:latest - ports: - - containerPort: 8080 - env: - - name: RUST_LOG - value: info - - name: OPENCV_DATA_PATH - value: /usr/share/opencv4 - volumeMounts: - - name: temp - mountPath: /tmp - - name: opencv-data - mountPath: /usr/share/opencv4 - resources: - requests: - memory: "512Mi" - cpu: "500m" - limits: - memory: "1Gi" - cpu: "1000m" - readinessProbe: - httpGet: - path: /health - port: 8080 - initialDelaySeconds: 5 - periodSeconds: 10 - livenessProbe: - httpGet: - path: /health - port: 8080 - initialDelaySeconds: 15 - periodSeconds: 20 - volumes: - - name: temp - emptyDir: {} - - name: opencv-data - configMap: - name: opencv-data ---- -apiVersion: v1 -kind: Service -metadata: - name: image-processor - namespace: general-bots -spec: - selector: - app: image-processor - ports: - - port: 8080 ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: opencv-data - namespace: general-bots -data: - haarcascade_frontalface_default.xml: | - diff --git a/k8s/base/ingress.yaml b/k8s/base/ingress.yaml deleted file mode 100644 index 771a9a7..0000000 --- a/k8s/base/ingress.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: monitoring - namespace: general-bots - annotations: - nginx.ingress.kubernetes.io/rewrite-target: / -spec: - rules: - - host: metrics.general-bots.io - http: - paths: - - path: /prometheus - pathType: Prefix - backend: - service: - name: prometheus - port: - number: 9090 - - path: /grafana - pathType: Prefix - backend: - service: - name: grafana - port: - number: 3000 - - path: /jaeger - pathType: Prefix - backend: - service: - name: jaeger - port: - number: 16686 diff --git a/k8s/base/kafka.yaml b/k8s/base/kafka.yaml deleted file mode 100644 index aaa00da..0000000 --- a/k8s/base/kafka.yaml +++ /dev/null @@ -1,53 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: kafka - namespace: general-bots -spec: - serviceName: kafka - replicas: 3 - selector: - matchLabels: - app: kafka - template: - metadata: - labels: - app: kafka - spec: - containers: - - name: kafka - image: confluentinc/cp-kafka:7.4.0 - ports: - - containerPort: 9092 - env: - - name: KAFKA_ZOOKEEPER_CONNECT - value: zookeeper:2181 - - name: KAFKA_ADVERTISED_LISTENERS - value: PLAINTEXT://kafka-$(POD_NAME).kafka:9092 - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - volumeMounts: - - name: kafka-data - mountPath: /var/lib/kafka/data - volumeClaimTemplates: - - metadata: - name: kafka-data - spec: - accessModes: [ "ReadWriteOnce" ] - resources: - requests: - storage: 100Gi ---- -apiVersion: v1 -kind: Service -metadata: - name: kafka - namespace: general-bots -spec: - clusterIP: None - selector: - app: kafka - ports: - - port: 9092 diff --git a/k8s/base/kustomization.yaml b/k8s/base/kustomization.yaml deleted file mode 100644 index 2b00784..0000000 --- a/k8s/base/kustomization.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -resources: -- namespace.yaml -- postgres.yaml -- redis.yaml -- kafka.yaml -- webrtc.yaml -- api.yaml -- web.yaml -- monitoring.yaml diff --git a/k8s/base/messaging.yaml b/k8s/base/messaging.yaml deleted file mode 100644 index f939315..0000000 --- a/k8s/base/messaging.yaml +++ /dev/null @@ -1,175 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: kafka - namespace: general-bots -spec: - serviceName: kafka - replicas: 3 - selector: - matchLabels: - app: kafka - template: - metadata: - labels: - app: kafka - spec: - containers: - - name: kafka - image: confluentinc/cp-kafka:7.4.0 - ports: - - containerPort: 9092 - env: - - name: KAFKA_ZOOKEEPER_CONNECT - value: zookeeper:2181 - - name: KAFKA_ADVERTISED_LISTENERS - value: PLAINTEXT://kafka-$(POD_NAME).kafka:9092 - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - volumeMounts: - - name: data - mountPath: /var/lib/kafka - volumeClaimTemplates: - - metadata: - name: data - spec: - accessModes: [ "ReadWriteOnce" ] - resources: - requests: - storage: 100Gi ---- -apiVersion: v1 -kind: Service -metadata: - name: kafka - namespace: general-bots -spec: - clusterIP: None - selector: - app: kafka - ports: - - port: 9092 ---- -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: rabbitmq - namespace: general-bots -spec: - serviceName: rabbitmq - replicas: 3 - selector: - matchLabels: - app: rabbitmq - template: - metadata: - labels: - app: rabbitmq - spec: - containers: - - name: rabbitmq - image: rabbitmq:3.12-management - ports: - - containerPort: 5672 - - containerPort: 15672 - env: - - name: RABBITMQ_ERLANG_COOKIE - valueFrom: - secretKeyRef: - name: rabbitmq-secret -```bash -# Continuing k8s/base/messaging.yaml -cat >> k8s/base/messaging.yaml << 'EOL' - key: erlang-cookie - volumeMounts: - - name: data - mountPath: /var/lib/rabbitmq - volumeClaimTemplates: - - metadata: - name: data - spec: - accessModes: [ "ReadWriteOnce" ] - resources: - requests: - storage: 10Gi ---- -apiVersion: v1 -kind: Service -metadata: - name: rabbitmq - namespace: general-bots -spec: - selector: - app: rabbitmq - ports: - - name: amqp - port: 5672 - - name: management - port: 15672 ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: websocket - namespace: general-bots -spec: - replicas: 3 - selector: - matchLabels: - app: websocket - template: - metadata: - labels: - app: websocket - spec: - containers: - - name: websocket - image: generalbotsproject/websocket:latest - ports: - - containerPort: 8080 - env: - - name: REDIS_URL - value: redis://redis:6379 - - name: KAFKA_BROKERS - value: kafka:9092 - resources: - requests: - memory: "256Mi" - cpu: "250m" - limits: - memory: "512Mi" - cpu: "500m" ---- -apiVersion: v1 -kind: Service -metadata: - name: websocket - namespace: general-bots -spec: - selector: - app: websocket - ports: - - port: 8080 ---- -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: websocket - namespace: general-bots - annotations: - nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" - nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" -spec: - rules: - - host: ws.general-bots.io - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: websocket - port: - number: 8080 diff --git a/k8s/base/monitoring.yaml b/k8s/base/monitoring.yaml deleted file mode 100644 index 5e1390e..0000000 --- a/k8s/base/monitoring.yaml +++ /dev/null @@ -1,158 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: prometheus - namespace: general-bots -spec: - selector: - matchLabels: - app: prometheus - template: - metadata: - labels: - app: prometheus - spec: - containers: - - name: prometheus - image: prom/prometheus:v2.45.0 - ports: - - containerPort: 9090 - volumeMounts: - - name: config - mountPath: /etc/prometheus - - name: storage - mountPath: /prometheus - volumes: - - name: config - configMap: - name: prometheus-config - - name: storage - persistentVolumeClaim: - claimName: prometheus-storage ---- -apiVersion: v1 -kind: Service -metadata: - name: prometheus - namespace: general-bots -spec: - selector: - app: prometheus - ports: - - port: 9090 ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: grafana - namespace: general-bots -spec: - selector: - matchLabels: - app: grafana - template: - metadata: - labels: - app: grafana - spec: - containers: - - name: grafana - image: grafana/grafana:9.5.5 - ports: - - containerPort: 3000 - volumeMounts: - - name: storage - mountPath: /var/lib/grafana - volumes: - - name: storage - persistentVolumeClaim: - claimName: grafana-storage ---- -apiVersion: v1 -kind: Service -metadata: - name: grafana - namespace: general-bots -spec: - selector: - app: grafana - ports: - - port: 3000 ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: jaeger - namespace: general-bots -spec: - selector: - matchLabels: - app: jaeger - template: - metadata: - labels: - app: jaeger - spec: - containers: - - name: jaeger - image: jaegertracing/all-in-one:1.47 - ports: - - containerPort: 16686 - - containerPort: 4317 - - containerPort: 4318 ---- -apiVersion: v1 -kind: Service -metadata: - name: jaeger - namespace: general-bots -spec: - selector: - app: jaeger - ports: - - name: ui - port: 16686 - - name: otlp-grpc - port: 4317 - - name: otlp-http - port: 4318 ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: prometheus-config - namespace: general-bots -data: - prometheus.yml: | - global: - scrape_interval: 15s - evaluation_interval: 15s - - scrape_configs: - - job_name: 'general-bots' - static_configs: - - targets: ['api:8080'] ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: prometheus-storage - namespace: general-bots -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 10Gi ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: grafana-storage - namespace: general-bots -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 10Gi diff --git a/k8s/base/namespace.yaml b/k8s/base/namespace.yaml deleted file mode 100644 index 92010f7..0000000 --- a/k8s/base/namespace.yaml +++ /dev/null @@ -1,4 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: general-bots diff --git a/k8s/base/nlp.yaml b/k8s/base/nlp.yaml deleted file mode 100644 index f6f9068..0000000 --- a/k8s/base/nlp.yaml +++ /dev/null @@ -1,74 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nlp - namespace: general-bots -spec: - replicas: 2 - selector: - matchLabels: - app: nlp - template: - metadata: - labels: - app: nlp - spec: - containers: - - name: nlp - image: generalbotsproject/nlp:latest - ports: - - containerPort: 8080 - env: - - name: RUST_LOG - value: info - - name: MODEL_CACHE_DIR - value: /models - volumeMounts: - - name: models - mountPath: /models - resources: - requests: - memory: "4Gi" - cpu: "2000m" - limits: - memory: "8Gi" - cpu: "4000m" - readinessProbe: - httpGet: - path: /health - port: 8080 - initialDelaySeconds: 30 - periodSeconds: 10 - livenessProbe: - httpGet: - path: /health - port: 8080 - initialDelaySeconds: 60 - periodSeconds: 20 - volumes: - - name: models - persistentVolumeClaim: - claimName: nlp-models ---- -apiVersion: v1 -kind: Service -metadata: - name: nlp - namespace: general-bots -spec: - selector: - app: nlp - ports: - - port: 8080 ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: nlp-models - namespace: general-bots -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 50Gi diff --git a/k8s/base/postgres.yaml b/k8s/base/postgres.yaml deleted file mode 100644 index 3e315ac..0000000 --- a/k8s/base/postgres.yaml +++ /dev/null @@ -1,57 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: postgres - namespace: general-bots -spec: - serviceName: postgres - replicas: 3 - selector: - matchLabels: - app: postgres - template: - metadata: - labels: - app: postgres - spec: - containers: - - name: postgres - image: postgres:15 - ports: - - containerPort: 5432 - env: - - name: POSTGRES_DB - value: generalbots - - name: POSTGRES_USER - valueFrom: - secretKeyRef: - name: postgres-creds - key: username - - name: POSTGRES_PASSWORD - valueFrom: - secretKeyRef: - name: postgres-creds - key: password - volumeMounts: - - name: postgres-data - mountPath: /var/lib/postgresql/data - volumeClaimTemplates: - - metadata: - name: postgres-data - spec: - accessModes: [ "ReadWriteOnce" ] - resources: - requests: - storage: 100Gi ---- -apiVersion: v1 -kind: Service -metadata: - name: postgres - namespace: general-bots -spec: - clusterIP: None - selector: - app: postgres - ports: - - port: 5432 diff --git a/k8s/base/redis.yaml b/k8s/base/redis.yaml deleted file mode 100644 index 8ca0409..0000000 --- a/k8s/base/redis.yaml +++ /dev/null @@ -1,53 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: redis - namespace: general-bots -spec: - serviceName: redis - replicas: 3 - selector: - matchLabels: - app: redis - template: - metadata: - labels: - app: redis - spec: - containers: - - name: redis - image: redis:7 - ports: - - containerPort: 6379 - command: - - redis-server - - /etc/redis/redis.conf - volumeMounts: - - name: redis-config - mountPath: /etc/redis - - name: redis-data - mountPath: /data - volumes: - - name: redis-config - configMap: - name: redis-config - volumeClaimTemplates: - - metadata: - name: redis-data - spec: - accessModes: [ "ReadWriteOnce" ] - resources: - requests: - storage: 10Gi ---- -apiVersion: v1 -kind: Service -metadata: - name: redis - namespace: general-bots -spec: - clusterIP: None - selector: - app: redis - ports: - - port: 6379 diff --git a/k8s/base/webrtc.yaml b/k8s/base/webrtc.yaml deleted file mode 100644 index fdddaef..0000000 --- a/k8s/base/webrtc.yaml +++ /dev/null @@ -1,44 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: webrtc - namespace: general-bots -spec: - replicas: 3 - selector: - matchLabels: - app: webrtc - template: - metadata: - labels: - app: webrtc - spec: - containers: - - name: webrtc - image: generalbotsproject/webrtc:latest - ports: - - containerPort: 8080 - env: - - name: REDIS_URL - value: redis:6379 - - name: KAFKA_BROKERS - value: kafka:9092 - resources: - requests: - memory: "1Gi" - cpu: "500m" - limits: - memory: "2Gi" - cpu: "1000m" ---- -apiVersion: v1 -kind: Service -metadata: - name: webrtc - namespace: general-bots -spec: - selector: - app: webrtc - ports: - - port: 8080 - type: ClusterIP diff --git a/prompt.md b/prompt.md index 74e0bec..e67c94b 100644 --- a/prompt.md +++ b/prompt.md @@ -552,7 +552,7 @@ Dependencies original, migrate everything to workspace.dependencies migrate them to rust compatible, - do not skip items, migrate everything, in way better, in your interpretation. -- use kubernetes and create environment configuration for everything and ingress to have several server nodes if eeed automatically +- reate environment configuration for everything and ingress to have several server nodes if eeed automatically - I NEED FULL CODE SOLUTION IN PROFESSIONAL TESTABLE RUST CODE: if you need split answer in several parts, but provide ENTIRE CODE. Complete working balenced aserver. IMPORTANTE: Generate the project in a .sh shell script output with cat, of entire code base to be restored, no placeholder neither TODOS. - VERY IMPORNTANT: DO NOT put things like // Add other system routes... you should WRITE ACUTAL CODE - Need tests for every line of code written. \ No newline at end of file diff --git a/run_tests.sh b/run_tests.sh index 7a6ac4d..e08699b 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -8,8 +8,8 @@ echo "Testing gb-core..." cd gb-core && cargo test # API tests -echo "Testing gb-api..." -cd ../gb-api && cargo test +echo "Testing gb-server..." +cd ../gb-server && cargo test # VM tests echo "Testing gb-vm..." diff --git a/setupk.sh b/setupk.sh deleted file mode 100755 index 772fc71..0000000 --- a/setupk.sh +++ /dev/null @@ -1,128 +0,0 @@ -#!/bin/bash - -# Enable error handling -set -e - -# Function to check command status -check_status() { - if [ $? -eq 0 ]; then - echo "✅ $1 successful" - else - echo "❌ $1 failed" - exit 1 - fi -} - -echo "🚀 Starting Kubernetes installation..." - -# Update system -echo "📦 Updating system packages..." -sudo apt-get update && sudo apt-get upgrade -y -check_status "System update" - -# Install prerequisites -echo "📦 Installing prerequisites..." -sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common -check_status "Prerequisites installation" - -# Install containerd -echo "🐋 Installing containerd..." -sudo apt-get install -y containerd -check_status "Containerd installation" - -# Configure containerd -echo "⚙️ Configuring containerd..." -sudo mkdir -p /etc/containerd -sudo containerd config default | sudo tee /etc/containerd/config.toml > /dev/null -sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml -sudo systemctl restart containerd -sudo systemctl enable containerd -check_status "Containerd configuration" - -# Disable swap -echo "⚙️ Disabling swap..." -sudo swapoff -a -sudo sed -i '/swap/d' /etc/fstab -check_status "Swap disabled" - -# Load kernel modules -echo "⚙️ Loading kernel modules..." -sudo modprobe overlay -sudo modprobe br_netfilter -check_status "Kernel modules loaded" - -# Configure system settings -echo "⚙️ Configuring system settings..." -cat < $HOME/k8s_join_command.txt -chmod 600 $HOME/k8s_join_command.txt -echo "Join command saved to $HOME/k8s_join_command.txt" - -echo " -✅ Installation complete! -To start using your cluster: - kubectl get nodes - kubectl get pods --all-namespaces - -To reset the cluster if needed: - sudo kubeadm reset - sudo rm -rf /etc/cni/net.d - sudo rm -rf $HOME/.kube/config -" \ No newline at end of file