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