diff --git a/.vimspector.json b/.vimspector.json index c91c46db..87755af6 100644 --- a/.vimspector.json +++ b/.vimspector.json @@ -4,7 +4,17 @@ "adapter": "CodeLLDB", "configuration": { "request": "launch", - "program": "./target/debug/${fileDirname}" + "program": "${workspaceFolder}/target/debug/${projectFolderBasename}" + } + }, + "attach": { + "adapter": "CodeLLDB", + "filetypes": [ "rust", "c", "cpp", "jai" ], + "configuration": { + "request": "attach", + "program": "${workspaceRoot}/${fileBasenameNoExtension}", + "PID": "${PID}", + "sourceLanguages": [ "rust" ] } } } diff --git a/Cargo.lock b/Cargo.lock index 1bfc80a9..e974dd3f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21,9 +21,9 @@ dependencies = [ [[package]] name = "actix-files" -version = "0.6.9" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4009a8beb4dc78a58286ac9d58969ee0a8acecb7912d5ce898b4da4335579341" +checksum = "df8c4f30e3272d7c345f88ae0aac3848507ef5ba871f9cc2a41c8085a0f0523b" dependencies = [ "actix-http", "actix-service", @@ -44,9 +44,9 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.11.2" +version = "3.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7926860314cbe2fb5d1f13731e387ab43bd32bca224e82e6e2db85de0a3dba49" +checksum = "93acb4a42f64936f9b8cae4a433b237599dd6eb6ed06124eb67132ef8cc90662" dependencies = [ "actix-codec", "actix-rt", @@ -73,8 +73,8 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rand 0.9.2", - "sha1", + "rand 0.10.1", + "sha1 0.11.0", "smallvec", "tokio", "tokio-util", @@ -94,9 +94,9 @@ dependencies = [ [[package]] name = "actix-router" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8" +checksum = "14f8c75c51892f18d9c46150c5ac7beb81c95f78c8b83a634d49f4ca32551fe7" dependencies = [ "bytestring", "cfg-if", @@ -175,9 +175,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "4.12.1" +version = "4.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1654a77ba142e37f049637a3e5685f864514af11fcbc51cb51eb6596afe5b8d6" +checksum = "ff87453bc3b56e9b2b23c1cc0b1be8797184accf51d2abe0f8a33ec275d316bf" dependencies = [ "actix-codec", "actix-http", @@ -211,7 +211,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "smallvec", - "socket2 0.6.1", + "socket2 0.6.3", "time", "tracing", "url", @@ -246,16 +246,18 @@ dependencies = [ [[package]] name = "actix-ws" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12d4f2fbee3ef7a22fa6cb0e416b962237a167ed0419f22d4e451da2d7f082f8" +checksum = "decf53c3cdd63dd6f289980b430238f9a2f6d19f8bce8e418272e08d3da43f0f" dependencies = [ "actix-codec", "actix-http", "actix-web", "bytestring", "futures-core", + "futures-sink", "tokio", + "tokio-util", ] [[package]] @@ -316,6 +318,12 @@ dependencies = [ "libc", ] +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + [[package]] name = "arcstr" version = "1.2.0" @@ -346,6 +354,17 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-lock" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + [[package]] name = "async-stream" version = "0.3.6" @@ -393,9 +412,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-lc-rs" -version = "1.15.3" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e84ce723ab67259cfeb9877c6a639ee9eb7a27b28123abd71db7f0d5d0cc9d86" +checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f" dependencies = [ "aws-lc-sys", "zeroize", @@ -403,9 +422,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.36.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a442ece363113bd4bd4c8b18977a7798dd4d3c3383f34fb61936960e8f4ad8" +checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7" dependencies = [ "cc", "cmake", @@ -450,9 +469,9 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" [[package]] name = "bitvec" @@ -486,6 +505,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +dependencies = [ + "hybrid-array", +] + [[package]] name = "bridge" version = "0.1.0" @@ -510,21 +538,21 @@ dependencies = [ "p256", "parking_lot", "pin-project", - "rand 0.9.2", + "rand 0.10.1", "redis", "regex", - "reqwest 0.13.1", + "reqwest 0.13.2", "rust-argon2", "rustls", "rustls-pemfile", "rustls-pki-types", - "schemars 1.2.0", + "schemars 1.2.1", "serde", "serde_json", "serde_urlencoded", - "sha2", + "sha2 0.11.0", "tera", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", "tokio", "tokio-rustls", @@ -572,10 +600,10 @@ dependencies = [ "getrandom 0.2.17", "getrandom 0.3.4", "hex", - "indexmap 2.13.0", + "indexmap 2.14.0", "js-sys", "once_cell", - "rand 0.9.2", + "rand 0.9.4", "serde", "serde_bytes", "serde_json", @@ -595,15 +623,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.19.1" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bytes" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "bytestring" @@ -616,9 +644,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.53" +version = "1.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "755d2fce177175ffca841e9a06afdb2c4ab0f593d53b4dee48147dfaade85932" +checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20" dependencies = [ "find-msvc-tools", "jobserver", @@ -644,11 +672,22 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chacha20" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "rand_core 0.10.1", +] + [[package]] name = "chrono" -version = "0.4.43" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ "iana-time-zone", "js-sys", @@ -682,9 +721,9 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" dependencies = [ "cc", ] @@ -718,6 +757,12 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-oid" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + [[package]] name = "const-random" version = "0.1.18" @@ -799,6 +844,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.5.0" @@ -876,6 +930,15 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" +dependencies = [ + "hybrid-array", +] + [[package]] name = "curve25519-dalek" version = "4.1.3" @@ -883,9 +946,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "curve25519-dalek-derive", - "digest", + "digest 0.10.7", "fiat-crypto", "rustc_version", "subtle", @@ -903,38 +966,14 @@ dependencies = [ "syn", ] -[[package]] -name = "darling" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" -dependencies = [ - "darling_core 0.21.3", - "darling_macro 0.21.3", -] - [[package]] name = "darling" version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" dependencies = [ - "darling_core 0.23.0", - "darling_macro 0.23.0", -] - -[[package]] -name = "darling_core" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", + "darling_core", + "darling_macro", ] [[package]] @@ -950,24 +989,13 @@ dependencies = [ "syn", ] -[[package]] -name = "darling_macro" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" -dependencies = [ - "darling_core 0.21.3", - "quote", - "syn", -] - [[package]] name = "darling_macro" version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ - "darling_core 0.23.0", + "darling_core", "quote", "syn", ] @@ -984,16 +1012,16 @@ version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ - "const-oid", + "const-oid 0.9.6", "pem-rfc7468", "zeroize", ] [[package]] name = "deranged" -version = "0.5.5" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", "serde_core", @@ -1012,9 +1040,9 @@ dependencies = [ [[package]] name = "derive-where" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" +checksum = "d08b3a0bcc0d079199cd476b2cae8435016ec11d1c0986c6901c5ac223041534" dependencies = [ "proc-macro2", "quote", @@ -1056,12 +1084,23 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", + "block-buffer 0.10.4", + "const-oid 0.9.6", + "crypto-common 0.1.6", "subtle", ] +[[package]] +name = "digest" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c" +dependencies = [ + "block-buffer 0.12.0", + "const-oid 0.10.2", + "crypto-common 0.2.1", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -1092,7 +1131,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest", + "digest 0.10.7", "elliptic-curve", "rfc6979", "signature", @@ -1118,7 +1157,7 @@ dependencies = [ "curve25519-dalek", "ed25519", "serde", - "sha2", + "sha2 0.10.9", "subtle", "zeroize", ] @@ -1150,7 +1189,7 @@ dependencies = [ "base16ct", "base64ct", "crypto-bigint", - "digest", + "digest 0.10.7", "ff", "generic-array", "group", @@ -1245,9 +1284,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.3.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "ff" @@ -1267,15 +1306,15 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "find-msvc-tools" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "flate2" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", @@ -1337,9 +1376,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -1352,9 +1391,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -1362,15 +1401,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -1379,15 +1418,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", @@ -1396,21 +1435,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -1420,7 +1459,6 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -1457,11 +1495,25 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "rand_core 0.10.1", + "wasip2", + "wasip3", +] + [[package]] name = "globset" version = "0.4.18" @@ -1521,7 +1573,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.13.0", + "indexmap 2.14.0", "slab", "tokio", "tokio-util", @@ -1540,7 +1592,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.4.0", - "indexmap 2.13.0", + "indexmap 2.14.0", "slab", "tokio", "tokio-util", @@ -1553,6 +1605,15 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash 0.1.5", +] + [[package]] name = "hashbrown" version = "0.16.1" @@ -1564,6 +1625,12 @@ dependencies = [ "foldhash 0.2.0", ] +[[package]] +name = "hashbrown" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" + [[package]] name = "heck" version = "0.5.0" @@ -1592,9 +1659,9 @@ dependencies = [ "idna", "ipnet", "once_cell", - "rand 0.9.2", + "rand 0.9.4", "ring", - "thiserror 2.0.17", + "thiserror 2.0.18", "tinyvec", "tokio", "tracing", @@ -1614,10 +1681,10 @@ dependencies = [ "moka", "once_cell", "parking_lot", - "rand 0.9.2", + "rand 0.9.4", "resolv-conf", "smallvec", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", ] @@ -1637,7 +1704,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -1722,11 +1789,20 @@ dependencies = [ "libm", ] +[[package]] +name = "hybrid-array" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214" +dependencies = [ + "typenum", +] + [[package]] name = "hyper" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" dependencies = [ "atomic-waker", "bytes", @@ -1738,7 +1814,6 @@ dependencies = [ "httparse", "itoa", "pin-project-lite", - "pin-utils", "smallvec", "tokio", "want", @@ -1746,9 +1821,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.7" +version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ "http 1.4.0", "hyper", @@ -1756,7 +1831,6 @@ dependencies = [ "log", "rustls", "rustls-native-certs", - "rustls-pki-types", "tokio", "tokio-rustls", "tower-service", @@ -1778,14 +1852,13 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "base64 0.22.1", "bytes", "futures-channel", - "futures-core", "futures-util", "http 1.4.0", "http-body", @@ -1794,7 +1867,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.1", + "socket2 0.6.3", "system-configuration", "tokio", "tower-service", @@ -1804,9 +1877,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.64" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1828,12 +1901,13 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ "displaydoc", "potential_utf", + "utf8_iter", "yoke", "zerofrom", "zerovec", @@ -1841,9 +1915,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ "displaydoc", "litemap", @@ -1854,9 +1928,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -1868,15 +1942,15 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" [[package]] name = "icu_properties" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" dependencies = [ "icu_collections", "icu_locale_core", @@ -1888,15 +1962,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" [[package]] name = "icu_provider" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ "displaydoc", "icu_locale_core", @@ -1907,6 +1981,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" @@ -1969,39 +2049,40 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.13.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.0", "serde", "serde_core", ] [[package]] name = "ipconfig" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" dependencies = [ - "socket2 0.5.10", + "socket2 0.6.3", "widestring", - "windows-sys 0.48.0", - "winreg", + "windows-registry", + "windows-result", + "windows-sys 0.61.2", ] [[package]] name = "ipnet" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "iri-string" -version = "0.7.10" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20" dependencies = [ "memchr", "serde", @@ -2018,15 +2099,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.18" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67e8da4c49d6d9909fe03361f9b620f58898859f5c7aded68351e85e71ecf50" +checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" dependencies = [ "jiff-static", "log", @@ -2037,9 +2118,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.18" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78" +checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" dependencies = [ "proc-macro2", "quote", @@ -2055,7 +2136,7 @@ dependencies = [ "cesu8", "cfg-if", "combine", - "jni-sys", + "jni-sys 0.3.1", "log", "thiserror 1.0.69", "walkdir", @@ -2064,9 +2145,31 @@ dependencies = [ [[package]] name = "jni-sys" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn", +] [[package]] name = "jobserver" @@ -2080,10 +2183,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.85" +version = "0.3.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" dependencies = [ + "cfg-if", + "futures-util", "once_cell", "wasm-bindgen", ] @@ -2110,7 +2215,7 @@ dependencies = [ "pest_derive", "regex", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -2135,16 +2240,16 @@ dependencies = [ "num-bigint", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "yasna", "zeroize", ] [[package]] name = "jsonwebtoken" -version = "10.2.0" +version = "10.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76e1c7d7df3e34443b3621b459b066a7b79644f059fc8b2db7070c825fd417e" +checksum = "0529410abe238729a60b108898784df8984c87f6054c9c4fcacc47e4803c1ce1" dependencies = [ "base64 0.22.1", "ed25519-dalek", @@ -2154,20 +2259,20 @@ dependencies = [ "p256", "p384", "pem", - "rand 0.8.5", + "rand 0.8.6", "rsa", "serde", "serde_json", - "sha2", + "sha2 0.10.9", "signature", "simple_asn1", ] [[package]] name = "k8s-openapi" -version = "0.27.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05a6d6f3611ad1d21732adbd7a2e921f598af6c92d71ae6e2620da4b67ee1f0d" +checksum = "51b326f5219dd55872a72c1b6ddd1b830b8334996c667449c29391d657d78d5e" dependencies = [ "base64 0.22.1", "jiff", @@ -2177,9 +2282,9 @@ dependencies = [ [[package]] name = "kube" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dae7229247e4215781e5c5104a056e1e2163943e577f9084cf8bba7b5248f7a" +checksum = "acc5a6a69da2975ed9925d56b5dcfc9cc739b66f37add06785b7c9f6d1e88741" dependencies = [ "k8s-openapi", "kube-client", @@ -2190,9 +2295,9 @@ dependencies = [ [[package]] name = "kube-client" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "010875e291a9c0a4e076f4f9c35b97d82fd2372cb3bc713252c3d08b7e73ce5b" +checksum = "0fcaf2d1f1a91e1805d4cd82e8333c022767ae8ffd65909bbef6802733a7dd40" dependencies = [ "base64 0.22.1", "bytes", @@ -2215,7 +2320,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-util", "tower", @@ -2225,9 +2330,9 @@ dependencies = [ [[package]] name = "kube-core" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac76281aa698dd34111e25b21f5f6561932a30feabab5357152be273f8a81bb" +checksum = "f126d2db7a8b532ec1d839ece2a71e2485dc3bbca6cc3c3f929becaa810e719e" dependencies = [ "derive_more", "form_urlencoded", @@ -2235,20 +2340,20 @@ dependencies = [ "jiff", "json-patch", "k8s-openapi", - "schemars 1.2.0", + "schemars 1.2.1", "serde", "serde-value", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "kube-derive" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "599c09721efcccc0e6a26e93df28c587da60ff5e099c657626fff2af0ae4cbb8" +checksum = "d6b9b97e121fce957f9cafc6da534abc4276983ab03190b76c09361e2df849fa" dependencies = [ - "darling 0.23.0", + "darling", "proc-macro2", "quote", "serde", @@ -2258,9 +2363,9 @@ dependencies = [ [[package]] name = "kube-runtime" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db43d26700f564baf850f681f3cb0f1195d2699bd379bfa70750ecec4dcb209" +checksum = "c072737075826ee74d3e615e80334e41e617ca3d14fb46ef7cdfda822d6f15f2" dependencies = [ "ahash", "async-broadcast", @@ -2277,7 +2382,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-util", "tracing", @@ -2298,33 +2403,38 @@ dependencies = [ "spin", ] +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + [[package]] name = "libc" -version = "0.2.180" +version = "0.2.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" +checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f" [[package]] name = "libm" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libmimalloc-sys" -version = "0.1.44" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "667f4fec20f29dfc6bc7357c582d91796c169ad7e2fce709468aefeb2c099870" +checksum = "2d1eacfa31c33ec25e873c136ba5669f00f9866d0688bea7be4d3f7e43067df6" dependencies = [ "cc", - "libc", ] [[package]] name = "litemap" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "local-channel" @@ -2419,20 +2529,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest", + "digest 0.10.7", ] [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "mimalloc" -version = "0.1.48" +version = "0.1.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1ee66a4b64c74f4ef288bcbb9192ad9c3feaad75193129ac8509af543894fd8" +checksum = "b3627c4272df786b9260cabaa46aec1d59c93ede723d4c3ef646c503816b0640" dependencies = [ "libmimalloc-sys", ] @@ -2465,9 +2575,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", "log", @@ -2477,9 +2587,9 @@ dependencies = [ [[package]] name = "moka" -version = "0.12.12" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3dec6bd31b08944e08b58fd99373893a6c17054d6f3ea5006cc894f4f4eee2a" +checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" dependencies = [ "crossbeam-channel", "crossbeam-epoch", @@ -2512,9 +2622,9 @@ checksum = "224484c5d09285a7b8cb0a0c117e847ebd14cb6e4470ecf68cdb89c503b0edb9" [[package]] name = "mongodb" -version = "3.5.0" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50ed2c028a2c04ad58faa2e0f4ee82c1319f0e495b710ca8e8498fde4b395f64" +checksum = "1ef2c933617431ad0246fb5b43c425ebdae18c7f7259c87de0726d93b0e7e91b" dependencies = [ "base64 0.22.1", "bitflags", @@ -2534,20 +2644,20 @@ dependencies = [ "mongodb-internal-macros", "pbkdf2", "percent-encoding", - "rand 0.9.2", + "rand 0.9.4", "rustc_version_runtime", "rustls", "rustversion", "serde", "serde_bytes", "serde_with", - "sha1", - "sha2", - "socket2 0.6.1", + "sha1 0.10.6", + "sha2 0.10.9", + "socket2 0.6.3", "stringprep", "strsim", "take_mut", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-rustls", "tokio-util", @@ -2558,9 +2668,9 @@ dependencies = [ [[package]] name = "mongodb-internal-macros" -version = "3.5.0" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a42ac35ea5c79f6539851d79d7cfe3322358f7d0d7bf040eb3e1558efc0a4c" +checksum = "9e5758dc828eb2d02ec30563cba365609d56ddd833190b192beaee2b475a7bb3" dependencies = [ "macro_magic", "proc-macro2", @@ -2598,16 +2708,16 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand 0.8.5", + "rand 0.8.6", "smallvec", "zeroize", ] [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" [[package]] name = "num-integer" @@ -2649,21 +2759,21 @@ dependencies = [ "chrono", "getrandom 0.2.17", "http 1.4.0", - "rand 0.8.5", + "rand 0.8.6", "reqwest 0.12.28", "serde", "serde_json", "serde_path_to_error", - "sha2", + "sha2 0.10.9", "thiserror 1.0.69", "url", ] [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" dependencies = [ "critical-section", "portable-atomic", @@ -2686,7 +2796,7 @@ dependencies = [ "oauth2", "p256", "p384", - "rand 0.8.5", + "rand 0.8.6", "rsa", "serde", "serde-value", @@ -2694,7 +2804,7 @@ dependencies = [ "serde_path_to_error", "serde_plain", "serde_with", - "sha2", + "sha2 0.10.9", "subtle", "thiserror 1.0.69", "url", @@ -2702,9 +2812,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.75" +version = "0.10.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" +checksum = "f38c4372413cdaaf3cc79dd92d29d7d9f5ab09b51b10dded508fb90bb70b9222" dependencies = [ "bitflags", "cfg-if", @@ -2728,15 +2838,15 @@ dependencies = [ [[package]] name = "openssl-probe" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f50d9b3dabb09ecd771ad0aa242ca6894994c130308ca3d7684634df8037391" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-sys" -version = "0.9.111" +version = "0.9.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" +checksum = "13ce1245cd07fcc4cfdb438f7507b0c7e4f3849a69fd84d52374c66d83741bb6" dependencies = [ "cc", "libc", @@ -2762,7 +2872,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "primeorder", - "sha2", + "sha2 0.10.9", ] [[package]] @@ -2774,7 +2884,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "primeorder", - "sha2", + "sha2 0.10.9", ] [[package]] @@ -2821,7 +2931,7 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -2851,9 +2961,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.5" +version = "2.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9eb05c21a464ea704b53158d358a31e6425db2f63a1a7312268b05fe2b75f7" +checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" dependencies = [ "memchr", "ucd-trie", @@ -2861,9 +2971,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.8.5" +version = "2.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f9dbced329c441fa79d80472764b1a2c7e57123553b8519b36663a2fb234ed" +checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77" dependencies = [ "pest", "pest_generator", @@ -2871,9 +2981,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.5" +version = "2.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bb96d5051a78f44f43c8f712d8e810adb0ebf923fc9ed2655a7f66f63ba8ee5" +checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f" dependencies = [ "pest", "pest_meta", @@ -2884,12 +2994,12 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.8.5" +version = "2.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "602113b5b5e8621770cfd490cfd90b9f84ab29bd2b0e49ad83eb6d186cef2365" +checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" dependencies = [ "pest", - "sha2", + "sha2 0.10.9", ] [[package]] @@ -2918,7 +3028,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ "phf_shared", - "rand 0.8.5", + "rand 0.8.6", ] [[package]] @@ -2932,18 +3042,18 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", @@ -2952,15 +3062,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkcs1" @@ -2985,30 +3089,30 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "portable-atomic" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" -version = "0.2.4" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" dependencies = [ "portable-atomic", ] [[package]] name = "potential_utf" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ "zerovec", ] @@ -3028,6 +3132,16 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "primeorder" version = "0.13.6" @@ -3039,9 +3153,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.105" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -3059,8 +3173,8 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.6.1", - "thiserror 2.0.17", + "socket2 0.6.3", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -3068,21 +3182,21 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.13" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" dependencies = [ "aws-lc-rs", "bytes", "getrandom 0.3.4", "lru-slab", - "rand 0.9.2", + "rand 0.9.4", "ring", "rustc-hash", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.17", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -3097,16 +3211,16 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.1", + "socket2 0.6.3", "tracing", "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.43" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -3117,6 +3231,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "radium" version = "0.7.0" @@ -3125,9 +3245,9 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ "libc", "rand_chacha 0.3.1", @@ -3136,14 +3256,25 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.5", ] +[[package]] +name = "rand" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +dependencies = [ + "chacha20", + "getrandom 0.4.2", + "rand_core 0.10.1", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -3182,13 +3313,20 @@ dependencies = [ "getrandom 0.3.4", ] +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + [[package]] name = "redis" -version = "1.0.2" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfe20977fe93830c0e9817a16fbf1ed1cfd8d4bba366087a1841d2c6033c251" +checksum = "f44e94c96d8870a387d88ce3de3fdd608cbfc0705f03cb343cdde91509d3e49a" dependencies = [ "arcstr", + "async-lock", "bytes", "cfg-if", "combine", @@ -3199,7 +3337,7 @@ dependencies = [ "pin-project-lite", "ryu", "sha1_smol", - "socket2 0.6.1", + "socket2 0.6.3", "tokio", "tokio-util", "url", @@ -3237,9 +3375,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -3249,9 +3387,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -3260,15 +3398,15 @@ dependencies = [ [[package]] name = "regex-lite" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d942b98df5e658f56f20d592c7f868833fe38115e65c33003d8cd224b0155da" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "reqwest" @@ -3310,9 +3448,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e9018c9d814e5f30cc16a0f03271aeab3571e609612d9fe78c1aa8d11c2f62" +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" dependencies = [ "base64 0.22.1", "bytes", @@ -3387,8 +3525,8 @@ version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" dependencies = [ - "const-oid", - "digest", + "const-oid 0.9.6", + "digest 0.10.7", "num-bigint-dig", "num-integer", "num-traits", @@ -3415,9 +3553,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" [[package]] name = "rustc_version" @@ -3440,9 +3578,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.36" +version = "0.23.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" +checksum = "69f9466fb2c14ea04357e91413efb882e2a6d4a406e625449bc0a5d360d53a21" dependencies = [ "aws-lc-rs", "log", @@ -3514,9 +3652,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.9" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ "aws-lc-rs", "ring", @@ -3532,9 +3670,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "same-file" @@ -3547,9 +3685,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ "windows-sys 0.61.2", ] @@ -3568,9 +3706,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e910108742c57a770f492731f99be216a52fadd361b06c8fb59d74ccc267d2" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" dependencies = [ "dyn-clone", "ref-cast", @@ -3581,9 +3719,9 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4908ad288c5035a8eb12cfdf0d49270def0a268ee162b75eeee0f85d155a7c45" +checksum = "7d115b50f4aaeea07e79c1912f645c7513d81715d0420f8bc77a18c6260b307f" dependencies = [ "proc-macro2", "quote", @@ -3623,9 +3761,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.5.1" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ "bitflags", "core-foundation 0.10.1", @@ -3636,9 +3774,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.15.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -3646,9 +3784,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" @@ -3717,7 +3855,7 @@ version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ - "indexmap 2.13.0", + "indexmap 2.14.0", "itoa", "memchr", "serde", @@ -3747,9 +3885,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ "serde_core", ] @@ -3768,17 +3906,17 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.16.1" +version = "3.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" +checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.13.0", + "indexmap 2.14.0", "schemars 0.9.0", - "schemars 1.2.0", + "schemars 1.2.1", "serde_core", "serde_json", "serde_with_macros", @@ -3787,11 +3925,11 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.16.1" +version = "3.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" +checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65" dependencies = [ - "darling 0.21.3", + "darling", "proc-macro2", "quote", "syn", @@ -3803,7 +3941,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.13.0", + "indexmap 2.14.0", "itoa", "ryu", "serde", @@ -3827,8 +3965,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", - "cpufeatures", - "digest", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + +[[package]] +name = "sha1" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.2", ] [[package]] @@ -3844,8 +3993,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", - "digest", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.2", ] [[package]] @@ -3879,39 +4039,39 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest", + "digest 0.10.7", "rand_core 0.6.4", ] [[package]] name = "simd-adler32" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" [[package]] name = "simple_asn1" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" +checksum = "0d585997b0ac10be3c5ee635f1bab02d512760d14b7c468801ac8a01d9ae5f1d" dependencies = [ "num-bigint", "num-traits", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", ] [[package]] name = "siphasher" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slug" @@ -3941,12 +4101,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -3996,9 +4156,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.114" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -4027,9 +4187,9 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ "bitflags", "core-foundation 0.9.4", @@ -4078,7 +4238,7 @@ dependencies = [ "percent-encoding", "pest", "pest_derive", - "rand 0.8.5", + "rand 0.8.6", "regex", "serde", "serde_json", @@ -4097,11 +4257,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.17", + "thiserror-impl 2.0.18", ] [[package]] @@ -4117,9 +4277,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", @@ -4137,9 +4297,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.45" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9e442fc33d7fdb45aa9bfeb312c095964abdf596f7567261062b2a7107aaabd" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", @@ -4152,15 +4312,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b36ee98fd31ec7426d599183e8fe26932a8dc1fb76ddb6214d05493377d34ca" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.25" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e552d1249bf61ac2a52db88179fd0673def1e1ad8243a00d9ec9ed71fee3dd" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", @@ -4177,9 +4337,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", "zerovec", @@ -4187,9 +4347,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -4202,9 +4362,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.49.0" +version = "1.52.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" +checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6" dependencies = [ "bytes", "libc", @@ -4212,16 +4372,16 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.1", + "socket2 0.6.3", "tokio-macros", "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", @@ -4252,9 +4412,9 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" +checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c" dependencies = [ "futures-util", "log", @@ -4276,6 +4436,7 @@ dependencies = [ "futures-core", "futures-io", "futures-sink", + "futures-util", "pin-project-lite", "slab", "tokio", @@ -4283,11 +4444,11 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.11+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46" +checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" dependencies = [ - "indexmap 2.13.0", + "indexmap 2.14.0", "serde_core", "serde_spanned", "toml_datetime", @@ -4298,27 +4459,27 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.5+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ "serde_core", ] [[package]] name = "toml_parser" -version = "1.0.6+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ "winnow", ] [[package]] name = "toml_writer" -version = "1.0.6+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] name = "tower" @@ -4416,9 +4577,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.22" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ "nu-ansi-term", "sharded-slab", @@ -4436,22 +4597,21 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" +checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8" dependencies = [ "bytes", "data-encoding", "http 1.4.0", "httparse", "log", - "rand 0.9.2", + "rand 0.9.4", "rustls", "rustls-pki-types", - "sha1", - "thiserror 2.0.17", + "sha1 0.10.6", + "thiserror 2.0.18", "url", - "utf-8", ] [[package]] @@ -4476,9 +4636,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "ucd-trie" @@ -4500,9 +4660,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-normalization" @@ -4521,9 +4681,9 @@ checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" [[package]] name = "unicode-xid" @@ -4562,12 +4722,6 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -4584,11 +4738,11 @@ dependencies = [ [[package]] name = "uuid" -version = "1.19.0" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" +checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.2", "js-sys", "serde_core", "wasm-bindgen", @@ -4645,18 +4799,27 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.2+wasi-0.2.9" +version = "1.0.3+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.57.1", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen 0.51.0", ] [[package]] name = "wasm-bindgen" -version = "0.2.108" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" +checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" dependencies = [ "cfg-if", "once_cell", @@ -4667,23 +4830,19 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.58" +version = "0.4.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" +checksum = "f371d383f2fb139252e0bfac3b81b265689bf45b6874af544ffa4c975ac1ebf8" dependencies = [ - "cfg-if", - "futures-util", "js-sys", - "once_cell", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.108" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" +checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4691,9 +4850,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.108" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" +checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" dependencies = [ "bumpalo", "proc-macro2", @@ -4704,18 +4863,40 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.108" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" +checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap 2.14.0", + "wasm-encoder", + "wasmparser", +] + [[package]] name = "wasm-streams" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" dependencies = [ "futures-util", "js-sys", @@ -4724,11 +4905,23 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags", + "hashbrown 0.15.5", + "indexmap 2.14.0", + "semver", +] + [[package]] name = "web-sys" -version = "0.3.85" +version = "0.3.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" +checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d" dependencies = [ "js-sys", "wasm-bindgen", @@ -4746,18 +4939,18 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36a29fc0408b113f68cf32637857ab740edfafdf460c326cd2afaa2d84cc05dc" +checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" dependencies = [ "rustls-pki-types", ] [[package]] name = "webpki-roots" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12bed680863276c63889429bfd6cab3b99943659923822de1c8a39c49e4d722c" +checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" dependencies = [ "rustls-pki-types", ] @@ -4856,15 +5049,6 @@ dependencies = [ "windows-targets 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -4907,21 +5091,6 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -4961,12 +5130,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -4985,12 +5148,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -5009,12 +5166,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -5045,12 +5196,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -5069,12 +5214,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -5093,12 +5232,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -5117,12 +5250,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -5137,31 +5264,109 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.14" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" [[package]] -name = "winreg" -version = "0.50.0" +name = "wit-bindgen" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" dependencies = [ - "cfg-if", - "windows-sys 0.48.0", + "wit-bindgen-rust-macro", ] [[package]] name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "wit-bindgen-core" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck", + "indexmap 2.14.0", + "prettyplease", + "syn", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags", + "indexmap 2.14.0", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.14.0", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] [[package]] name = "writeable" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "wyz" @@ -5189,9 +5394,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -5200,9 +5405,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", @@ -5212,18 +5417,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.33" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.33" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" dependencies = [ "proc-macro2", "quote", @@ -5232,18 +5437,18 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", @@ -5273,9 +5478,9 @@ dependencies = [ [[package]] name = "zerotrie" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" dependencies = [ "displaydoc", "yoke", @@ -5284,9 +5489,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ "yoke", "zerofrom", @@ -5295,9 +5500,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", @@ -5306,9 +5511,9 @@ dependencies = [ [[package]] name = "zmij" -version = "1.0.15" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f63c051f4fe3c1509da62131a678643c5b6fbdc9273b2b79d4378ebda003d2" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" [[package]] name = "zstd" diff --git a/Cargo.toml b/Cargo.toml index 89f5a4a7..9ed97ac1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,11 +15,10 @@ kubernetes = ["dep:kube", "dep:k8s-openapi", "dep:schemars", "dep:either"] notebook = ["kubernetes"] openwebui = ["kubernetes"] lifecycle = ["notebook"] -chemchat = [] observe = [] mcp = [] moleviewer = [] -full = ["notebook", "lifecycle", "observe", "mcp", "openwebui", "chemchat"] +full = ["notebook", "lifecycle", "observe", "mcp", "openwebui"] [dependencies] # Async dep @@ -35,20 +34,20 @@ time = { version = "0.3.36", features = ["serde"] } parking_lot = "~0.12" num-bigint = "~0.4" # Web deps -actix-web = { version = "~4.12", features = ["rustls-0_23", "cookies"] } +actix-web = { version = "~4.13", features = ["rustls-0_23", "cookies"] } actix-web-httpauth = "0.8" actix-files = "0.6.6" tera = { version = "1.20.0", features= ["builtins"] } reqwest = { version = "0.13", features = ["stream", "json"] } url = "2.5.0" -toml = "0.9.0" +toml = "1.0.1" urlencoding = "2.1.3" -actix-ws = "0.3.0" -tokio-tungstenite = { version = "0.28", features = ["url", "rustls-tls-native-roots"] } +actix-ws = "0.4.0" +tokio-tungstenite = { version = "0.29", features = ["url", "rustls-tls-native-roots"] } # Auth deps rust-argon2 = "~3.0" -sha2 = "~0.10" -jsonwebtoken = { version = "=10.2.0", features = ["use_pem", "rust_crypto"] } +sha2 = "~0.11.0" +jsonwebtoken = { version = "=10.3.0", features = ["use_pem", "rust_crypto"] } openssl = "~0.10" tokio-rustls = "0.26" rustls = "0.23" @@ -64,12 +63,12 @@ regex = "~1.12" # Error handling thiserror = "2" # DB -mongodb = "=3.5" -redis = { version = "=1.0.2", features = ["tokio-comp", "num-bigint"] } +mongodb = "=3.6" +redis = { version = "=1.2.0", features = ["tokio-comp", "num-bigint"] } #macro utils = { path = "utils" } # Kubernetes -kube = { version = "~3.0", features = ["runtime", "derive"], optional = true } +kube = { version = "~3.1", features = ["runtime", "derive"], optional = true } k8s-openapi = { version = "0.27", features = ["latest"], optional = true } schemars = { version = "1.0", optional = true } either = { version = "1.13.0", optional = true } @@ -77,8 +76,8 @@ either = { version = "1.13.0", optional = true } mimalloc = "~0.1" # security base64 = "~0.22.1" -rand = "~0.9" -uuid = { version = "~1.19", features = ["v4"] } +rand = "~0.10" +uuid = { version = "~1.23", features = ["v4"] } [dev-dependencies] jsonwebkey = { version = "~0.4", features = ["jwt-convert"] } diff --git a/Dockerfile b/Dockerfile index 038aae06..eae64b11 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Stage 1 build -FROM rust:1.92.0 AS builder +FROM rust:1.95.0 AS builder WORKDIR /app @@ -10,7 +10,6 @@ ARG LIFECYCLE=false ARG OBSERVE=false ARG MCP=false ARG OWUI=false -ARG CHEMCHAT=false RUN <, pub observability_cred: Option<(String, String)>, - #[cfg(feature = "chemchat")] - pub chemchat_url: String, - #[cfg(feature = "chemchat")] - pub chemchat_internal_url: String, #[cfg(feature = "openwebui")] - pub owui_namespace: String, - #[cfg(feature = "openwebui")] - pub openweb_url: String, + pub owui: OwuiConfig, #[cfg(feature = "openwebui")] pub moleviewer_url: String, #[cfg(feature = "openwebui")] pub moleviewer_internal_url: String, pub bridge_url: String, + pub custom_resource_csp: HashMap, +} + +#[cfg(feature = "openwebui")] +pub struct OwuiConfig { + pub namespace: String, + pub service_port: u16, + pub url: String, + pub registry: String, + pub repository: String, + pub tag: String, + pub pull_policy: String, + pub env: Vec<(String, String)>, + pub persistence_size: String, + pub persistence_storage_class: String, } pub struct Database { @@ -169,6 +178,12 @@ pub fn init_once() -> Configuration { toml::from_str(&read_to_string(PathBuf::from_str(database_location_str).unwrap()).unwrap()) .unwrap(); + #[cfg(feature = "openwebui")] + let owui_table: toml::Table = toml::from_str( + &read_to_string(PathBuf::from_str("config/openwebui.toml").unwrap()).unwrap(), + ) + .unwrap(); + let mongo_table = db_table["mongodb"].as_table().unwrap(); let db = Database { url: if cfg!(debug_assertions) { @@ -236,11 +251,11 @@ pub fn init_once() -> Configuration { ) .unwrap(); + let bridge_url = app_conf["bridge_url"].as_str().unwrap().to_string(); + #[cfg(feature = "openwebui")] - let (owui_namespace, openweb_url, moleviewer_url, moleviewer_internal_url) = { + let (moleviewer_url, moleviewer_internal_url) = { ( - app_conf["owui_namespace"].as_str().unwrap().to_string(), - app_conf["openweb_url"].as_str().unwrap().to_string(), app_conf["moleviewer_url"].as_str().unwrap().to_string(), app_conf["moleviewer_internal_url"] .as_str() @@ -249,18 +264,46 @@ pub fn init_once() -> Configuration { ) }; - #[cfg(feature = "chemchat")] - let (chemchat_url, chemchat_internal_url) = { - ( - app_conf["chemchat_url"].as_str().unwrap().to_string(), - app_conf["chemchat_internal_url"] + #[cfg(feature = "openwebui")] + let owui = { + let owui_config = owui_table["openwebui"].as_table().unwrap(); + let image = owui_config["image"].as_table(); + let persistence = owui_config["persistence"].as_table(); + let env: Vec<_> = owui_config["env"] + .as_array() + .unwrap() + .iter() + .map(|item| { + let item = item.as_table().unwrap(); + let name = item.keys().next().unwrap(); + let value = item.values().next().unwrap(); + (name.to_string(), value.to_string()) + }) + .collect(); + + OwuiConfig { + namespace: owui_config["namespace"].as_str().unwrap().to_string(), + service_port: owui_config["service_port"].as_integer().unwrap() as u16, + url: owui_config["url"].as_str().unwrap().to_string(), + registry: image.unwrap()["registry"].as_str().unwrap().to_string(), + repository: image.unwrap()["repository"].as_str().unwrap().to_string(), + tag: image.unwrap()["tag"].as_str().unwrap().to_string(), + pull_policy: image.unwrap()["pull_policy"].as_str().unwrap().to_string(), + env, + persistence_size: persistence.unwrap()["size"].as_str().unwrap().to_string(), + persistence_storage_class: persistence.unwrap()["storage_class"] .as_str() .unwrap() .to_string(), - ) + } }; - let bridge_url = app_conf["bridge_url"].as_str().unwrap().to_string(); + let custom_resource_csp = conf_table["custom_resource_csp"] + .as_table() + .unwrap() + .into_iter() + .map(|s| (s.0.clone(), s.1.as_str().unwrap().into())) + .collect(); Configuration { encoder, @@ -280,19 +323,14 @@ pub fn init_once() -> Configuration { company, oidc: oidc_map, observability_cred, - #[cfg(feature = "chemchat")] - chemchat_url, - #[cfg(feature = "chemchat")] - chemchat_internal_url, - #[cfg(feature = "openwebui")] - owui_namespace, #[cfg(feature = "openwebui")] - openweb_url, + owui, #[cfg(feature = "openwebui")] moleviewer_url, #[cfg(feature = "openwebui")] moleviewer_internal_url, bridge_url, + custom_resource_csp, } } @@ -352,4 +390,16 @@ mod tests { assert!(!cred.1.is_empty()); assert!(cred.1.len() > 10); } + + #[test] + fn test_skip_csp_path() { + let config = init_once(); + let map = &config.custom_resource_csp; + + let scp = map.get("foo").unwrap(); + assert_eq!(scp, "bar"); + + let scp = map.get("baz").unwrap(); + assert_eq!(scp, "zap"); + } } diff --git a/src/db/models.rs b/src/db/models.rs index 12b25fbb..a1601c65 100644 --- a/src/db/models.rs +++ b/src/db/models.rs @@ -50,6 +50,8 @@ pub struct User { pub user_type: UserType, pub token: Option, pub notebook: Option, + #[cfg_attr(feature = "openwebui", serde(skip_serializing_if = "Option::is_none"))] + pub owui: Option, pub created_at: time::OffsetDateTime, pub updated_at: time::OffsetDateTime, pub last_updated_by: String, @@ -91,6 +93,19 @@ pub struct NotebookInfo { pub persist_pvc: bool, } +#[derive(Debug, Default, Deserialize, Serialize)] +pub struct OwuiInfo { + pub start_time: Option, + pub last_active: Option, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct UserOwui { + pub name: String, + pub start_time: String, + pub status: String, +} + #[derive(Debug, Deserialize, Serialize)] pub struct UserNotebook { pub name: String, diff --git a/src/db/mongo.rs b/src/db/mongo.rs index 699d6eac..52cb9e09 100644 --- a/src/db/mongo.rs +++ b/src/db/mongo.rs @@ -442,6 +442,7 @@ mod tests { user_type: UserType::SystemAdmin, token: None, notebook: None, + owui: None, created_at: time, updated_at: time, last_updated_by: "choi.mina@gmail.com".to_string(), diff --git a/src/errors/mod.rs b/src/errors/mod.rs index 90d6f98c..6da0fb0e 100644 --- a/src/errors/mod.rs +++ b/src/errors/mod.rs @@ -27,6 +27,8 @@ pub enum BridgeError { NotAdmin, #[error("{0}")] Unauthorized(String), + #[error("{0}")] + Forbidden(String), #[error("Inference-Service header not found")] InferenceServiceHeaderNotFound, #[error("Service {0} does does not exist")] @@ -184,6 +186,7 @@ impl ResponseError for BridgeError { BridgeError::UserNotFound(_) => StatusCode::FORBIDDEN, BridgeError::NotAdmin => StatusCode::FORBIDDEN, + BridgeError::Forbidden(_) => StatusCode::FORBIDDEN, #[cfg(feature = "notebook")] BridgeError::NotebookAccessError(_) => StatusCode::FORBIDDEN, diff --git a/src/kube/mod.rs b/src/kube/mod.rs index c365c6bb..29506395 100644 --- a/src/kube/mod.rs +++ b/src/kube/mod.rs @@ -12,4 +12,4 @@ pub use notebook::{ #[cfg(feature = "openwebui")] mod openwebui; #[cfg(feature = "openwebui")] -pub use openwebui::OWUI; +pub use openwebui::{Env, Image, OWUI, OpenWebUI, Owui, Persistence}; diff --git a/src/kube/models.rs b/src/kube/models.rs index 16e989b1..5aea52c7 100644 --- a/src/kube/models.rs +++ b/src/kube/models.rs @@ -48,6 +48,12 @@ where )) } + pub async fn get_crds(namespace: &str) -> Result> { + let crd = Api::::namespaced(Self::get_kube_client()?.clone(), namespace); + let list = crd.list(&Default::default()).await?; + Ok(list.items) + } + pub async fn create(&self, namespace: &str) -> Result { let crd = Api::::namespaced(Self::get_kube_client()?.clone(), namespace); let pp = PostParams::default(); diff --git a/src/kube/openwebui/mod.rs b/src/kube/openwebui/mod.rs index e09658d2..d98dc740 100644 --- a/src/kube/openwebui/mod.rs +++ b/src/kube/openwebui/mod.rs @@ -1,11 +1,102 @@ -#![allow(dead_code)] +use std::borrow::Cow; -use std::marker::PhantomData; +use kube::CustomResource; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; pub const OWUI: &str = "owui"; -// This is a placeholder for openwebui CRD -struct OpenWebUI { - _p: PhantomData<()>, - _id: uuid::Uuid, +#[derive(CustomResource, Clone, Deserialize, Serialize, Debug, JsonSchema)] +#[kube( + group = "accelerate.science", + version = "v1", + kind = "Owui", + namespaced +)] +pub struct OpenWebUI { + pub replica: u8, + #[serde(rename = "retainPVC")] + pub retain_pvc: bool, + #[serde(rename = "servicePort")] + pub service_port: u16, + pub image: Image, + pub persistence: Persistence, + pub env: Vec, +} + +#[derive(Clone, Deserialize, Serialize, Debug, JsonSchema)] +pub struct Image { + pub registry: Cow<'static, str>, + pub repository: Cow<'static, str>, + pub tag: Cow<'static, str>, + #[serde(rename = "pullPolicy")] + pub pull_policy: Cow<'static, str>, +} + +#[derive(Clone, Deserialize, Serialize, Debug, JsonSchema)] +pub struct Persistence { + pub size: Cow<'static, str>, + #[serde(rename = "storageClass")] + pub storage_class: Cow<'static, str>, +} + +#[derive(Clone, Deserialize, Serialize, Debug, JsonSchema)] +pub struct Env { + pub name: Cow<'static, str>, + pub value: Cow<'static, str>, +} + +#[cfg(test)] +mod test { + use std::borrow::Cow; + + // use crate::kube::KubeAPI; + + #[tokio::test] + async fn test_deserialize_owui() { + let owui = super::Owui { + spec: super::OpenWebUI { + replica: 1, + retain_pvc: false, + service_port: 8080, + image: super::Image { + registry: Cow::from("quay.io"), + repository: Cow::from("ibmdpdev/open-webui-spati"), + tag: Cow::from("latest"), + pull_policy: Cow::from("Always"), + }, + env: vec![ + super::Env { + name: Cow::from("MOLVIEWER_URL"), + value: Cow::from("moleviewer.open.accelerate.science"), + }, + super::Env { + name: Cow::from("WEBUI_SECRET_KEY"), + value: Cow::from("idontcarewhatthisisbecuasethisisrequiredforsomereason"), + }, + ], + persistence: super::Persistence { + size: Cow::from("2Gi"), + storage_class: Cow::from("gp3"), + }, + }, + metadata: kube::api::ObjectMeta { + name: Some("u67aceff11a66c1fa7c99726c-openwebui".to_string()), + namespace: Some("openwebui".to_string()), + ..Default::default() + }, + }; + // ensure that we can serialize the OpenWebUI struct to JSON + match serde_json::to_string_pretty(&owui) { + Ok(json) => println!("Successfully serialized OpenWebUI to JSON:\n{}", json), + Err(e) => panic!("Failed to serialize OpenWebUI to JSON: {}", e), + } + // rustls::crypto::ring::default_provider() + // .install_default() + // .expect("Cannot install default provider with ring"); + + // crate::kube::init_once().await; + // let k = KubeAPI::new(owui); + // k.create("openwebui").await.unwrap(); + } } diff --git a/src/web/bridge_middleware/security_cache_header.rs b/src/web/bridge_middleware/security_cache_header.rs index 044b253b..ae3ea72e 100644 --- a/src/web/bridge_middleware/security_cache_header.rs +++ b/src/web/bridge_middleware/security_cache_header.rs @@ -7,6 +7,8 @@ use actix_web::{ }; use futures::future::LocalBoxFuture; +use crate::config::CONFIG; + pub struct SecurityCacheHeader; impl Transform for SecurityCacheHeader @@ -43,17 +45,23 @@ where forward_ready!(service); fn call(&self, req: ServiceRequest) -> Self::Future { + let path = req.path(); + let crc = &CONFIG.custom_resource_csp; + // TODO: This is not the most robust way of doing this... improve this in later iterations + let custom_csp = crc.iter().find(|&v| path.contains(v.0)); + // add csp header let response = self.service.call(req); Box::pin(async move { let mut res = response.await?; let header = res.headers_mut(); - header.insert( - header::CONTENT_SECURITY_POLICY, - HeaderValue::from_str( - "default-src 'self'; img-src *; style-src 'self'; script-src 'self';", - )?, - ); + + let csp = match custom_csp { + Some(m) => m.1, + None => "default-src 'self'; img-src *; style-src 'self'; script-src 'self';", + }; + + header.insert(header::CONTENT_SECURITY_POLICY, HeaderValue::from_str(csp)?); header.insert(CACHE_CONTROL, HeaderValue::from_str("no-cache")?); // add HSTS header header.insert( diff --git a/src/web/helper.rs b/src/web/helper.rs index 9c7e0000..6285f60a 100644 --- a/src/web/helper.rs +++ b/src/web/helper.rs @@ -1,9 +1,7 @@ use actix_web::web; use base64::{Engine, prelude::BASE64_STANDARD}; -#[cfg(feature = "observe")] -use mongodb::bson; use mongodb::bson::{Bson, to_bson}; -use rand::{Rng, rng}; +use rand::{RngExt as _, rng}; use serde::Deserialize; use tera::Context; use tokio_stream::StreamExt; @@ -186,8 +184,8 @@ pub fn maintenance_watch() -> Result<()> { #[inline] pub fn generate_salt() -> String { - let mut rnd = rng(); - let salt: Vec = (0..32).map(|_| rnd.random()).collect(); + let mut rng = rng(); + let salt: Vec = (0..32).map(|_| rng.random()).collect(); BASE64_STANDARD.encode(&salt) } diff --git a/src/web/mod.rs b/src/web/mod.rs index 3b83794a..de429c02 100644 --- a/src/web/mod.rs +++ b/src/web/mod.rs @@ -146,7 +146,7 @@ pub async fn start_server(with_tls: bool) -> Result<()> { use self::bridge_middleware::{CookieCheck, OWUICookieCheck}; app.service( web::scope("") - .guard(guard::Host(&CONFIG.openweb_url)) + .guard(guard::Host(&CONFIG.owui.url)) .wrap(OWUICookieCheck) .configure(route::openwebui::config_openwebui), ) @@ -163,18 +163,6 @@ pub async fn start_server(with_tls: bool) -> Result<()> { // todo!(); // } - #[cfg(feature = "chemchat")] - let app = { - use self::bridge_middleware::CookieCheck; - - app.service( - web::scope("") - .guard(guard::Host(&CONFIG.chemchat_url)) - .wrap(CookieCheck) - .configure(route::chemchat::config_chemchat), - ) - }; - let app = app.service(actix_files::Files::new("/static", "static")); #[cfg(feature = "notebook")] @@ -193,6 +181,8 @@ pub async fn start_server(with_tls: bool) -> Result<()> { .configure(route::foo::config_foo); #[cfg(feature = "mcp")] let scope = scope.configure(route::mcp::config_mcp); + #[cfg(feature = "openwebui")] + let scope = scope.configure(route::openwebui::config_openwebui_manage); scope }) }); diff --git a/src/web/route/auth/mod.rs b/src/web/route/auth/mod.rs index 3d01c9bc..e47a7e23 100644 --- a/src/web/route/auth/mod.rs +++ b/src/web/route/auth/mod.rs @@ -181,6 +181,7 @@ async fn code_to_response( user_type: UserType::User, token: None, notebook: None, + owui: None, created_at: time, updated_at: time, last_updated_by: email, @@ -235,7 +236,7 @@ async fn code_to_response( // TODO: look into doing session management that stores a dynamic key into the cookie let cookie = Cookie::build(COOKIE_NAME, content) .same_site(SameSite::Strict) - .expires(time::OffsetDateTime::now_utc() + time::Duration::days(1)) + .max_age(time::Duration::days(1)) .domain(&CONFIG.bridge_url) .path("/") .http_only(true) diff --git a/src/web/route/chemchat/mod.rs b/src/web/route/chemchat/mod.rs deleted file mode 100644 index fa250f53..00000000 --- a/src/web/route/chemchat/mod.rs +++ /dev/null @@ -1,68 +0,0 @@ -use std::str::FromStr; - -use actix_web::{ - HttpRequest, HttpResponse, - dev::PeerAddr, - http::Method, - web::{self, ReqData}, -}; -use tracing::instrument; -use url::Url; - -use crate::{ - config::CONFIG, - db::models::BridgeCookie, - errors::{BridgeError, Result}, - web::{ - bridge_middleware::ResourceCookieCheck, - helper::{self, forwarding}, - }, -}; - -use super::resource::resource_http; - -// todo: move this to config -const CHEMCHAT_NAME: &str = "main-api"; - -#[instrument(skip(payload))] -async fn chemchat_forward( - req: HttpRequest, - payload: web::Payload, - method: Method, - peer_addr: Option, - bridge_cookie: Option>, - client: web::Data, -) -> Result { - bridge_cookie - .as_ref() - .and_then(|bc| bc.resources.as_ref()) - .filter(|resources| resources.iter().any(|r| r == CHEMCHAT_NAME)) - .ok_or_else(|| BridgeError::Unauthorized("Access denied to chemchat".to_string()))?; - - let mut url = Url::from_str(&CONFIG.chemchat_internal_url)?; - let path = req.path(); - url.set_path(path); - url.set_query(req.uri().query()); - - helper::forwarding::forward( - req, - payload, - method, - peer_addr, - client, - url, - forwarding::Config { - ..Default::default() - }, - ) - .await -} - -pub fn config_chemchat(cfg: &mut web::ServiceConfig) { - cfg.service( - web::scope("/resource") - .wrap(ResourceCookieCheck) - .default_service(web::to(resource_http)), - ); - cfg.service(web::scope("").default_service(web::to(chemchat_forward))); -} diff --git a/src/web/route/mod.rs b/src/web/route/mod.rs index f1b33649..473a2bea 100644 --- a/src/web/route/mod.rs +++ b/src/web/route/mod.rs @@ -20,8 +20,6 @@ pub mod mcp; pub mod notebook; #[cfg(feature = "openwebui")] pub mod openwebui; -#[cfg(feature = "chemchat")] -pub mod chemchat; pub mod portal; pub mod proxy; pub mod resource; diff --git a/src/web/route/notebook/mod.rs b/src/web/route/notebook/mod.rs index 42ad276c..56c63a34 100644 --- a/src/web/route/notebook/mod.rs +++ b/src/web/route/notebook/mod.rs @@ -371,6 +371,7 @@ async fn notebook_create( let bridge_cookie = Cookie::build(COOKIE_NAME, bridge_cookie_json) .path("/") .same_site(SameSite::Strict) + .domain(&CONFIG.bridge_url) .secure(true) .http_only(true) .max_age(time::Duration::days(1)) diff --git a/src/web/route/openwebui/mod.rs b/src/web/route/openwebui/mod.rs index 04d535d4..facd661a 100644 --- a/src/web/route/openwebui/mod.rs +++ b/src/web/route/openwebui/mod.rs @@ -1,25 +1,40 @@ -use std::{collections::HashSet, str::FromStr, sync::LazyLock}; +use std::{borrow::Cow, collections::HashSet, marker::PhantomData, str::FromStr, sync::LazyLock, time::Duration}; use actix_web::{ - HttpRequest, HttpResponse, + HttpRequest, HttpResponse, delete, dev::PeerAddr, get, - http::Method, + http::{Method, header::ContentType}, + post, web::{self, ReqData}, }; -use tracing::instrument; +use k8s_openapi::api::core::v1::PersistentVolumeClaim; +use kube::api::ObjectMeta; +use mongodb::bson::doc; +use tera::{Context, Tera}; +use tracing::{instrument, warn}; use url::Url; use crate::{ config::CONFIG, - db::models::OWUICookie, + db::{ + Database, + models::{BridgeCookie, OWUICookie, OwuiInfo, USER, User, UserOwui}, + mongo::{DB, ObjectID}, + }, errors::{BridgeError, Result}, - web::helper::{self, forwarding}, + kube::{Env, Image, KubeAPI, OpenWebUI, Owui, Persistence}, + web::{ + bridge_middleware::{CookieCheck, Htmx}, + bson, + helper::{self, forwarding, observability_post}, + }, }; const OWUI_PORT: &str = "8080"; +const PVC_DELETE_ATTEMPT: u8 = 9; -pub static OWUI_NAMESPACE: LazyLock<&str> = LazyLock::new(|| &CONFIG.owui_namespace); +pub static OWUI_NAMESPACE: LazyLock<&str> = LazyLock::new(|| &CONFIG.owui.namespace); static WHITELIST_ENDPOINTS: LazyLock> = LazyLock::new(|| { HashSet::from([ "/api/v1/auths", @@ -103,9 +118,295 @@ async fn openwebui_forward( .await } +#[post("/create")] +async fn create_owui( + req: HttpRequest, + owui_cookie: Option>, + bcookie: Option>, + db: web::Data<&DB>, + data: web::Data, + ctx: web::Data, +) -> Result { + if let Some(owui_cookie) = owui_cookie { + let subject = &owui_cookie.into_inner().subject; + let name = format!("u{}-openwebui", subject); + let pvc_name = format!("owui1-u{}-openwebui-0", subject); + + let user: User = helper::log_with_level!( + db.find( + doc! { + "_id": ObjectID::new(subject).into_inner(), + }, + USER, + ) + .await, + error + )?; + + // check if an instance alreadu exists + let list_owui = KubeAPI::::get_crds(&CONFIG.owui.namespace).await?; + if list_owui + .iter() + .any(|o| o.metadata.name.as_ref().unwrap_or(&"".to_string()) == &name) + { + return Err(BridgeError::CRDExistsError(format!( + "OWUI instance already exists for user {}", + name + ))); + } + + if req.query_string().contains("clear") { + helper::log_with_level!( + KubeAPI::::delete(&pvc_name, &CONFIG.owui.namespace).await, + error + )?; + + // PVC takes time to delete... loop and check it is gone + loop { + let mut loop_cnt = 0; + if KubeAPI::::check_pvc_exists( + &pvc_name, + &CONFIG.owui.namespace, + ) + .await? + { + tokio::time::sleep(Duration::from_secs(2)).await; + loop_cnt += 1; + } else { + break; + } + + if loop_cnt > PVC_DELETE_ATTEMPT { + let apx_time_elapsed = PVC_DELETE_ATTEMPT * loop_cnt; + warn!( + "PVC {} not deleted after {} seconds", + pvc_name, apx_time_elapsed + ); + return Err(BridgeError::GeneralError( + "PVC not deleted after extended period of time".to_string(), + )); + } + } + } + + // let persist = req + // .uri() + // .query() + // .map(|q| q.contains("persist=true")) + // .unwrap_or(false); + + // create instance + let owui = Owui { + metadata: ObjectMeta { + name: Some(name), + namespace: Some(CONFIG.owui.namespace.clone()), + ..Default::default() + }, + spec: OpenWebUI { + replica: 1, // TODO: this needs to be removed from the operator.., for now set to 1 + retain_pvc: true, + service_port: CONFIG.owui.service_port, + image: Image { + registry: Cow::from(&CONFIG.owui.registry), + repository: Cow::from(&CONFIG.owui.repository), + tag: Cow::from(&CONFIG.owui.tag), + pull_policy: Cow::from(&CONFIG.owui.pull_policy), + }, + persistence: Persistence { + size: Cow::from(&CONFIG.owui.persistence_size), + storage_class: Cow::from(&CONFIG.owui.persistence_storage_class), + }, + env: CONFIG + .owui + .env + .iter() + .map(|kv| Env { + name: Cow::from(kv.0.trim_matches('"')), + value: Cow::from(kv.1.trim_matches('"')), + }) + .collect(), + }, + }; + if let Err(e) = KubeAPI::new(owui).create(&CONFIG.owui.namespace).await { + return helper::log_with_level!( + Err(BridgeError::GeneralError(format!( + "Failed to create OWUI instance: {e}" + ))), + error + ); + } + + // update DB with instance information + let current_time = time::OffsetDateTime::now_utc(); + let _r = db + .update( + doc! { + "_id": ObjectID::new(subject).into_inner(), + }, + doc! { + "$set": doc! { + "updated_at": bson(current_time)?, + "owui": bson(OwuiInfo{ + start_time: Some(current_time), + last_active: None, + })?, + "last_updated_by": &user.sub, + }, + }, + USER, + PhantomData::, + ) + .await?; + + if let Some(bc) = bcookie { + observability_post("owui instance has been created", &bc); + } + + let context = data.render("components/owui/poll.html", &ctx)?; + return Ok(HttpResponse::Ok() + .content_type(ContentType::form_url_encoded()) + .body(context)); + } + helper::log_with_level!( + Err(BridgeError::Forbidden( + "User does not have access to OWUI... middleware should have prevented this" + .to_string() + )), + error + ) +} + +#[delete("delete")] +async fn delete_owui( + req: HttpRequest, + // payload: web::Payload, + // method: Method, + // peer_addr: Option, + owui_cookie: Option>, + bcookie: Option>, + db: web::Data<&DB>, + data: web::Data, + ctx: web::Data, +) -> Result { + if let Some(owui_cookie) = owui_cookie { + let subject = &owui_cookie.into_inner().subject; + let name = format!("u{}-openwebui", subject); + let pvc_name = format!("owui1-u{}-openwebui-0", subject); + + let mut ctx = (**ctx).clone(); + + let persist_pvc = req.query_string().contains("save"); + + if persist_pvc { + ctx.insert("pvc_exists_owui", &persist_pvc); + } + + helper::log_with_level!( + KubeAPI::::delete(&name, &CONFIG.owui.namespace).await, + error + )?; + + if !persist_pvc { + // don't stop due to error here so we can remove the rest + let _ = helper::log_with_level!( + KubeAPI::::delete(&pvc_name, &CONFIG.owui.namespace).await, + error + ); + } + + let current_time = time::OffsetDateTime::now_utc(); + let _r = db + .update( + doc! { + "_id": ObjectID::new(subject).into_inner(), + }, + doc! { + "$set": doc! { + "updated_at": bson(current_time)?, + "owui": null, + }, + }, + USER, + PhantomData::, + ) + .await?; + + if let Some(bc) = bcookie { + observability_post("owui instance has been deleted", &bc); + } + + ctx.insert("cooloff", &true); + let context = data.render("components/owui/start.html", &ctx)?; + + return Ok(HttpResponse::Ok() + .content_type(ContentType::form_url_encoded()) + .body(context)); + } + helper::log_with_level!( + Err(BridgeError::Forbidden( + "User does not have access to OWUI... middleware should have prevented this" + .to_string() + )), + error + ) +} + +#[get("status")] +async fn status_owui( + owui_cookie: Option>, + data: web::Data, + ctx: web::Data, + client: web::Data, +) -> Result { + if let Some(owui_cookie) = owui_cookie { + let subject = &owui_cookie.into_inner().subject; + let url = make_forward_url("http", subject); + + if !client.get(url).send().await?.status().is_success() { + return Ok(HttpResponse::ServiceUnavailable().finish()); + } + + let mut ctx = (**ctx).clone(); + + ctx.insert("owui_subject", subject); + ctx.insert("owui_url", &CONFIG.owui.url); + let content = data.render("components/owui/ready.html", &ctx)?; + + return Ok(HttpResponse::Ok() + .content_type(ContentType::form_url_encoded()) + .body(content)); + } + helper::log_with_level!( + Err(BridgeError::Forbidden( + "User does not have access to OWUI... middleware should have prevented this" + .to_string() + )), + error + ) +} + +impl From<&User> for UserOwui { + fn from(value: &User) -> Self { + Self { + start_time: value + .owui + .as_ref() + .map(|v| v.start_time.unwrap_or(time::OffsetDateTime::now_utc())) + .map(|v| v.to_string()) + .unwrap_or_default(), + name: value.sub.to_owned(), + status: "Pending".to_string(), + } + } +} + #[inline] pub(crate) fn make_forward_url(protocol: &str, subject: &str) -> String { let namespace = *OWUI_NAMESPACE; + // if in dev mode + // if cfg!(debug_assertions) { + // return format!("{protocol}://0.0.0.0:{OWUI_PORT}"); + // } format!("{protocol}://u{subject}-openwebui.{namespace}.svc.cluster.local:{OWUI_PORT}") } @@ -114,6 +415,17 @@ pub fn config_openwebui(cfg: &mut web::ServiceConfig) { .default_service(web::to(openwebui_forward)); } +pub fn config_openwebui_manage(cfg: &mut web::ServiceConfig) { + cfg.service( + web::scope("/owui_manage/hx") + .wrap(CookieCheck) + .wrap(Htmx) + .service(create_owui) + .service(delete_owui) + .service(status_owui), + ); +} + #[cfg(test)] mod tests { #[test] @@ -125,9 +437,6 @@ mod tests { let port = "8080"; let expected_url = format!("{protocol}://u{subject}-openwebui.{namespace}.svc.cluster.local:{port}"); - assert_eq!( - super::make_forward_url(protocol, subject), - expected_url - ); + assert_eq!(super::make_forward_url(protocol, subject), expected_url); } } diff --git a/src/web/route/portal/group_admin/mod.rs b/src/web/route/portal/group_admin/mod.rs index e0e59903..e8dbd411 100644 --- a/src/web/route/portal/group_admin/mod.rs +++ b/src/web/route/portal/group_admin/mod.rs @@ -130,9 +130,14 @@ pub(super) async fn group( #[cfg(feature = "openwebui")] if let Some(owui_cookie) = oc { use crate::config::CONFIG; + use crate::web::route::portal::helper::owui_bookkeeping; - ctx.insert("openwebui", &owui_cookie.subject); - ctx.insert("owui_url", &CONFIG.openweb_url); + let (owui, pvc_exists) = owui_bookkeeping(&user).await; + + ctx.insert("owui_subject", &owui_cookie.subject); + ctx.insert("owui_url", &CONFIG.owui.url); + ctx.insert("pvc_exists_owui", &pvc_exists); + ctx.insert("owui", &owui); } // add notebook tab if user has a notebook subscription diff --git a/src/web/route/portal/helper.rs b/src/web/route/portal/helper.rs index d4ac0903..240234e9 100644 --- a/src/web/route/portal/helper.rs +++ b/src/web/route/portal/helper.rs @@ -3,10 +3,14 @@ use std::{any::Any, ops::Deref}; #[cfg(feature = "notebook")] use actix_web::cookie::{Cookie, SameSite}; use actix_web::web::ReqData; +#[cfg(feature = "openwebui")] +use k8s_openapi::api::core::v1::PersistentVolumeClaim; use mongodb::bson::doc; #[cfg(feature = "notebook")] use tera::Context; +#[cfg(feature = "openwebui")] +use crate::{config::CONFIG, db::models::UserOwui, kube::Owui}; use crate::{ db::{ Database, @@ -84,6 +88,57 @@ where }) } +#[cfg(feature = "openwebui")] +pub(super) async fn owui_bookkeeping(user: &User) -> (Option, bool) { + let id = user._id.to_string(); + let name = format!("u{}-openwebui", &id); + let pod_name = format!("u{}-openwebui-0", id); + let pvc_name = format!("owui1-u{}-openwebui-0", id); + + let pvc_exists = + KubeAPI::::check_pvc_exists(&pvc_name, &CONFIG.owui.namespace) + .await + .unwrap_or_default(); + + match KubeAPI::::get_crds(&CONFIG.owui.namespace).await { + Ok(list) => { + // find the Owui that match name with metaname + if !list + .iter() + .any(|owui| owui.metadata.name.as_ref().unwrap_or(&"".to_string()) == &name) + { + return (None, pvc_exists); + } + } + Err(_e) => return (None, pvc_exists), + } + + match KubeAPI::::check_pod_running(&pod_name, &CONFIG.owui.namespace).await { + Ok(running) => { + let state = if running { + "Ready".to_string() + } else { + "Pending".to_string() + }; + + ( + Some(UserOwui { + name, + start_time: user + .owui + .as_ref() + .map(|v| v.start_time.unwrap_or(time::OffsetDateTime::now_utc())) + .map(|v| v.to_string()) + .unwrap_or_default(), + status: state, + }), + pvc_exists, + ) + } + Err(_e) => (None, pvc_exists), + } +} + #[cfg(feature = "notebook")] /// This is a helper function that takes care of the notebook setup for all users /// Is the user does not have access to notebooks, None is returned diff --git a/src/web/route/portal/system_admin/mod.rs b/src/web/route/portal/system_admin/mod.rs index 9fed4aaa..e33082dd 100644 --- a/src/web/route/portal/system_admin/mod.rs +++ b/src/web/route/portal/system_admin/mod.rs @@ -135,9 +135,14 @@ pub(super) async fn system( #[cfg(feature = "openwebui")] if let Some(owui_cookie) = oc { use crate::config::CONFIG; + use crate::web::route::portal::helper::owui_bookkeeping; - ctx.insert("openwebui", &owui_cookie.subject); - ctx.insert("owui_url", &CONFIG.openweb_url); + let (owui, pvc_exists) = owui_bookkeeping(&user).await; + + ctx.insert("owui_subject", &owui_cookie.subject); + ctx.insert("owui_url", &CONFIG.owui.url); + ctx.insert("pvc_exists_owui", &pvc_exists); + ctx.insert("owui", &owui); } // add notebook tab if user has a notebook subscription diff --git a/src/web/route/portal/user_htmx.rs b/src/web/route/portal/user_htmx.rs index cd236d54..0a71b204 100644 --- a/src/web/route/portal/user_htmx.rs +++ b/src/web/route/portal/user_htmx.rs @@ -92,9 +92,14 @@ impl<'p> Profile<'p> { #[cfg(feature = "openwebui")] if let Some(owui_cookie) = oc { use crate::config::CONFIG; + use crate::web::route::portal::helper::owui_bookkeeping; - context.insert("openwebui", &owui_cookie.subject); - context.insert("owui_url", &CONFIG.openweb_url); + let (owui, pvc_exists) = owui_bookkeeping(self.user).await; + + context.insert("owui_subject", &owui_cookie.subject); + context.insert("owui_url", &CONFIG.owui.url); + context.insert("pvc_exists_owui", &pvc_exists); + context.insert("owui", &owui); } #[cfg(feature = "notebook")] diff --git a/templates/components/owui/owui.html b/templates/components/owui/owui.html index 2cce013f..8e120af8 100644 --- a/templates/components/owui/owui.html +++ b/templates/components/owui/owui.html @@ -3,16 +3,16 @@ hx-ext='response-targets'>

Your Open Web UI

-

You currently have a owui running.

- + {% if not owui %} + {# No owui up #} + {% include 'components/owui/start.html' %} + {% else %} + {% if owui.status == "Ready" %} + {% include 'components/owui/ready.html' %} + {% else %} + {% include 'components/owui/poll.html' %} + {% endif %} + {% endif %}
diff --git a/templates/components/owui/poll.html b/templates/components/owui/poll.html new file mode 100644 index 00000000..ca3a7d0e --- /dev/null +++ b/templates/components/owui/poll.html @@ -0,0 +1,7 @@ +
+

Your instance is starting please wait...

+
+
+
+
diff --git a/templates/components/owui/ready.html b/templates/components/owui/ready.html new file mode 100644 index 00000000..75953b4d --- /dev/null +++ b/templates/components/owui/ready.html @@ -0,0 +1,22 @@ +

You currently have an instance running.

+ diff --git a/templates/components/owui/start.html b/templates/components/owui/start.html new file mode 100644 index 00000000..9764badc --- /dev/null +++ b/templates/components/owui/start.html @@ -0,0 +1,65 @@ +{% set launch_icon = '' %} + +

You currently do not have an instance running.

+ diff --git a/templates/pages/nav_base.html b/templates/pages/nav_base.html index 91071d58..729f56cd 100644 --- a/templates/pages/nav_base.html +++ b/templates/pages/nav_base.html @@ -123,7 +123,7 @@ {% endif %} - {% if openwebui %} + {% if owui_subject %}
Notebook {% endif %} - {% if openwebui %} + {% if owui_subject %} Open Web UI {% endif %} {% if user_type == "system" %} diff --git a/templates/pages/portal_user.html b/templates/pages/portal_user.html index 7c256c71..85a0316c 100644 --- a/templates/pages/portal_user.html +++ b/templates/pages/portal_user.html @@ -25,7 +25,7 @@
{% endif %} -{% if openwebui %} +{% if owui_subject %}