diff --git a/.editorconfig b/.editorconfig index b4b1641f..94b3660e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,15 +4,16 @@ root = true [*] charset = utf-8 indent_style = space -indent_size = 2 +indent_size = 4 end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true max_line_length = 100 [*.md] +indent_size = 2 max_line_length = off trim_trailing_whitespace = false -[*.{rs,java,kts}] -indent_size = 4 +[*.{json,yml,yaml,ts,vue,scss,css,html,js,cjs,mjs,gltf,prettierrc}] +indent_size = 2 diff --git a/Cargo.lock b/Cargo.lock index be2b8d17..37af3231 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -386,9 +386,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -416,22 +416,22 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -526,7 +526,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -583,7 +583,7 @@ dependencies = [ "async-task", "concurrent-queue", "fastrand 2.3.0", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "pin-project-lite", "slab", ] @@ -596,7 +596,7 @@ checksum = "09f7e37c0ed80b2a977691c47dae8625cfb21e205827106c64f7c588766b2e50" dependencies = [ "async-lock", "blocking", - "futures-lite 2.6.0", + "futures-lite 2.6.1", ] [[package]] @@ -609,7 +609,7 @@ dependencies = [ "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "parking", "polling", "rustix 1.0.8", @@ -619,11 +619,11 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "event-listener-strategy", "pin-project-lite", ] @@ -641,8 +641,8 @@ dependencies = [ "async-task", "blocking", "cfg-if", - "event-listener 5.4.0", - "futures-lite 2.6.0", + "event-listener 5.4.1", + "futures-lite 2.6.1", "rustix 1.0.8", ] @@ -740,9 +740,9 @@ dependencies = [ [[package]] name = "async-tungstenite" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef0f7efedeac57d9b26170f72965ecfd31473ca52ca7a64e925b0b6f5f079886" +checksum = "e308e9866b891743e3fdf9dfd6b57f85c5062ca01ce4fed6f393e76eb5accea4" dependencies = [ "atomic-waker", "futures-core", @@ -755,7 +755,7 @@ dependencies = [ "tokio", "tokio-rustls 0.26.2", "tungstenite", - "webpki-roots 0.26.11", + "webpki-roots 1.0.2", ] [[package]] @@ -765,7 +765,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37672978ae0febce7516ae0a85b53e6185159a9a28787391eb63fc44ec36037d" dependencies = [ "async-fs", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "thiserror 2.0.12", ] @@ -778,7 +778,7 @@ dependencies = [ "async-compression", "chrono", "crc32fast", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "pin-project", "thiserror 1.0.69", "tokio", @@ -831,7 +831,7 @@ checksum = "07a9b245ba0739fc90935094c29adbaee3f977218b5fb95e822e261cda7f56a3" dependencies = [ "http 1.3.1", "log", - "rustls 0.23.29", + "rustls 0.23.31", "serde", "serde_json", "url", @@ -1090,7 +1090,7 @@ dependencies = [ "async-channel 2.5.0", "async-task", "futures-io", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "piper", ] @@ -1183,9 +1183,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.23.1" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" [[package]] name = "byteorder" @@ -1253,9 +1253,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +checksum = "5d07aa9a93b00c76f71bc35d598bed923f6d4f3a9ca5c24b7737ae1a292841c0" dependencies = [ "serde", ] @@ -1290,14 +1290,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" dependencies = [ "serde", - "toml 0.9.2", + "toml 0.9.5", ] [[package]] name = "cc" -version = "1.2.30" +version = "1.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" +checksum = "2352e5597e9c544d5e6d9c95190d5d27738ade584fa8db0a16e130e5c2b5296e" dependencies = [ "jobserver", "libc", @@ -1396,9 +1396,9 @@ checksum = "93a719913643003b84bd13022b4b7e703c09342cd03b679c4641c7d2e50dc34d" [[package]] name = "clap" -version = "4.5.41" +version = "4.5.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" +checksum = "50fd97c9dc2399518aa331917ac6f274280ec5eb34e555dd291899745c48ec6f" dependencies = [ "clap_builder", "clap_derive", @@ -1406,9 +1406,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.41" +version = "4.5.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" +checksum = "c35b5830294e1fa0462034af85cc95225a4cb07092c088c55bda3147cfcd8f65" dependencies = [ "anstream", "anstyle", @@ -1519,15 +1519,15 @@ dependencies = [ [[package]] name = "console" -version = "0.15.11" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" +checksum = "2e09ced7ebbccb63b4c65413d821f2e00ce54c5ca4514ddc6b3c892fdbcbc69d" dependencies = [ "encode_unicode", "libc", "once_cell", "unicode-width 0.2.1", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -1609,9 +1609,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "convert_case" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" dependencies = [ "unicode-segmentation", ] @@ -1985,9 +1985,9 @@ dependencies = [ [[package]] name = "deadpool-redis" -version = "0.21.1" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "667d186d69c8b4dd7f8cf1ac71bec88b312e1752f2d1a63028aa9ea124c3f191" +checksum = "c0965b977f1244bc3783bb27cd79cfcff335a8341da18f79232d00504b18eb1a" dependencies = [ "deadpool", "redis", @@ -2154,7 +2154,7 @@ checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", - "redox_users 0.5.0", + "redox_users 0.5.2", "windows-sys 0.60.2", ] @@ -2383,7 +2383,7 @@ dependencies = [ "cc", "memchr", "rustc_version", - "toml 0.9.2", + "toml 0.9.5", "vswhom", "winreg 0.55.0", ] @@ -2560,9 +2560,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", @@ -2575,7 +2575,7 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "pin-project-lite", ] @@ -2861,9 +2861,9 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "fastrand 2.3.0", "futures-core", @@ -3290,9 +3290,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", @@ -3344,9 +3344,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", @@ -3359,7 +3359,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -3629,7 +3629,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.11", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "httparse", @@ -3666,7 +3666,7 @@ dependencies = [ "http 1.3.1", "hyper 1.6.0", "hyper-util", - "rustls 0.23.29", + "rustls 0.23.31", "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", @@ -3924,20 +3924,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "serde", ] [[package]] name = "indicatif" -version = "0.17.11" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" +checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" dependencies = [ "console", - "number_prefix", "portable-atomic", "unicode-width 0.2.1", + "unit-prefix", "web-time", ] @@ -4166,15 +4166,15 @@ dependencies = [ [[package]] name = "jemalloc_pprof" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5622af6d21ff86ed7797ef98e11b8f302da25ec69a7db9f6cde8e2e1c8df9992" +checksum = "74ff642505c7ce8d31c0d43ec0e235c6fd4585d9b8172d8f9dd04d36590200b5" dependencies = [ "anyhow", "libc", "mappings", "once_cell", - "pprof_util 0.7.0", + "pprof_util", "tempfile", "tikv-jemalloc-ctl", "tokio", @@ -4455,7 +4455,7 @@ dependencies = [ "nom 8.0.0", "percent-encoding", "quoted_printable", - "rustls 0.23.29", + "rustls 0.23.31", "rustls-native-certs 0.8.1", "socket2 0.6.0", "tokio", @@ -4488,9 +4488,9 @@ dependencies = [ [[package]] name = "libbz2-rs-sys" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775bf80d5878ab7c2b1080b5351a48b2f737d9f6f8b383574eebcc22be0dfccb" +checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" @@ -4536,9 +4536,9 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360e552c93fa0e8152ab463bc4c4837fce76a225df11dfaeea66c313de5e61f7" +checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ "bitflags 2.9.1", "libc", @@ -4681,7 +4681,7 @@ dependencies = [ "anyhow", "libc", "once_cell", - "pprof_util 0.8.0", + "pprof_util", "tracing", ] @@ -4783,11 +4783,11 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "meilisearch-index-setting-macro" -version = "0.28.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420f67f5943a0236eea7f199720cc465e806c48978d9b0fdc1fb62eceaee7556" +checksum = "14a9c03a7c7c9c2b6396bf824b7e9181feb242aafaddf43dede6ccff0ab8b229" dependencies = [ - "convert_case 0.6.0", + "convert_case 0.8.0", "proc-macro2", "quote", "structmeta", @@ -4796,9 +4796,9 @@ dependencies = [ [[package]] name = "meilisearch-sdk" -version = "0.28.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2325355c73c96667178c09675389cfa7afc2382d5aa0e0d34d0cf29793d89090" +checksum = "b4bde2e2d304697ec15ec6475d2f299e73bb24347ab1d356de8709a83e3bf6f3" dependencies = [ "async-trait", "bytes", @@ -4813,7 +4813,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror 2.0.12", "time", "uuid 1.17.0", "wasm-bindgen-futures", @@ -4916,9 +4916,9 @@ dependencies = [ [[package]] name = "muda" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58b89bf91c19bf036347f1ab85a81c560f08c0667c8601bece664d860a600988" +checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" dependencies = [ "crossbeam-channel", "dpi", @@ -4932,7 +4932,7 @@ dependencies = [ "png", "serde", "thiserror 2.0.12", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -5053,9 +5053,9 @@ checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" [[package]] name = "notify" -version = "8.1.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3163f59cd3fa0e9ef8c32f242966a7b9994fd7378366099593e0e73077cd8c97" +checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ "bitflags 2.9.1", "fsevent-sys", @@ -5071,9 +5071,9 @@ dependencies = [ [[package]] name = "notify-debouncer-mini" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a689eb4262184d9a1727f9087cd03883ea716682ab03ed24efec57d7716dccb8" +checksum = "17849edfaabd9a5fef1c606d99cfc615a8e99f7ac4366406d86c7942a3184cf2" dependencies = [ "log", "notify", @@ -5256,12 +5256,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - [[package]] name = "objc-sys" version = "0.3.5" @@ -5980,7 +5974,7 @@ checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1" dependencies = [ "base64 0.22.1", "indexmap 2.10.0", - "quick-xml 0.38.0", + "quick-xml 0.38.1", "serde", "time", ] @@ -6000,9 +5994,9 @@ dependencies = [ [[package]] name = "polling" -version = "3.9.0" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7" +checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829" dependencies = [ "cfg-if", "concurrent-queue", @@ -6033,21 +6027,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" -[[package]] -name = "pprof_util" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa015c78eed2130951e22c58d2095849391e73817ab2e74f71b0b9f63dd8416" -dependencies = [ - "anyhow", - "backtrace", - "flate2", - "inferno", - "num", - "paste", - "prost", -] - [[package]] name = "pprof_util" version = "0.8.0" @@ -6055,7 +6034,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9aba4251d95ac86f14c33e688d57a9344bfcff29e9b0c5a063fc66b5facc8a1" dependencies = [ "anyhow", + "backtrace", "flate2", + "inferno", "num", "paste", "prost", @@ -6400,16 +6381,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" dependencies = [ "memchr", - "tokio", ] [[package]] name = "quick-xml" -version = "0.38.0" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8927b0664f5c5a98265138b7e3f90aa19a6b21353182469ace36d4ac527b7b1b" +checksum = "9845d9dccf565065824e69f9f235fafba1587031eda353c1f1561cd6a6be78f4" dependencies = [ "memchr", + "tokio", ] [[package]] @@ -6424,7 +6405,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.29", + "rustls 0.23.31", "socket2 0.5.10", "thiserror 2.0.12", "tokio", @@ -6444,7 +6425,7 @@ dependencies = [ "rand 0.9.2", "ring", "rustc-hash", - "rustls 0.23.29", + "rustls 0.23.31", "rustls-pki-types", "slab", "thiserror 2.0.12", @@ -6693,9 +6674,9 @@ dependencies = [ [[package]] name = "redis" -version = "0.31.0" +version = "0.32.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bc1ea653e0b2e097db3ebb5b7f678be339620b8041f66b30a308c1d45d36a7f" +checksum = "7cd3650deebc68526b304898b192fa4102a4ef0b9ada24da096559cb60e0eef8" dependencies = [ "ahash 0.8.12", "bytes", @@ -6709,7 +6690,7 @@ dependencies = [ "r2d2", "ryu", "sha1_smol", - "socket2 0.5.10", + "socket2 0.6.0", "tokio", "tokio-util", "url", @@ -6737,9 +6718,9 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", @@ -6846,7 +6827,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.4.11", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "http-body-util", @@ -6860,7 +6841,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.29", + "rustls 0.23.31", "rustls-native-certs 0.8.1", "rustls-pki-types", "serde", @@ -7147,9 +7128,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.29" +version = "0.23.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" +checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" dependencies = [ "log", "once_cell", @@ -7181,7 +7162,7 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.2.0", + "security-framework 3.3.0", ] [[package]] @@ -7235,9 +7216,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rusty-money" @@ -7418,9 +7399,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" dependencies = [ "bitflags 2.9.1", "core-foundation 0.10.1", @@ -7468,13 +7449,13 @@ dependencies = [ [[package]] name = "sentry" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507ac2be9bf2da56c831da57faf1dadd81f434bd282935cdb06193d0c94e8811" +checksum = "989425268ab5c011e06400187eed6c298272f8ef913e49fcadc3fda788b45030" dependencies = [ "httpdate", "reqwest", - "rustls 0.23.29", + "rustls 0.23.31", "sentry-backtrace", "sentry-contexts", "sentry-core", @@ -7487,9 +7468,9 @@ dependencies = [ [[package]] name = "sentry-actix" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8402c142005ee560ae361c73ebece13a299ec3e9cce5b8654479ea9aac8dc8df" +checksum = "a5c675bdf6118764a8e265c3395c311b4d905d12866c92df52870c0223d2ffc1" dependencies = [ "actix-http", "actix-web", @@ -7500,9 +7481,9 @@ dependencies = [ [[package]] name = "sentry-backtrace" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb4416302fa5325181a120e0fe7d4afd83cd95e52a9b86afa34a8161383fe0dc" +checksum = "68e299dd3f7bcf676875eee852c9941e1d08278a743c32ca528e2debf846a653" dependencies = [ "backtrace", "regex", @@ -7511,9 +7492,9 @@ dependencies = [ [[package]] name = "sentry-contexts" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936752f42b6f651dcb257da0bfa235ecc79e82011c49ed3383c212cc582263ff" +checksum = "fac0c5d6892cd4c414492fc957477b620026fb3411fca9fa12774831da561c88" dependencies = [ "hostname", "libc", @@ -7525,21 +7506,22 @@ dependencies = [ [[package]] name = "sentry-core" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e9bd2cadaeda3af41e9fa5d14645127d6f6a4aec73da3ae38e477ecafd3682" +checksum = "deaa38b94e70820ff3f1f9db3c8b0aef053b667be130f618e615e0ff2492cbcc" dependencies = [ "rand 0.9.2", "sentry-types", "serde", "serde_json", + "url", ] [[package]] name = "sentry-debug-images" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e074fe9a0970c91999b23ed3195e6e30990d589fba3a68f20a1686af0f5cda" +checksum = "00950648aa0d371c7f57057434ad5671bd4c106390df7e7284739330786a01b6" dependencies = [ "findshlibs", "sentry-core", @@ -7547,9 +7529,9 @@ dependencies = [ [[package]] name = "sentry-panic" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4651d34f3ba649d9e6dc1268443cae6728b8f741c2f0264004f8ecf5b247330d" +checksum = "2b7a23b13c004873de3ce7db86eb0f59fe4adfc655a31f7bbc17fd10bacc9bfe" dependencies = [ "sentry-backtrace", "sentry-core", @@ -7557,9 +7539,9 @@ dependencies = [ [[package]] name = "sentry-tracing" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c25c47d36bc80c74d26d568ffe970c37b337c061b7234ad6f2d159439c16f000" +checksum = "fac841c7050aa73fc2bec8f7d8e9cb1159af0b3095757b99820823f3e54e5080" dependencies = [ "bitflags 2.9.1", "sentry-backtrace", @@ -7570,9 +7552,9 @@ dependencies = [ [[package]] name = "sentry-types" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08e7154abe2cd557f26fd70038452810748aefdf39bc973f674421224b147c1" +checksum = "e477f4d4db08ddb4ab553717a8d3a511bc9e81dde0c808c680feacbb8105c412" dependencies = [ "debugid", "hex", @@ -7671,9 +7653,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.141" +version = "1.0.142" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" +checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" dependencies = [ "itoa", "memchr", @@ -7884,9 +7866,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -7936,9 +7918,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "smallvec" @@ -8101,12 +8083,12 @@ dependencies = [ "crc", "crossbeam-queue", "either", - "event-listener 5.4.0", + "event-listener 5.4.1", "futures-core", "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "hashlink", "indexmap 2.10.0", "log", @@ -8114,7 +8096,7 @@ dependencies = [ "once_cell", "percent-encoding", "rust_decimal", - "rustls 0.23.29", + "rustls 0.23.31", "serde", "serde_json", "sha2", @@ -8449,9 +8431,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.35.2" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3ffa3e4ff2b324a57f7aeb3c349656c7b127c3c189520251a648102a92496e" +checksum = "252800745060e7b9ffb7b2badbd8b31cfa4aa2e61af879d0a3bf2a317c20217d" dependencies = [ "libc", "memchr", @@ -8982,13 +8964,12 @@ dependencies = [ [[package]] name = "tauri-winres" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d321dbc6f998d825ab3f0d62673e810c861aac2d0de2cc2c395328f1d113b4" +checksum = "fd21509dd1fa9bd355dc29894a6ff10635880732396aa38c0066c1e6c1ab8074" dependencies = [ "embed-resource", - "indexmap 2.10.0", - "toml 0.8.23", + "toml 0.9.5", ] [[package]] @@ -9065,7 +9046,7 @@ dependencies = [ "phf 0.12.1", "png", "quartz_nbt", - "quick-xml 0.37.5", + "quick-xml 0.38.1", "rand 0.8.5", "regex", "reqwest", @@ -9296,9 +9277,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.47.0" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", @@ -9342,7 +9323,7 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ - "rustls 0.23.29", + "rustls 0.23.31", "tokio", ] @@ -9359,9 +9340,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", @@ -9385,9 +9366,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.2" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed0aee96c12fa71097902e0bb061a5e1ebd766a6636bb605ba401c45c1650eac" +checksum = "75129e1dc5000bfbaa9fee9d1b21f974f9fbad9daec557a521ee6e080825f6e8" dependencies = [ "indexmap 2.10.0", "serde", @@ -9454,9 +9435,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97200572db069e74c512a14117b296ba0a80a30123fbbb5aa1f4a348f639ca30" +checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" dependencies = [ "winnow 0.7.12", ] @@ -9484,7 +9465,7 @@ dependencies = [ "axum", "base64 0.22.1", "bytes", - "h2 0.4.11", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "http-body-util", @@ -9670,9 +9651,9 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da75ec677957aa21f6e0b361df0daab972f13a5bee3606de0638fd4ee1c666a" +checksum = "a0d92153331e7d02ec09137538996a7786fe679c629c279e82a6be762b7e6fe2" dependencies = [ "crossbeam-channel", "dirs", @@ -9698,9 +9679,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.26.2" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" +checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" dependencies = [ "bytes", "data-encoding", @@ -9708,7 +9689,7 @@ dependencies = [ "httparse", "log", "rand 0.9.2", - "rustls 0.23.29", + "rustls 0.23.31", "rustls-pki-types", "sha1", "thiserror 2.0.12", @@ -9845,6 +9826,12 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "unit-prefix" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" + [[package]] name = "untrusted" version = "0.9.0" @@ -9860,7 +9847,7 @@ dependencies = [ "base64 0.22.1", "log", "percent-encoding", - "rustls 0.23.29", + "rustls 0.23.31", "rustls-pemfile 2.2.0", "rustls-pki-types", "ureq-proto", @@ -10195,13 +10182,13 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe770181423e5fc79d3e2a7f4410b7799d5aab1de4372853de3c6aa13ca24121" +checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" dependencies = [ "cc", "downcast-rs", - "rustix 0.38.44", + "rustix 1.0.8", "scoped-tls", "smallvec", "wayland-sys", @@ -10209,21 +10196,21 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978fa7c67b0847dbd6a9f350ca2569174974cd4082737054dbb7fbb79d7d9a61" +checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ "bitflags 2.9.1", - "rustix 0.38.44", + "rustix 1.0.8", "wayland-backend", "wayland-scanner", ] [[package]] name = "wayland-protocols" -version = "0.32.8" +version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779075454e1e9a521794fed15886323ea0feda3f8b0fc1390f5398141310422a" +checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ "bitflags 2.9.1", "wayland-backend", @@ -10233,9 +10220,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.6" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" +checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" dependencies = [ "proc-macro2", "quick-xml 0.37.5", @@ -10244,9 +10231,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.6" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" +checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" dependencies = [ "dlib", "log", @@ -10962,7 +10949,7 @@ checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "wry" version = "0.52.1" -source = "git+https://github.com/modrinth/wry?rev=21db186#21db1866d53e7be8b513c7272887c6993e7f09b3" +source = "git+https://github.com/modrinth/wry?rev=f2ce0b0#f2ce0b0105d9d94f482c4f8ecffb4f3c3c325b40" dependencies = [ "base64 0.22.1", "block2 0.6.1", @@ -11126,9 +11113,9 @@ dependencies = [ "async-trait", "blocking", "enumflags2", - "event-listener 5.4.0", + "event-listener 5.4.1", "futures-core", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "hex", "nix", "ordered-stream", @@ -11231,9 +11218,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -11331,9 +11318,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9e525af0a6a658e031e95f14b7f889976b74a11ba0eca5a5fc9ac8a1c43a6a" +checksum = "fc1f7e205ce79eb2da3cd71c5f55f3589785cb7c79f6a03d1c8d1491bda5d089" dependencies = [ "zune-core", ] diff --git a/Cargo.toml b/Cargo.toml index b3c0bfa7..b1057b70 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,31 +25,31 @@ actix-ws = "0.3.0" argon2 = { version = "0.5.3", features = ["std"] } ariadne = { path = "packages/ariadne" } async_zip = "0.0.17" -async-compression = { version = "0.4.25", default-features = false } +async-compression = { version = "0.4.27", default-features = false } async-recursion = "1.1.1" async-stripe = { version = "0.41.0", default-features = false, features = [ "runtime-tokio-hyper-rustls", ] } async-trait = "0.1.88" -async-tungstenite = { version = "0.29.1", default-features = false, features = [ +async-tungstenite = { version = "0.30.0", default-features = false, features = [ "futures-03-sink", ] } async-walkdir = "2.1.0" base64 = "0.22.1" bitflags = "2.9.1" -bytemuck = "1.23.0" +bytemuck = "1.23.1" bytes = "1.10.1" censor = "0.3.0" chardetng = "0.1.17" chrono = "0.4.41" -clap = "4.5.40" +clap = "4.5.43" clickhouse = "0.13.3" color-thief = "0.2.2" console-subscriber = "0.4.1" daedalus = { path = "packages/daedalus" } dashmap = "6.1.0" data-url = "0.3.1" -deadpool-redis = "0.21.1" +deadpool-redis = "0.22.0" dirs = "6.0.0" discord-rich-presence = "0.2.5" dotenv-build = "0.1.1" @@ -57,7 +57,7 @@ dotenvy = "0.15.7" dunce = "1.0.5" either = "1.15.0" encoding_rs = "0.8.35" -enumset = "1.1.6" +enumset = "1.1.7" flate2 = "1.1.2" fs4 = { version = "0.13.1", default-features = false } futures = { version = "0.3.31", default-features = false } @@ -74,15 +74,15 @@ hyper-rustls = { version = "0.27.7", default-features = false, features = [ "ring", "tls12", ] } -hyper-util = "0.1.14" +hyper-util = "0.1.16" iana-time-zone = "0.1.63" image = { version = "0.25.6", default-features = false, features = ["rayon"] } -indexmap = "2.9.0" -indicatif = "0.17.11" +indexmap = "2.10.0" +indicatif = "0.18.0" itertools = "0.14.0" -jemalloc_pprof = "0.7.0" +jemalloc_pprof = "0.8.1" json-patch = { version = "4.0.0", default-features = false } -lettre = { version = "0.11.17", default-features = false, features = [ +lettre = { version = "0.11.18", default-features = false, features = [ "builder", "hostname", "pool", @@ -92,24 +92,24 @@ lettre = { version = "0.11.17", default-features = false, features = [ "smtp-transport", ] } maxminddb = "0.26.0" -meilisearch-sdk = { version = "0.28.0", default-features = false } +meilisearch-sdk = { version = "0.29.1", default-features = false } murmur2 = "0.1.0" native-dialog = "0.9.0" -notify = { version = "8.0.0", default-features = false } -notify-debouncer-mini = { version = "0.6.0", default-features = false } +notify = { version = "8.2.0", default-features = false } +notify-debouncer-mini = { version = "0.7.0", default-features = false } p256 = "0.13.2" paste = "1.0.15" phf = { version = "0.12.1", features = ["macros"] } png = "0.17.16" prometheus = "0.14.0" quartz_nbt = "0.2.9" -quick-xml = "0.37.5" +quick-xml = "0.38.1" rand = "=0.8.5" # Locked on 0.8 until argon2 and p256 update to 0.9 rand_chacha = "=0.3.1" # Locked on 0.3 until we can update rand to 0.9 -redis = "=0.31.0" # Locked on 0.31 until deadpool-redis updates to 0.32 +redis = "0.32.4" regex = "1.11.1" -reqwest = { version = "0.12.20", default-features = false } -rgb = "0.8.50" +reqwest = { version = "0.12.22", default-features = false } +rgb = "0.8.52" rust_decimal = { version = "1.37.2", features = [ "serde-with-float", "serde-with-str", @@ -121,7 +121,7 @@ rust-s3 = { version = "0.35.1", default-features = false, features = [ "tokio-rustls-tls", ] } rusty-money = "0.4.1" -sentry = { version = "0.41.0", default-features = false, features = [ +sentry = { version = "0.42.0", default-features = false, features = [ "backtrace", "contexts", "debug-images", @@ -129,45 +129,45 @@ sentry = { version = "0.41.0", default-features = false, features = [ "reqwest", "rustls", ] } -sentry-actix = "0.41.0" +sentry-actix = "0.42.0" serde = "1.0.219" serde_bytes = "0.11.17" serde_cbor = "0.11.2" serde_ini = "0.2.0" -serde_json = "1.0.140" -serde_with = "3.13.0" +serde_json = "1.0.142" +serde_with = "3.14.0" serde-xml-rs = "0.8.1" # Also an XML (de)serializer, consider dropping yaserde in favor of this sha1 = "0.10.6" sha1_smol = { version = "1.0.1", features = ["std"] } sha2 = "0.10.9" -spdx = "0.10.8" +spdx = "0.10.9" sqlx = { version = "0.8.6", default-features = false } -sysinfo = { version = "0.35.2", default-features = false } +sysinfo = { version = "0.36.1", default-features = false } tar = "0.4.44" -tauri = "2.6.1" -tauri-build = "2.3.0" -tauri-plugin-deep-link = "2.4.0" -tauri-plugin-dialog = "2.3.0" -tauri-plugin-http = "2.5.0" +tauri = "2.7.0" +tauri-build = "2.3.1" +tauri-plugin-deep-link = "2.4.1" +tauri-plugin-dialog = "2.3.2" +tauri-plugin-http = "2.5.1" tauri-plugin-opener = "2.4.0" tauri-plugin-os = "2.3.0" -tauri-plugin-single-instance = "2.3.0" +tauri-plugin-single-instance = "2.3.2" tauri-plugin-updater = { version = "2.9.0", default-features = false, features = [ "rustls-tls", "zip", ] } -tauri-plugin-window-state = "2.3.0" +tauri-plugin-window-state = "2.4.0" tempfile = "3.20.0" theseus = { path = "packages/app-lib" } thiserror = "2.0.12" tikv-jemalloc-ctl = "0.6.0" tikv-jemallocator = "0.6.0" -tokio = "1.45.1" +tokio = "1.47.1" tokio-stream = "0.1.17" -tokio-util = "0.7.15" +tokio-util = "0.7.16" totp-rs = "5.7.0" tracing = "0.1.41" -tracing-actix-web = "0.7.18" +tracing-actix-web = "0.7.19" tracing-error = "0.2.1" tracing-subscriber = "0.3.19" url = "2.5.4" @@ -179,7 +179,7 @@ whoami = "1.6.0" winreg = "0.55.0" woothee = "0.13.0" yaserde = "0.12.0" -zip = { version = "4.2.0", default-features = false, features = [ +zip = { version = "4.3.0", default-features = false, features = [ "bzip2", "deflate", "deflate64", @@ -226,7 +226,7 @@ wildcard_dependencies = "warn" warnings = "deny" [patch.crates-io] -wry = { git = "https://github.com/modrinth/wry", rev = "21db186" } +wry = { git = "https://github.com/modrinth/wry", rev = "f2ce0b0" } # Optimize for speed and reduce size on release builds [profile.release] diff --git a/apps/app/nsis/hooks.nsi b/apps/app/nsis/hooks.nsi index bfb20d68..4331240d 100644 --- a/apps/app/nsis/hooks.nsi +++ b/apps/app/nsis/hooks.nsi @@ -1,41 +1,67 @@ -!macro NSIS_HOOK_POSTINSTALL - SetShellVarContext current - - IfFileExists "$LOCALAPPDATA${PRODUCTNAME}\theseus_gui.exe" file_found file_not_found - file_found: - Delete "$LOCALAPPDATA${PRODUCTNAME}\theseus_gui.exe" - - Delete "$LOCALAPPDATA${PRODUCTNAME}\uninstall.exe" - RMDir "$LOCALAPPDATA${PRODUCTNAME}" - - !insertmacro DeleteAppUserModelId - - ; Remove start menu shortcut - !insertmacro MUI_STARTMENU_GETFOLDER Application $AppStartMenuFolder - !insertmacro IsShortcutTarget "$SMPROGRAMS$AppStartMenuFolder${PRODUCTNAME}.lnk" "$LOCALAPPDATA${PRODUCTNAME}\theseus_gui.exe" - Pop $0 - ${If} $0 = 1 - !insertmacro UnpinShortcut "$SMPROGRAMS$AppStartMenuFolder${PRODUCTNAME}.lnk" - Delete "$SMPROGRAMS$AppStartMenuFolder${PRODUCTNAME}.lnk" - RMDir "$SMPROGRAMS$AppStartMenuFolder" - ${EndIf} - !insertmacro IsShortcutTarget "$SMPROGRAMS${PRODUCTNAME}.lnk" "$LOCALAPPDATA${PRODUCTNAME}\theseus_gui.exe" - Pop $0 - ${If} $0 = 1 - !insertmacro UnpinShortcut "$SMPROGRAMS${PRODUCTNAME}.lnk" - Delete "$SMPROGRAMS${PRODUCTNAME}.lnk" - ${EndIf} - - !insertmacro IsShortcutTarget "$DESKTOP${PRODUCTNAME}.lnk" "$LOCALAPPDATA${PRODUCTNAME}\theseus_gui.exe" - Pop $0 - ${If} $0 = 1 - !insertmacro UnpinShortcut "$DESKTOP${PRODUCTNAME}.lnk" - Delete "$DESKTOP${PRODUCTNAME}.lnk" - ${EndIf} - - DeleteRegKey HKCU "${UNINSTKEY}" - - goto end_of_test ;<== important for not continuing on the else branch - file_not_found: - end_of_test: +; https://nsis.sourceforge.io/ShellExecWait +!macro ShellExecWait verb app param workdir show exitoutvar ;only app and show must be != "", every thing else is optional + #define SEE_MASK_NOCLOSEPROCESS 0x40 + System::Store S + !if "${NSIS_PTR_SIZE}" > 4 + !define /ReDef /math SYSSIZEOF_SHELLEXECUTEINFO 14 * ${NSIS_PTR_SIZE} + !else ifndef SYSSIZEOF_SHELLEXECUTEINFO + !define SYSSIZEOF_SHELLEXECUTEINFO 60 + !endif + System::Call '*(&i${SYSSIZEOF_SHELLEXECUTEINFO})i.r0' + System::Call '*$0(i ${SYSSIZEOF_SHELLEXECUTEINFO},i 0x40,p $hwndparent,t "${verb}",t $\'${app}$\',t $\'${param}$\',t "${workdir}",i ${show})p.r0' + System::Call 'shell32::ShellExecuteEx(t)(pr0)i.r1 ?e' ; (t) to trigger A/W selection + ${If} $1 <> 0 + System::Call '*$0(is,i,p,p,p,p,p,p,p,p,p,p,p,p,p.r1)' ;stack value not really used, just a fancy pop ;) + System::Call 'kernel32::WaitForSingleObject(pr1,i-1)' + System::Call 'kernel32::GetExitCodeProcess(pr1,*i.s)' + System::Call 'kernel32::CloseHandle(pr1)' + ${EndIf} + System::Free $0 + !if "${exitoutvar}" == "" + pop $0 + !endif + System::Store L + !if "${exitoutvar}" != "" + pop ${exitoutvar} + !endif +!macroend + +; -------------------------------------------------------------------------------- + +Var /GLOBAL OldInstallDir + +!macro NSIS_HOOK_PREINSTALL + SetShellVarContext all + ${If} ${FileExists} "$SMPROGRAMS\${PRODUCTNAME}.lnk" + UserInfo::GetAccountType + Pop $0 + ${If} $0 != "Admin" + MessageBox MB_ICONINFORMATION|MB_OK "An old installation of the Modrinth App was detected that requires administrator permission to update from. You will be prompted with an admin prompt shortly." + ${EndIf} + + ReadRegStr $4 SHCTX "${MANUPRODUCTKEY}" "" + ReadRegStr $R1 SHCTX "${UNINSTKEY}" "UninstallString" + + ReadRegStr $OldInstallDir SHCTX "${UNINSTKEY}" "InstallLocation" + StrCpy $OldInstallDir $OldInstallDir "" 1 + StrCpy $OldInstallDir $OldInstallDir -1 "" + + DetailPrint "Executing $R1" + !insertmacro ShellExecWait "runas" '$R1' '/P _?=$4' "" ${SW_SHOW} $3 + ${If} $3 <> 0 + SetErrorLevel $3 + MessageBox MB_ICONEXCLAMATION|MB_OK "Failed to uninstall old global installation" + Abort + ${EndIf} + ${EndIf} + SetShellVarContext current +!macroend + +!macro NSIS_HOOK_POSTINSTALL + !insertmacro IsShortcutTarget "$DESKTOP\${PRODUCTNAME}.lnk" "$OldInstallDir\${MAINBINARYNAME}.exe" + Pop $0 + ${If} $0 = 1 + !insertmacro SetShortcutTarget "$DESKTOP\${PRODUCTNAME}.lnk" "$INSTDIR\${MAINBINARYNAME}.exe" + Return + ${EndIf} !macroend diff --git a/apps/app/src/api/auth.rs b/apps/app/src/api/auth.rs index cafb5958..c833fce6 100644 --- a/apps/app/src/api/auth.rs +++ b/apps/app/src/api/auth.rs @@ -122,16 +122,13 @@ pub async fn login( .url()? .as_str() .starts_with("https://login.live.com/oauth20_desktop.srf") - { - if let Some((_, code)) = + && let Some((_, code)) = window.url()?.query_pairs().find(|x| x.0 == "code") - { - window.close()?; - let val = - minecraft_auth::finish_login(&code.clone(), flow).await?; + { + window.close()?; + let val = minecraft_auth::finish_login(&code.clone(), flow).await?; - return Ok(Some(val)); - } + return Ok(Some(val)); } tokio::time::sleep(std::time::Duration::from_millis(50)).await; diff --git a/apps/app/src/api/utils.rs b/apps/app/src/api/utils.rs index 3ced20de..94d8d2a6 100644 --- a/apps/app/src/api/utils.rs +++ b/apps/app/src/api/utils.rs @@ -103,11 +103,11 @@ pub async fn should_disable_mouseover() -> bool { // We try to match version to 12.2 or higher. If unrecognizable to pattern or lower, we default to the css with disabled mouseover for safety if let tauri_plugin_os::Version::Semantic(major, minor, _) = tauri_plugin_os::version() + && major >= 12 + && minor >= 3 { - if major >= 12 && minor >= 3 { - // Mac os version is 12.3 or higher, we allow mouseover - return false; - } + // Mac os version is 12.3 or higher, we allow mouseover + return false; } true } else { diff --git a/apps/app/src/main.rs b/apps/app/src/main.rs index 94427776..aecaf1bc 100644 --- a/apps/app/src/main.rs +++ b/apps/app/src/main.rs @@ -243,10 +243,10 @@ fn main() { }); #[cfg(not(target_os = "linux"))] - if let Some(window) = app.get_window("main") { - if let Err(e) = window.set_shadow(true) { - tracing::warn!("Failed to set window shadow: {e}"); - } + if let Some(window) = app.get_window("main") + && let Err(e) = window.set_shadow(true) + { + tracing::warn!("Failed to set window shadow: {e}"); } Ok(()) diff --git a/apps/app/tauri.conf.json b/apps/app/tauri.conf.json index 78086935..6e68981a 100644 --- a/apps/app/tauri.conf.json +++ b/apps/app/tauri.conf.json @@ -15,7 +15,7 @@ "icon": ["icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.ico"], "windows": { "nsis": { - "installMode": "perMachine", + "installMode": "currentUser", "installerHooks": "./nsis/hooks.nsi" } }, diff --git a/apps/daedalus_client/Dockerfile b/apps/daedalus_client/Dockerfile index 271c829a..8cb643a8 100644 --- a/apps/daedalus_client/Dockerfile +++ b/apps/daedalus_client/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM rust:1.88.0 AS build +FROM rust:1.89.0 AS build WORKDIR /usr/src/daedalus COPY . . diff --git a/apps/daedalus_client/src/forge.rs b/apps/daedalus_client/src/forge.rs index ab67ae91..c1bf6056 100644 --- a/apps/daedalus_client/src/forge.rs +++ b/apps/daedalus_client/src/forge.rs @@ -506,27 +506,25 @@ async fn fetch( return Ok(lib); } - } else if let Some(url) = &lib.url { - if !url.is_empty() { - insert_mirrored_artifact( - &lib.name, - None, - vec![ - url.clone(), - "https://libraries.minecraft.net/" - .to_string(), - "https://maven.creeperhost.net/" - .to_string(), - maven_url.to_string(), - ], - false, - mirror_artifacts, - )?; + } else if let Some(url) = &lib.url + && !url.is_empty() + { + insert_mirrored_artifact( + &lib.name, + None, + vec![ + url.clone(), + "https://libraries.minecraft.net/".to_string(), + "https://maven.creeperhost.net/".to_string(), + maven_url.to_string(), + ], + false, + mirror_artifacts, + )?; - lib.url = Some(format_url("maven/")); + lib.url = Some(format_url("maven/")); - return Ok(lib); - } + return Ok(lib); } // Other libraries are generally available in the "maven" directory of the installer. If they are diff --git a/apps/daedalus_client/src/main.rs b/apps/daedalus_client/src/main.rs index dcd61055..a0945471 100644 --- a/apps/daedalus_client/src/main.rs +++ b/apps/daedalus_client/src/main.rs @@ -93,22 +93,22 @@ async fn main() -> Result<()> { .ok() .and_then(|x| x.parse::().ok()) .unwrap_or(false) + && let Ok(token) = dotenvy::var("CLOUDFLARE_TOKEN") + && let Ok(zone_id) = dotenvy::var("CLOUDFLARE_ZONE_ID") { - if let Ok(token) = dotenvy::var("CLOUDFLARE_TOKEN") { - if let Ok(zone_id) = dotenvy::var("CLOUDFLARE_ZONE_ID") { - let cache_clears = upload_files + let cache_clears = upload_files + .into_iter() + .map(|x| format_url(&x.0)) + .chain( + mirror_artifacts .into_iter() - .map(|x| format_url(&x.0)) - .chain( - mirror_artifacts - .into_iter() - .map(|x| format_url(&format!("maven/{}", x.0))), - ) - .collect::>(); + .map(|x| format_url(&format!("maven/{}", x.0))), + ) + .collect::>(); - // Cloudflare ratelimits cache clears to 500 files per request - for chunk in cache_clears.chunks(500) { - REQWEST_CLIENT.post(format!("https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache")) + // Cloudflare ratelimits cache clears to 500 files per request + for chunk in cache_clears.chunks(500) { + REQWEST_CLIENT.post(format!("https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache")) .bearer_auth(&token) .json(&serde_json::json!({ "files": chunk @@ -128,8 +128,6 @@ async fn main() -> Result<()> { item: "cloudflare clear cache".to_string(), } })?; - } - } } } diff --git a/apps/daedalus_client/src/util.rs b/apps/daedalus_client/src/util.rs index 3f8f11e5..6d331d83 100644 --- a/apps/daedalus_client/src/util.rs +++ b/apps/daedalus_client/src/util.rs @@ -167,20 +167,18 @@ pub async fn download_file( let bytes = x.bytes().await; if let Ok(bytes) = bytes { - if let Some(sha1) = sha1 { - if &*sha1_async(bytes.clone()).await? != sha1 { - if attempt <= 3 { - continue; - } else { - return Err( - crate::ErrorKind::ChecksumFailure { - hash: sha1.to_string(), - url: url.to_string(), - tries: attempt, - } - .into(), - ); + if let Some(sha1) = sha1 + && &*sha1_async(bytes.clone()).await? != sha1 + { + if attempt <= 3 { + continue; + } else { + return Err(crate::ErrorKind::ChecksumFailure { + hash: sha1.to_string(), + url: url.to_string(), + tries: attempt, } + .into()); } } diff --git a/apps/docs/src/content/docs/contributing/labrinth.md b/apps/docs/src/content/docs/contributing/labrinth.md index 1be7dd3e..02c50b0f 100644 --- a/apps/docs/src/content/docs/contributing/labrinth.md +++ b/apps/docs/src/content/docs/contributing/labrinth.md @@ -3,77 +3,61 @@ title: Labrinth (API) description: Guide for contributing to Modrinth's backend --- -This project is part of our [monorepo](https://github.com/modrinth/code). You can find it in the `apps/labrinth` directory. +This project is part of our [monorepo](https://github.com/modrinth/code). You can find it in the `apps/labrinth` directory. The instructions below assume that you have switched your working directory to the `apps/labrinth` subdirectory. -[labrinth] is the Rust-based backend serving Modrinth's API with the help of the [Actix](https://actix.rs) framework. To get started with a labrinth instance, install docker, docker-compose (which comes with Docker), and [Rust]. The initial startup can be done simply with the command `docker-compose up`, or with `docker compose up` (Compose V2 and later). That will deploy a PostgreSQL database on port 5432 and a MeiliSearch instance on port 7700. To run the API itself, you'll need to use the `cargo run` command, this will deploy the API on port 8000. +[labrinth] is the Rust-based backend serving Modrinth's API with the help of the [Actix](https://actix.rs) framework. To get started with a labrinth instance, install docker, docker-compose (which comes with Docker), and [Rust]. The initial startup can be done simply with the command `docker-compose up`, or with `docker compose up` (Compose V2 and later). That will deploy a PostgreSQL database on port 5432, a MeiliSearch instance on port 7700, and a [Mailpit](https://mailpit.axllent.org/) SMTP server on port 1025, with a web UI to inspect sent emails on port 8025. To run the API itself, you'll need to use the `cargo run` command, this will deploy the API on port 8000. To get a basic configuration, copy the `.env.local` file to `.env`. Now, you'll have to install the sqlx CLI, which can be done with cargo: -```bash -cargo install --git https://github.com/launchbadge/sqlx sqlx-cli --no-default-features --features postgres,rustls +```sh +cargo install sqlx-cli --no-default-features --features mysql,sqlite,postgres,rustls,completions ``` -From there, you can create the database and perform all database migrations with one simple command: +From there, you can create the database and set up its schema with one simple command: -```bash -sqlx database setup +```sh +cargo sqlx database setup ``` -To enable labrinth to create a project, you need to add two things. +To enable labrinth to create projects and serve useful metadata to the frontend build scripts, you'll need to seed the database with several key entities: -1. An entry in the `loaders` table. -2. An entry in the `loaders_project_types` table. +1. Categories, in the `categories` table. +2. Loaders and their fields, in the `loaders`, `loader_fields`, `loader_field_enums`, `loader_field_enum_values`, and `loader_fields_loaders` tables. +3. Project types and their allowed loaders and games, in the `project_types`, `loaders_project_types`, and `loaders_project_types_games` tables. +4. Optionally, to moderate projects from the frontend, an admin user, in the `users` table. -A minimal setup can be done from the command line with [psql](https://www.postgresql.org/docs/current/app-psql.html): +The most convenient way to do this seeding is with the [psql](https://www.postgresql.org/docs/current/app-psql.html) command line tool and the pre-existing seed data fixture. This fixture was generated by dumping the official staging environment database at a specific point in time, and defines an admin user with email `admin@modrinth.invalid` and password `admin`: -```bash -psql --host=localhost --port=5432 -U -W +```sh +source .env +psql "$DATABASE_URL" < fixtures/labrinth-seed-data-202508052143.sql ``` -The default password for the database is `labrinth`. Once you've connected, run - -```sql -INSERT INTO loaders VALUES (0, 'placeholder_loader'); -INSERT INTO loaders_project_types VALUES (0, 1); -- modloader id, supported type id -INSERT INTO categories VALUES (0, 'placeholder_category', 1); -- category id, category, project type id -``` - -This will initialize your database with a modloader called 'placeholder_loader', with id 0, and marked as supporting mods only. It will also create a category called 'placeholder_category' that is marked as supporting mods only -If you would like 'placeholder_loader' to be marked as supporting modpacks too, run - -```sql -INSERT INTO loaders_project_types VALUES (0, 2); -- modloader id, supported type id -``` - -If you would like 'placeholder_category' to be marked as supporting modpacks too, run - -```sql -INSERT INTO categories VALUES (0, 'placeholder_category', 2); -- modloader id, supported type id -``` - -You can find more example SQL statements for seeding the database in the `apps/labrinth/tests/files/dummy_data.sql` file. +You can find more example SQL statements for seeding the database in the `tests/files/dummy_data.sql` file. The majority of configuration is done at runtime using [dotenvy](https://crates.io/crates/dotenvy) and the `.env` file. Each of the variables and what they do can be found in the dropdown below. Additionally, there are three command line options that can be used to specify to MeiliSearch what you want to do. -During development, you might notice that changes made directly to entities in the PostgreSQL database do not seem to take effect. This is often because the Redis cache still holds outdated data. To ensure your updates are reflected, clear the cache by e.g. running `redis-cli FLUSHALL`, which will force Labrinth to fetch the latest data from the database the next time it is needed. +During development, you might notice that changes made directly to entities in the PostgreSQL database do not seem to take effect. This is often because the Redis cache still holds outdated data. To ensure your updates are reflected, clear the cache by e.g. running `redis-cli FLUSHALL`, which will force labrinth to fetch the latest data from the database the next time it is needed. + +You can also start labrinth and its backing services at once using `docker compose --profile with-labrinth up`, which will build and start labrinth through its Docker image as if it was yet another service container. To have that container be automatically rebuilt during development as changes to the source code are made, add the `--watch` flag, which enables [Compose Watch](https://docs.docker.com/compose/how-tos/file-watch/). Keep in mind, however, that Compose Watch is bound to be slower than other similar solutions that work outside of a container, particularly on Windows or macOS, where Docker runs in a virtual machine.
.env variables & command line options #### Basic configuration -`DEBUG`: Whether debugging tools should be enabled -`RUST_LOG`: Specifies what information to log, from rust's [`env-logger`](https://github.com/env-logger-rs/env_logger); a reasonable default is `info,sqlx::query=warn` -`SITE_URL`: The main URL to be used for CORS -`CDN_URL`: The publicly accessible base URL for files uploaded to the CDN -`MODERATION_DISCORD_WEBHOOK`: The URL for a Discord webhook where projects pending approval will be sent -`CLOUDFLARE_INTEGRATION`: Whether labrinth should integrate with Cloudflare's spam protection -`DATABASE_URL`: The URL for the PostgreSQL database -`DATABASE_MIN_CONNECTIONS`: The minimum number of concurrent connections allowed to the database at the same time -`DATABASE_MAX_CONNECTIONS`: The maximum number of concurrent connections allowed to the database at the same time -`MEILISEARCH_ADDR`: The URL for the MeiliSearch instance used for search -`MEILISEARCH_KEY`: The name that MeiliSearch is given -`BIND_ADDR`: The bind address for the server. Supports both IPv4 and IPv6 +`DEBUG`: Whether debugging tools should be enabled +`RUST_LOG`: Specifies what information to log, from rust's [`env-logger`](https://github.com/env-logger-rs/env_logger); a reasonable default is `info,sqlx::query=warn` +`SITE_URL`: The main URL to be used for CORS +`CDN_URL`: The publicly accessible base URL for files uploaded to the CDN +`MODERATION_DISCORD_WEBHOOK`: The URL for a Discord webhook where projects pending approval will be sent +`CLOUDFLARE_INTEGRATION`: Whether labrinth should integrate with Cloudflare's spam protection +`DATABASE_URL`: The URL for the PostgreSQL database, including its username, password, host, port, and database name +`DATABASE_MIN_CONNECTIONS`: The minimum number of concurrent connections allowed to the database at the same time +`DATABASE_MAX_CONNECTIONS`: The maximum number of concurrent connections allowed to the database at the same time +`MEILISEARCH_ADDR`: The URL for the MeiliSearch instance used for search +`MEILISEARCH_KEY`: The name that MeiliSearch is given +`BIND_ADDR`: The bind address for the server. Supports both IPv4 and IPv6 `MOCK_FILE_PATH`: The path used to store uploaded files; this has no default value and will panic if unspecified `SMTP_USERNAME`: The username used to authenticate with the SMTP server `SMTP_PASSWORD`: The password associated with the `SMTP_USERNAME` for SMTP authentication @@ -90,7 +74,7 @@ The S3 configuration options are fairly self-explanatory in name, so here's simp #### Search, OAuth, and miscellaneous options -`LOCAL_INDEX_INTERVAL`: The interval, in seconds, at which the local database is reindexed for searching. Defaults to `3600` seconds (1 hour). +`LOCAL_INDEX_INTERVAL`: The interval, in seconds, at which the local database is reindexed for searching. Defaults to `3600` seconds (1 hour). `VERSION_INDEX_INTERVAL`: The interval, in seconds, at which versions are reindexed for searching. Defaults to `1800` seconds (30 minutes). The OAuth configuration options are fairly self-explanatory. For help setting up authentication, please contact us on [Discord]. @@ -99,8 +83,8 @@ The OAuth configuration options are fairly self-explanatory. For help setting up #### Command line options -`--skip-first-index`: Skips indexing the local database on startup. This is useful to prevent doing unnecessary work when frequently restarting. -`--reconfigure-indices`: Resets the MeiliSearch settings for the search indices and exits. +`--skip-first-index`: Skips indexing the local database on startup. This is useful to prevent doing unnecessary work when frequently restarting. +`--reconfigure-indices`: Resets the MeiliSearch settings for the search indices and exits. `--reset-indices`: Resets the MeiliSearch indices and exits; this clears all previously indexed mods.
@@ -109,14 +93,13 @@ The OAuth configuration options are fairly self-explanatory. For help setting up If you're prepared to contribute by submitting a pull request, ensure you have met the following criteria: -- `cargo fmt` has been run. -- `cargo clippy` has been run. -- `cargo check` has been run. +- `cargo fmt --all` has been run. +- `cargo clippy --all-targets` has been run. - `cargo sqlx prepare` has been run. > Note: If you encounter issues with `sqlx` saying 'no queries found' after running `cargo sqlx prepare`, you may need to ensure the installed version of `sqlx-cli` matches the current version of `sqlx` used [in labrinth](https://github.com/modrinth/labrinth/blob/master/Cargo.toml). [Discord]: https://discord.modrinth.com [GitHub]: https://github.com/modrinth -[labrinth]: https://github.com/modrinth/labrinth +[labrinth]: https://github.com/modrinth/code/tree/main/apps/labrinth [Rust]: https://www.rust-lang.org/tools/install diff --git a/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue b/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue index 0bb5c736..63180dfb 100644 --- a/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue +++ b/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue @@ -50,13 +50,35 @@
+ + + +