diff --git a/Cargo.lock b/Cargo.lock index c794a75e..794391c0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -122,7 +122,7 @@ dependencies = [ "bytes 1.10.1", "serde", "serde_bytes_ng", - "tokio 1.45.1", + "tokio 1.47.1", ] [[package]] @@ -142,18 +142,18 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" dependencies = [ "backtrace", ] [[package]] name = "arbitrary" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" [[package]] name = "arc-swap" @@ -169,7 +169,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -207,9 +207,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" dependencies = [ "concurrent-queue", "event-listener-strategy", @@ -219,14 +219,14 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" dependencies = [ "async-task", "concurrent-queue", "fastrand 2.3.0", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "pin-project-lite 0.2.16", "slab", ] @@ -237,34 +237,33 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "async-executor", "async-io", - "async-lock 3.4.0", + "async-lock 3.4.1", "blocking", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "once_cell", "tokio 0.2.25", - "tokio 1.45.1", + "tokio 1.47.1", ] [[package]] name = "async-io" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3" +checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" dependencies = [ - "async-lock 3.4.0", + "async-lock 3.4.1", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "parking", - "polling 3.8.0", - "rustix 1.0.7", + "polling 3.10.0", + "rustix 1.0.8", "slab", - "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -278,32 +277,31 @@ 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 0.2.16", ] [[package]] name = "async-process" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc" +checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "async-io", - "async-lock 3.4.0", + "async-lock 3.4.1", "async-signal", "async-task", "blocking", "cfg-if", - "event-listener 5.4.0", - "futures-lite 2.6.0", - "rustix 1.0.7", - "tracing", + "event-listener 5.4.1", + "futures-lite 2.6.1", + "rustix 1.0.8", ] [[package]] @@ -314,44 +312,44 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "async-signal" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d" +checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1" dependencies = [ "async-io", - "async-lock 3.4.0", + "async-lock 3.4.1", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 1.0.7", + "rustix 1.0.8", "signal-hook-registry", "slab", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "async-std" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730294c1c08c2e0f85759590518f6333f0d5a0a766a27d519c1b244c3dfd8a24" +checksum = "2c8e079a4ab67ae52b7403632e4618815d6db36d2a010cfe41b02c1b1578f93b" dependencies = [ "async-attributes", "async-channel 1.9.0", "async-global-executor", "async-io", - "async-lock 3.4.0", + "async-lock 3.4.1", "async-process", "crossbeam-utils", "futures-channel", "futures-core", "futures-io", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "gloo-timers", "kv-log-macro", "log", @@ -382,7 +380,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -393,13 +391,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -520,18 +518,18 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19135c0c7a60bfee564dbe44ab5ce0557c6bf3884e5291a50be76a15640c4fbd" +checksum = "47c8fbc0f831f4519fe8b810b6a7a91410ec83031b8233f730a0480029f6a23f" dependencies = [ "arrayvec", ] [[package]] name = "aws-config" -version = "1.8.1" +version = "1.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c18d005c70d2b9c0c1ea8876c039db0ec7fb71164d25c73ccea21bf41fd02171" +checksum = "8bc1b40fb26027769f16960d2f4a6bc20c4bb755d403e552c8c1a73af433c246" dependencies = [ "aws-credential-types", "aws-runtime", @@ -551,7 +549,7 @@ dependencies = [ "http 1.3.1", "ring", "time", - "tokio 1.45.1", + "tokio 1.47.1", "tracing", "url", "zeroize", @@ -559,9 +557,9 @@ dependencies = [ [[package]] name = "aws-credential-types" -version = "1.2.3" +version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "687bc16bc431a8533fe0097c7f0182874767f920989d7260950172ae8e3c4465" +checksum = "d025db5d9f52cbc413b167136afb3d8aeea708c0d8884783cf6253be5e22f6f2" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -571,9 +569,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.13.1" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fcc8f365936c834db5514fc45aee5b1202d677e6b40e48468aaaa8183ca8c7" +checksum = "5c953fe1ba023e6b7730c0d4b031d06f267f23a46167dcbd40316644b10a17ba" dependencies = [ "aws-lc-sys", "zeroize", @@ -581,9 +579,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b1d86e7705efe1be1b569bab41d4fa1e14e220b60a160f78de2db687add079" +checksum = "dbfd150b5dbdb988bcc8fb1fe787eb6b7ee6180ca24da683b61ea5405f3d43ff" dependencies = [ "bindgen", "cc", @@ -594,9 +592,9 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.5.8" +version = "1.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f6c68419d8ba16d9a7463671593c54f81ba58cab466e9b759418da606dcc2e2" +checksum = "c034a1bc1d70e16e7f4e4caf7e9f7693e4c9c24cd91cf17c2a0b21abaebc7c8b" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -619,9 +617,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.94.0" +version = "1.104.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc24d9d761bd464534d9e477a9f724c118ca2557a95444097cf6ce71f3229a72" +checksum = "38c488cd6abb0ec9811c401894191932e941c5f91dc226043edacd0afa1634bc" dependencies = [ "aws-credential-types", "aws-runtime", @@ -653,9 +651,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.74.0" +version = "1.83.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a69de9c1b9272da2872af60c7402683e7f45c06267735b4332deacb203239b" +checksum = "643cd43af212d2a1c4dedff6f044d7e1961e5d9e7cfe773d70f31d9842413886" dependencies = [ "aws-credential-types", "aws-runtime", @@ -675,9 +673,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.75.0" +version = "1.84.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0b161d836fac72bdd5ac1a4cd1cdc38ab888c7af26cfd95f661be4409505e63" +checksum = "20ec4a95bd48e0db7a424356a161f8d87bd6a4f0af37204775f0da03d9e39fc3" dependencies = [ "aws-credential-types", "aws-runtime", @@ -697,9 +695,9 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.76.0" +version = "1.85.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb1cd79a3412751a341a28e2cd0d6fa4345241976da427b075a0c0cd5409f886" +checksum = "410309ad0df4606bc721aff0d89c3407682845453247213a0ccc5ff8801ee107" dependencies = [ "aws-credential-types", "aws-runtime", @@ -720,9 +718,9 @@ dependencies = [ [[package]] name = "aws-sigv4" -version = "1.3.3" +version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfb9021f581b71870a17eac25b52335b82211cdc092e02b6876b2bcefa61666" +checksum = "084c34162187d39e3740cb635acd73c4e3a551a36146ad6fe8883c929c9f876c" dependencies = [ "aws-credential-types", "aws-smithy-eventstream", @@ -754,14 +752,14 @@ checksum = "1e190749ea56f8c42bf15dd76c65e14f8f765233e6df9b0506d9d934ebef867c" dependencies = [ "futures-util", "pin-project-lite 0.2.16", - "tokio 1.45.1", + "tokio 1.47.1", ] [[package]] name = "aws-smithy-checksums" -version = "0.63.4" +version = "0.63.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244f00666380d35c1c76b90f7b88a11935d11b84076ac22a4c014ea0939627af" +checksum = "56d2df0314b8e307995a3b86d44565dfe9de41f876901a7d71886c756a25979f" dependencies = [ "aws-smithy-http", "aws-smithy-types", @@ -779,9 +777,9 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.9" +version = "0.60.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "338a3642c399c0a5d157648426110e199ca7fd1c689cc395676b81aa563700c4" +checksum = "182b03393e8c677347fb5705a04a9392695d47d20ef0a2f8cfe28c8e6b9b9778" dependencies = [ "aws-smithy-types", "bytes 1.10.1", @@ -790,9 +788,9 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.62.1" +version = "0.62.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99335bec6cdc50a346fda1437f9fefe33abf8c99060739a546a16457f2862ca9" +checksum = "7c4dacf2d38996cf729f55e7a762b30918229917eca115de45dfa8dfb97796c9" dependencies = [ "aws-smithy-eventstream", "aws-smithy-runtime-api", @@ -811,38 +809,39 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.0.6" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f108f1ca850f3feef3009bdcc977be201bca9a91058864d9de0684e64514bee0" +checksum = "147e8eea63a40315d704b97bf9bc9b8c1402ae94f89d5ad6f7550d963309da1b" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", "aws-smithy-types", - "h2 0.3.26", - "h2 0.4.11", + "h2 0.3.27", + "h2 0.4.12", "http 0.2.12", "http 1.3.1", "http-body 0.4.6", "hyper 0.14.32", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-rustls 0.24.2", "hyper-rustls 0.27.7", "hyper-util", "pin-project-lite 0.2.16", "rustls 0.21.12", - "rustls 0.23.28", + "rustls 0.23.31", "rustls-native-certs 0.8.1", "rustls-pki-types", - "tokio 1.45.1", + "tokio 1.47.1", + "tokio-rustls 0.26.2", "tower", "tracing", ] [[package]] name = "aws-smithy-json" -version = "0.61.4" +version = "0.61.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a16e040799d29c17412943bdbf488fd75db04112d0c0d4b9290bacf5ae0014b9" +checksum = "eaa31b350998e703e9826b2104dd6f63be0508666e1aba88137af060e8944047" dependencies = [ "aws-smithy-types", ] @@ -868,9 +867,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.8.3" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14302f06d1d5b7d333fd819943075b13d27c7700b414f574c3c35859bfb55d5e" +checksum = "d3946acbe1ead1301ba6862e712c7903ca9bb230bdf1fbd1b5ac54158ef2ab1f" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -886,15 +885,15 @@ dependencies = [ "http-body 1.0.1", "pin-project-lite 0.2.16", "pin-utils", - "tokio 1.45.1", + "tokio 1.47.1", "tracing", ] [[package]] name = "aws-smithy-runtime-api" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd8531b6d8882fd8f48f82a9754e682e29dd44cff27154af51fa3eb730f59efb" +checksum = "07f5e0fc8a6b3f2303f331b94504bbf754d85488f402d6f1dd7a6080f99afe56" dependencies = [ "aws-smithy-async", "aws-smithy-types", @@ -902,7 +901,7 @@ dependencies = [ "http 0.2.12", "http 1.3.1", "pin-project-lite 0.2.16", - "tokio 1.45.1", + "tokio 1.47.1", "tracing", "zeroize", ] @@ -929,7 +928,7 @@ dependencies = [ "ryu", "serde", "time", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-util", ] @@ -944,9 +943,9 @@ dependencies = [ [[package]] name = "aws-types" -version = "1.3.7" +version = "1.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a322fec39e4df22777ed3ad8ea868ac2f94cd15e1a55f6ee8d8d6305057689a" +checksum = "b069d19bf01e46298eaedd7c6f283fe565a59263e53eebec945f3e6398f42390" dependencies = [ "aws-credential-types", "aws-smithy-async", @@ -969,7 +968,7 @@ dependencies = [ "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "itoa", "matchit", @@ -984,7 +983,7 @@ dependencies = [ "serde_path_to_error", "serde_urlencoded", "sync_wrapper 1.0.2", - "tokio 1.45.1", + "tokio 1.47.1", "tower", "tower-layer", "tower-service", @@ -1044,7 +1043,7 @@ checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1062,7 +1061,7 @@ dependencies = [ "futures-util", "tempfile", "thiserror 1.0.69", - "tokio 1.45.1", + "tokio 1.47.1", "uuid", ] @@ -1076,7 +1075,7 @@ dependencies = [ "heck 0.5.0", "proc-macro-error", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", "ubyte", ] @@ -1174,7 +1173,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cexpr", "clang-sys", "itertools 0.12.1", @@ -1187,7 +1186,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.104", + "syn 2.0.106", "which", ] @@ -1199,9 +1198,9 @@ checksum = "0669d5a35b64fdb5ab7fb19cae13148b6b5cbdf4b8247faf54ece47f699c8cef" [[package]] name = "bit_field" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" +checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" [[package]] name = "bitfield" @@ -1217,9 +1216,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" [[package]] name = "bitstream-io" @@ -1261,14 +1260,14 @@ dependencies = [ [[package]] name = "blocking" -version = "1.6.1" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "async-task", "futures-io", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "piper", ] @@ -1284,10 +1283,10 @@ dependencies = [ "getrandom 0.2.16", "getrandom 0.3.3", "hex", - "indexmap 2.10.0", + "indexmap 2.11.0", "js-sys", "once_cell", - "rand 0.9.1", + "rand 0.9.2", "serde", "serde_bytes", "serde_json", @@ -1309,9 +1308,9 @@ checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[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" @@ -1361,7 +1360,7 @@ dependencies = [ "instant", "once_cell", "thiserror 1.0.69", - "tokio 1.45.1", + "tokio 1.47.1", ] [[package]] @@ -1391,10 +1390,11 @@ checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" [[package]] name = "cc" -version = "1.2.27" +version = "1.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" +checksum = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -1432,9 +1432,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "chrono" @@ -1517,7 +1517,7 @@ dependencies = [ "futures-core", "memchr", "pin-project-lite 0.2.16", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-util", ] @@ -1681,7 +1681,7 @@ dependencies = [ "crc", "digest", "libc", - "rand 0.9.1", + "rand 0.9.2", "regex", ] @@ -1693,9 +1693,9 @@ checksum = "338089f42c427b86394a5ee60ff321da23a5c89c9d89514c829687b26359fcff" [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -1804,7 +1804,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1824,24 +1824,24 @@ dependencies = [ [[package]] name = "curl" -version = "0.4.48" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e2d5c8f48d9c0c23250e52b55e82a6ab4fdba6650c931f5a0a57a43abda812b" +checksum = "79fc3b6dd0b87ba36e565715bf9a2ced221311db47bd18011676f24a6066edbc" dependencies = [ "curl-sys", "libc", "openssl-probe", "openssl-sys", "schannel", - "socket2 0.5.10", + "socket2 0.6.0", "windows-sys 0.59.0", ] [[package]] name = "curl-sys" -version = "0.4.82+curl-8.14.1" +version = "0.4.83+curl-8.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4d63638b5ec65f1a4ae945287b3fd035be4554bbaf211901159c9a2a74fb5be" +checksum = "5830daf304027db10c82632a464879d46a3f7c4ba17a31592657ad16c719b483" dependencies = [ "cc", "libc", @@ -1922,7 +1922,7 @@ dependencies = [ "proc-macro2", "quote 1.0.40", "strsim 0.11.1", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1955,7 +1955,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1979,18 +1979,18 @@ checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "data-url" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" +checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" [[package]] name = "deadqueue" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16a2561fd313df162315935989dceb8c99db4ee1933358270a57a3cfb8c957f3" +checksum = "72ff1266be84e4e04a81e2d1cbb998cb271b374fb73ce780245ef96c037c50cd" dependencies = [ "crossbeam-queue", - "tokio 1.45.1", + "tokio 1.47.1", ] [[package]] @@ -2055,9 +2055,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" dependencies = [ "powerfmt", "serde", @@ -2071,18 +2071,18 @@ checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "derive-where" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510c292c8cf384b1a340b816a9a6cf2599eb8f566a44949024af88418000c50b" +checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2095,7 +2095,7 @@ dependencies = [ "proc-macro2", "quote 1.0.40", "rustc_version", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2124,11 +2124,11 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b035a542cf7abf01f2e3c4d5a7acbaebfefe120ae4efc7bde3df98186e4b8af7" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "proc-macro2", "proc-macro2-diagnostics", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2151,7 +2151,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2183,9 +2183,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "ecdsa" @@ -2328,7 +2328,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2348,7 +2348,7 @@ checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2381,7 +2381,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2409,6 +2409,15 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "euclid" +version = "0.22.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" +dependencies = [ + "num-traits", +] + [[package]] name = "event-listener" version = "2.5.3" @@ -2417,9 +2426,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", @@ -2432,7 +2441,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 0.2.16", ] @@ -2466,6 +2475,26 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "fax" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" +dependencies = [ + "fax_derive", +] + +[[package]] +name = "fax_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" +dependencies = [ + "proc-macro2", + "quote 1.0.40", + "syn 2.0.106", +] + [[package]] name = "fcm_v1" version = "0.3.0" @@ -2532,6 +2561,12 @@ dependencies = [ "version_check", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" + [[package]] name = "findshlibs" version = "0.10.2" @@ -2621,9 +2656,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -2647,7 +2682,7 @@ dependencies = [ "redis-protocol", "semver", "socket2 0.5.10", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-stream", "tokio-util", "url", @@ -2747,9 +2782,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", @@ -2766,7 +2801,7 @@ checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" dependencies = [ "futures-channel", "futures-task", - "tokio 1.45.1", + "tokio 1.47.1", ] [[package]] @@ -2777,7 +2812,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2840,9 +2875,9 @@ dependencies = [ [[package]] name = "generator" -version = "0.8.5" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" +checksum = "605183a538e3e2a9c1038635cc5c2d194e2ee8fd0d1b66b8349fad7dbacce5a2" dependencies = [ "cc", "cfg-if", @@ -2874,9 +2909,9 @@ dependencies = [ [[package]] name = "getopts" -version = "0.2.23" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cba6ae63eb948698e300f645f87c70f76630d505f23b8907cf1e193ee85048c1" +checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df" dependencies = [ "unicode-width", ] @@ -2904,7 +2939,7 @@ dependencies = [ "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.4+wasi-0.2.4", "wasm-bindgen", ] @@ -2917,7 +2952,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2961,9 +2996,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "gloo-timers" @@ -3001,9 +3036,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" dependencies = [ "bytes 1.10.1", "fnv", @@ -3011,18 +3046,18 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.10.0", + "indexmap 2.11.0", "slab", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-util", "tracing", ] [[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 1.10.1", @@ -3030,9 +3065,9 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.10.0", + "indexmap 2.11.0", "slab", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-util", "tracing", ] @@ -3088,9 +3123,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", @@ -3167,13 +3202,13 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "idna 1.0.3", + "idna 1.1.0", "ipnet", "once_cell", "rand 0.8.5", "thiserror 1.0.69", "tinyvec", - "tokio 1.45.1", + "tokio 1.47.1", "tracing", "url", ] @@ -3195,7 +3230,7 @@ dependencies = [ "resolv-conf", "smallvec", "thiserror 1.0.69", - "tokio 1.45.1", + "tokio 1.47.1", "tracing", ] @@ -3272,7 +3307,7 @@ dependencies = [ "markup5ever", "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3362,7 +3397,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.3.26", + "h2 0.3.27", "http 0.2.12", "http-body 0.4.6", "httparse", @@ -3370,7 +3405,7 @@ dependencies = [ "itoa", "pin-project-lite 0.2.16", "socket2 0.5.10", - "tokio 1.45.1", + "tokio 1.47.1", "tower-service", "tracing", "want", @@ -3378,22 +3413,24 @@ dependencies = [ [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes 1.10.1", "futures-channel", - "futures-util", - "h2 0.4.11", + "futures-core", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "httparse", "httpdate", "itoa", "pin-project-lite 0.2.16", + "pin-utils", "smallvec", - "tokio 1.45.1", + "tokio 1.47.1", "want", ] @@ -3409,7 +3446,7 @@ dependencies = [ "log", "rustls 0.21.12", "rustls-native-certs 0.6.3", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-rustls 0.24.1", ] @@ -3421,11 +3458,11 @@ checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" dependencies = [ "futures-util", "http 1.3.1", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "rustls 0.22.4", "rustls-pki-types", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-rustls 0.25.0", "tower-service", "webpki-roots 0.26.11", @@ -3438,12 +3475,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http 1.3.1", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", - "rustls 0.23.28", + "rustls 0.23.31", "rustls-native-certs 0.8.1", "rustls-pki-types", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-rustls 0.26.2", "tower-service", ] @@ -3457,7 +3494,7 @@ dependencies = [ "bytes 1.10.1", "hyper 0.14.32", "native-tls", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-native-tls", ] @@ -3469,19 +3506,19 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes 1.10.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "native-tls", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-native-tls", "tower-service", ] [[package]] name = "hyper-util" -version = "0.1.14" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" +checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" dependencies = [ "base64 0.22.1", "bytes 1.10.1", @@ -3490,14 +3527,14 @@ dependencies = [ "futures-util", "http 1.3.1", "http-body 1.0.1", - "hyper 1.6.0", + "hyper 1.7.0", "ipnet", "libc", "percent-encoding", "pin-project-lite 0.2.16", - "socket2 0.5.10", + "socket2 0.6.0", "system-configuration 0.6.1", - "tokio 1.45.1", + "tokio 1.47.1", "tower-service", "tracing", "windows-registry", @@ -3652,9 +3689,9 @@ dependencies = [ [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -3673,24 +3710,25 @@ dependencies = [ [[package]] name = "if_chain" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" +checksum = "cd62e6b5e86ea8eeeb8db1de02880a6abc01a397b2ebb64b5d74ac255318f5cb" [[package]] name = "image" -version = "0.25.6" +version = "0.25.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" +checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" dependencies = [ "bytemuck", "byteorder-lite", "color_quant", "exr", "gif", - "image-webp 0.2.3", + "image-webp 0.2.4", + "moxcms", "num-traits", - "png", + "png 0.18.0", "qoi", "ravif", "rayon", @@ -3712,9 +3750,9 @@ dependencies = [ [[package]] name = "image-webp" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" +checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" dependencies = [ "byteorder-lite", "quick-error 2.0.1", @@ -3751,12 +3789,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "serde", ] @@ -3801,7 +3839,18 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", +] + +[[package]] +name = "io-uring" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" +dependencies = [ + "bitflags 2.9.4", + "cfg-if", + "libc", ] [[package]] @@ -3910,25 +3959,19 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ "getrandom 0.3.3", "libc", ] -[[package]] -name = "jpeg-decoder" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" - [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" dependencies = [ "once_cell", "wasm-bindgen", @@ -4150,11 +4193,12 @@ dependencies = [ [[package]] name = "kurbo" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1077d333efea6170d9ccb96d3c3026f300ca0773da4938cc4c811daa6df68b0c" +checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62" dependencies = [ "arrayvec", + "euclid", "smallvec", ] @@ -4184,9 +4228,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "lebe" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" +checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" [[package]] name = "lettre" @@ -4208,20 +4252,20 @@ dependencies = [ "once_cell", "quoted_printable", "socket2 0.4.10", - "tokio 1.45.1", + "tokio 1.47.1", ] [[package]] name = "libc" -version = "0.2.174" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libfuzzer-sys" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75" +checksum = "5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404" dependencies = [ "arbitrary", "cc", @@ -4246,7 +4290,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.53.2", + "windows-targets 0.53.3", ] [[package]] @@ -4331,9 +4375,9 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "livekit-api" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc95de3f9a3aee87733789fb7a79643871eb05e5ae037d4876e70a6143c3d9e4" +checksum = "4a17951fa8d398241f4a9503b57a7b38b3f40fb9dc94954f17b9fe99683e6b9b" dependencies = [ "base64 0.21.7", "http 0.2.12", @@ -4343,7 +4387,7 @@ dependencies = [ "parking_lot", "pbjson-types", "prost", - "rand 0.9.1", + "rand 0.9.2", "reqwest 0.11.27", "scopeguard", "serde", @@ -4368,7 +4412,7 @@ dependencies = [ "prost-types", "serde", "thiserror 1.0.69", - "tokio 1.45.1", + "tokio 1.47.1", ] [[package]] @@ -4377,7 +4421,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ae53eb874eb86e96e8ccffc31b5a00926d46174cbcb1c24ce4e57b1fcc5c8f6" dependencies = [ - "tokio 1.45.1", + "tokio 1.47.1", "tokio-stream", ] @@ -4387,7 +4431,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "532e84c6cdc5fe774f2b5d9912597b5f3bea561927a48296d03e24549d21c3f6" dependencies = [ - "tokio 1.45.1", + "tokio 1.47.1", "tokio-stream", ] @@ -4403,43 +4447,43 @@ dependencies = [ [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" dependencies = [ "value-bag", ] [[package]] name = "logos" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab6f536c1af4c7cc81edf73da1f8029896e7e1e16a219ef09b184e76a296f3db" +checksum = "ff472f899b4ec2d99161c51f60ff7075eeb3097069a36050d8037a6325eb8154" dependencies = [ "logos-derive", ] [[package]] name = "logos-codegen" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "189bbfd0b61330abea797e5e9276408f2edbe4f822d7ad08685d67419aafb34e" +checksum = "192a3a2b90b0c05b27a0b2c43eecdb7c415e29243acc3f89cc8247a5b693045c" dependencies = [ "beef", "fnv", "lazy_static", "proc-macro2", "quote 1.0.40", - "regex-syntax 0.8.5", + "regex-syntax", "rustc_version", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "logos-derive" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebfe8e1a19049ddbfccbd14ac834b215e11b85b90bab0c2dba7c7b92fb5d5cba" +checksum = "605d9697bcd5ef3a42d38efc51541aa3d6a4a25f7ab6d1ed0da5ac632a26b470" dependencies = [ "logos-codegen", ] @@ -4466,7 +4510,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" dependencies = [ "cfg-if", - "generator 0.8.5", + "generator 0.8.7", "scoped-tls", "tracing", "tracing-subscriber", @@ -4505,7 +4549,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -4538,7 +4582,7 @@ dependencies = [ "macro_magic_core", "macro_magic_macros", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4552,7 +4596,7 @@ dependencies = [ "macro_magic_core_macros", "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4563,7 +4607,7 @@ checksum = "b02abfe41815b5bd98dbd4260173db2c116dda171dc0fe7838cb206333b83308" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4574,7 +4618,7 @@ checksum = "73ea28ee64b88876bf45277ed9a5817c1817df061a74f2b988971a12570e5869" dependencies = [ "macro_magic_core", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4599,11 +4643,11 @@ checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -4646,9 +4690,9 @@ checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memmap2" -version = "0.9.5" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" dependencies = [ "libc", ] @@ -4711,7 +4755,7 @@ dependencies = [ "log", "metrics", "thiserror 1.0.69", - "tokio 1.45.1", + "tokio 1.47.1", "tracing", "tracing-subscriber", ] @@ -4732,11 +4776,11 @@ version = "0.12.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" dependencies = [ - "async-lock 3.4.0", + "async-lock 3.4.1", "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", - "event-listener 5.4.0", + "event-listener 5.4.1", "futures-util", "loom 0.7.2", "parking_lot", @@ -4749,10 +4793,28 @@ dependencies = [ ] [[package]] -name = "mongodb" -version = "3.2.4" +name = "mongocrypt" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f8c69f13acf07eae386a2974f48ffd9187ea2aba8defbea9aa34e7e272c5f3" +checksum = "22426d6318d19c5c0773f783f85375265d6a8f0fa76a733da8dc4355516ec63d" +dependencies = [ + "bson", + "mongocrypt-sys", + "once_cell", + "serde", +] + +[[package]] +name = "mongocrypt-sys" +version = "0.1.4+1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dda42df21d035f88030aad8e877492fac814680e1d7336a57b2a091b989ae388" + +[[package]] +name = "mongodb" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622f272c59e54a3c85f5902c6b8e7b1653a6b6681f45e4c42d6581301119a4b8" dependencies = [ "async-trait", "base64 0.13.1", @@ -4771,14 +4833,15 @@ dependencies = [ "hmac", "macro_magic", "md-5", + "mongocrypt", "mongodb-internal-macros", "once_cell", "pbkdf2", "percent-encoding", "rand 0.8.5", "rustc_version_runtime", - "rustls 0.21.12", - "rustls-pemfile 1.0.4", + "rustls 0.23.31", + "rustversion", "serde", "serde_bytes", "serde_with", @@ -4789,24 +4852,34 @@ dependencies = [ "strsim 0.11.1", "take_mut", "thiserror 1.0.69", - "tokio 1.45.1", - "tokio-rustls 0.24.1", + "tokio 1.47.1", + "tokio-rustls 0.26.2", "tokio-util", "typed-builder", "uuid", - "webpki-roots 0.25.4", + "webpki-roots 0.26.11", ] [[package]] name = "mongodb-internal-macros" -version = "3.2.4" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9202de265a3a8bbb43f9fe56db27c93137d4f9fb04c093f47e9c7de0c61ac7d" +checksum = "63981427a0f26b89632fd2574280e069d09fb2912a3138da15de0174d11dd077" dependencies = [ "macro_magic", "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", +] + +[[package]] +name = "moxcms" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd32fa8935aeadb8a8a6b6b351e40225570a37c43de67690383d87ef170cd08" +dependencies = [ + "num-traits", + "pxfm", ] [[package]] @@ -4823,7 +4896,7 @@ dependencies = [ "memchr", "mime", "spin", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-util", "version_check", ] @@ -4836,9 +4909,9 @@ checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" [[package]] name = "mutate_once" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16cf681a23b4d0a43fc35024c176437f9dcd818db34e0f42ab456a0ee5ad497b" +checksum = "13d2233c9842d08cfe13f9eac96e207ca6a2ea10b80259ebe8ad0268be27d2af" [[package]] name = "nanoid" @@ -4899,12 +4972,11 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" dependencies = [ - "overload", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -4948,7 +5020,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5041,7 +5113,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5080,7 +5152,7 @@ version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cfg-if", "foreign-types", "libc", @@ -5097,7 +5169,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5146,12 +5218,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "p256" version = "0.11.1" @@ -5294,7 +5360,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5338,9 +5404,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" @@ -5349,7 +5415,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" dependencies = [ "memchr", - "thiserror 2.0.12", + "thiserror 2.0.16", "ucd-trie", ] @@ -5373,7 +5439,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5393,7 +5459,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.10.0", + "indexmap 2.11.0", ] [[package]] @@ -5465,7 +5531,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5509,7 +5575,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5581,12 +5647,12 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plist" -version = "1.7.2" +version = "1.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d77244ce2d584cd84f6a15f86195b8c9b2a0dfbfd817c09e0464244091a58ed" +checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1" dependencies = [ "base64 0.22.1", - "indexmap 2.10.0", + "indexmap 2.11.0", "quick-xml", "serde", "time", @@ -5605,6 +5671,19 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "png" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" +dependencies = [ + "bitflags 2.9.4", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + [[package]] name = "polling" version = "2.8.0" @@ -5623,17 +5702,16 @@ dependencies = [ [[package]] name = "polling" -version = "3.8.0" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" +checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi 0.5.2", "pin-project-lite 0.2.16", - "rustix 1.0.7", - "tracing", - "windows-sys 0.59.0", + "rustix 1.0.8", + "windows-sys 0.60.2", ] [[package]] @@ -5656,9 +5734,9 @@ checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -5696,12 +5774,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.35" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061c1221631e079b26479d25bbf2275bfe5917ae8419cd7e34f13bfc2aa7539a" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5766,14 +5844,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -5786,7 +5864,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", "version_check", "yansi", ] @@ -5807,7 +5885,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5851,7 +5929,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.104", + "syn 2.0.106", "tempfile", ] @@ -5865,7 +5943,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5877,6 +5955,15 @@ dependencies = [ "prost", ] +[[package]] +name = "pxfm" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55f4fedc84ed39cb7a489322318976425e42a147e2be79d8f878e2884f94e84" +dependencies = [ + "num-traits", +] + [[package]] name = "qoi" version = "0.4.1" @@ -5906,9 +5993,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" -version = "0.37.5" +version = "0.38.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89" dependencies = [ "memchr", ] @@ -5978,9 +6065,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -6164,9 +6251,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -6174,9 +6261,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -6207,7 +6294,7 @@ dependencies = [ "ryu", "sha1_smol", "socket2 0.4.10", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-util", "url", ] @@ -6244,11 +6331,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.13" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", ] [[package]] @@ -6268,58 +6355,43 @@ checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.1.10" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-lite" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" +checksum = "943f41321c63ef1c92fd763bfe054d2668f7f225a5c29f0105903dc2fc04ba30" [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "reqwest" @@ -6332,7 +6404,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2 0.3.26", + "h2 0.3.27", "http 0.2.12", "http-body 0.4.6", "hyper 0.14.32", @@ -6351,7 +6423,7 @@ dependencies = [ "serde_urlencoded", "sync_wrapper 0.1.2", "system-configuration 0.5.1", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-native-tls", "tower-service", "url", @@ -6363,19 +6435,19 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.22" +version = "0.12.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" +checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" dependencies = [ "base64 0.22.1", "bytes 1.10.1", "encoding_rs", "futures-core", - "h2 0.4.11", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-rustls 0.27.7", "hyper-tls 0.6.0", "hyper-util", @@ -6390,7 +6462,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "sync_wrapper 1.0.2", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-native-tls", "tower", "tower-http 0.6.6", @@ -6451,7 +6523,7 @@ dependencies = [ "simdutf8", "strum_macros", "tempfile", - "tokio 1.45.1", + "tokio 1.47.1", "tower-http 0.5.2", "tracing", "tracing-subscriber", @@ -6465,7 +6537,7 @@ dependencies = [ name = "revolt-bonfire" version = "0.8.8" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "async-std", "async-tungstenite", "authifier", @@ -6517,7 +6589,7 @@ dependencies = [ "revolt-database", "revolt-files", "revolt-result", - "tokio 1.45.1", + "tokio 1.47.1", ] [[package]] @@ -6654,7 +6726,7 @@ dependencies = [ "mime", "moka", "regex", - "reqwest 0.12.22", + "reqwest 0.12.23", "revolt-config", "revolt-files", "revolt-models", @@ -6663,7 +6735,7 @@ dependencies = [ "serde", "serde_json", "tempfile", - "tokio 1.45.1", + "tokio 1.47.1", "tracing", "tracing-subscriber", "utoipa", @@ -6746,7 +6818,7 @@ dependencies = [ "revolt_optional_struct", "serde", "serde_json", - "tokio 1.45.1", + "tokio 1.47.1", "ulid 1.2.1", "web-push", ] @@ -6804,7 +6876,7 @@ dependencies = [ "erased-serde", "http 1.3.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-rustls 0.26.0", "hyper-util", "parking_lot", @@ -6815,7 +6887,7 @@ dependencies = [ "serde", "serde_json", "thiserror 1.0.69", - "tokio 1.45.1", + "tokio 1.47.1", ] [[package]] @@ -6898,9 +6970,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.50" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" +checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" dependencies = [ "bytemuck", ] @@ -6955,7 +7027,7 @@ dependencies = [ "either", "figment", "futures", - "indexmap 2.10.0", + "indexmap 2.11.0", "log", "memchr", "multer", @@ -6971,7 +7043,7 @@ dependencies = [ "state", "tempfile", "time", - "tokio 1.45.1", + "tokio 1.47.1", "tokio-stream", "tokio-util", "ubyte", @@ -7003,11 +7075,11 @@ checksum = "575d32d7ec1a9770108c879fc7c47815a80073f96ca07ff9525a94fcede1dd46" dependencies = [ "devise", "glob", - "indexmap 2.10.0", + "indexmap 2.11.0", "proc-macro2", "quote 1.0.40", "rocket_http", - "syn 2.0.104", + "syn 2.0.106", "unicode-xid 0.2.6", "version_check", ] @@ -7050,7 +7122,7 @@ dependencies = [ "futures", "http 0.2.12", "hyper 0.14.32", - "indexmap 2.10.0", + "indexmap 2.11.0", "log", "memchr", "pear", @@ -7062,7 +7134,7 @@ dependencies = [ "stable-pattern", "state", "time", - "tokio 1.45.1", + "tokio 1.47.1", "uncased", ] @@ -7138,9 +7210,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" @@ -7173,7 +7245,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys 0.4.15", @@ -7182,15 +7254,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys 0.9.4", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -7221,14 +7293,16 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.28" +version = "0.23.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" +checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" dependencies = [ "aws-lc-rs", + "log", "once_cell", + "ring", "rustls-pki-types", - "rustls-webpki 0.103.3", + "rustls-webpki 0.103.4", "subtle", "zeroize", ] @@ -7254,7 +7328,7 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.2.0", + "security-framework 3.3.0", ] [[package]] @@ -7307,9 +7381,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.3" +version = "0.103.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" dependencies = [ "aws-lc-rs", "ring", @@ -7319,9 +7393,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 = "rustybuzz" @@ -7329,7 +7403,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c85d1ccd519e61834798eb52c4e886e8c2d7d698dd3d6ce0b1b47eb8557f1181" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "bytemuck", "core_maths", "log", @@ -7383,9 +7457,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1375ba8ef45a6f15d83fa8748f1079428295d403d6ea991d09ab100155fbc06d" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" dependencies = [ "dyn-clone", "ref-cast", @@ -7402,7 +7476,7 @@ dependencies = [ "proc-macro2", "quote 1.0.40", "serde_derive_internals", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -7494,7 +7568,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -7503,11 +7577,11 @@ 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", + "bitflags 2.9.4", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -7530,7 +7604,7 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4eb30575f3638fc8f6815f448d50cb1a2e255b0897985c8c59f4d37b72a07b06" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cssparser", "derive_more", "fxhash", @@ -7564,7 +7638,7 @@ dependencies = [ "sentry-debug-images", "sentry-panic", "sentry-tracing", - "tokio 1.45.1", + "tokio 1.47.1", "ureq", ] @@ -7698,10 +7772,10 @@ checksum = "04b6c9287202294685cb1f749b944dbbce8160b81a1061ecddc073025fed129f" dependencies = [ "debugid", "hex", - "rand 0.9.1", + "rand 0.9.2", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", "url", "uuid", @@ -7742,7 +7816,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -7753,16 +7827,16 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.0", "itoa", "memchr", "ryu", @@ -7810,9 +7884,9 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.10.0", + "indexmap 2.11.0", "schemars 0.9.0", - "schemars 1.0.3", + "schemars 1.0.4", "serde", "serde_derive", "serde_json", @@ -7829,7 +7903,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -7897,9 +7971,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", ] @@ -7968,9 +8042,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 = "slotmap" @@ -8018,6 +8092,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "spin" version = "0.9.8" @@ -8135,7 +8219,7 @@ dependencies = [ "proc-macro2", "quote 1.0.40", "rustversion", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8178,9 +8262,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.104" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote 1.0.40", @@ -8231,7 +8315,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8265,7 +8349,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "core-foundation 0.9.4", "system-configuration-sys 0.6.0", ] @@ -8329,15 +8413,15 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" dependencies = [ "fastrand 2.3.0", "getrandom 0.3.3", "once_cell", - "rustix 1.0.7", - "windows-sys 0.59.0", + "rustix 1.0.8", + "windows-sys 0.60.2", ] [[package]] @@ -8371,11 +8455,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.16", ] [[package]] @@ -8386,18 +8470,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8411,23 +8495,25 @@ dependencies = [ [[package]] name = "tiff" -version = "0.9.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" dependencies = [ + "fax", "flate2", - "jpeg-decoder", + "half", + "quick-error 2.0.1", "weezl", + "zune-jpeg", ] [[package]] name = "time" -version = "0.3.41" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" dependencies = [ "deranged", - "itoa", "libc", "num-conv", "num_threads", @@ -8439,15 +8525,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -8473,7 +8559,7 @@ dependencies = [ "bytemuck", "cfg-if", "log", - "png", + "png 0.17.16", "tiny-skia-path", ] @@ -8500,9 +8586,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -8526,20 +8612,22 @@ dependencies = [ [[package]] name = "tokio" -version = "1.45.1" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes 1.10.1", + "io-uring", "libc", "mio", "parking_lot", "pin-project-lite 0.2.16", "signal-hook-registry", - "socket2 0.5.10", + "slab", + "socket2 0.6.0", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -8550,7 +8638,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8560,7 +8648,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", - "tokio 1.45.1", + "tokio 1.47.1", ] [[package]] @@ -8570,7 +8658,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ "rustls 0.21.12", - "tokio 1.45.1", + "tokio 1.47.1", ] [[package]] @@ -8581,7 +8669,7 @@ checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" dependencies = [ "rustls 0.22.4", "rustls-pki-types", - "tokio 1.45.1", + "tokio 1.47.1", ] [[package]] @@ -8590,8 +8678,8 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ - "rustls 0.23.28", - "tokio 1.45.1", + "rustls 0.23.31", + "tokio 1.47.1", ] [[package]] @@ -8602,21 +8690,21 @@ checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite 0.2.16", - "tokio 1.45.1", + "tokio 1.47.1", ] [[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 1.10.1", "futures-core", "futures-io", "futures-sink", "pin-project-lite 0.2.16", - "tokio 1.45.1", + "tokio 1.47.1", ] [[package]] @@ -8655,7 +8743,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.0", "toml_datetime", "winnow 0.5.40", ] @@ -8666,12 +8754,12 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.0", "serde", "serde_spanned", "toml_datetime", "toml_write", - "winnow 0.7.11", + "winnow 0.7.13", ] [[package]] @@ -8702,7 +8790,7 @@ dependencies = [ "futures-util", "pin-project-lite 0.2.16", "sync_wrapper 1.0.2", - "tokio 1.45.1", + "tokio 1.47.1", "tower-layer", "tower-service", "tracing", @@ -8714,7 +8802,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "bytes 1.10.1", "http 1.3.1", "http-body 1.0.1", @@ -8730,7 +8818,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "bytes 1.10.1", "futures-util", "http 1.3.1", @@ -8774,7 +8862,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8810,14 +8898,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", @@ -8862,13 +8950,22 @@ dependencies = [ [[package]] name = "typed-builder" -version = "0.10.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89851716b67b937e393b3daa8423e67ddfc4bbbf1654bcf05488e95e0828db0c" +checksum = "cd9d30e3a08026c78f246b173243cf07b3696d274debd26680773b6773c2afc7" +dependencies = [ + "typed-builder-macro", +] + +[[package]] +name = "typed-builder-macro" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c36781cc0e46a83726d9879608e4cf6c2505237e263a8eb8c24502989cfdb28" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 1.0.109", + "syn 2.0.106", ] [[package]] @@ -8920,7 +9017,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "470dbf6591da1b39d43c14523b2b469c86879a53e8b758c8e090a470fe7b1fbe" dependencies = [ - "rand 0.9.1", + "rand 0.9.2", "web-time", ] @@ -9065,12 +9162,12 @@ dependencies = [ [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", - "idna 1.0.3", + "idna 1.1.0", "percent-encoding", "serde", ] @@ -9135,7 +9232,7 @@ version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5afb1a60e207dca502682537fefcfd9921e71d0b83e9576060f09abc6efab23" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.0", "serde", "serde_json", "utoipa-gen", @@ -9151,7 +9248,7 @@ dependencies = [ "proc-macro2", "quote 1.0.40", "regex", - "syn 2.0.104", + "syn 2.0.106", "ulid 1.2.1", ] @@ -9169,9 +9266,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.17.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ "getrandom 0.3.3", "js-sys", @@ -9324,11 +9421,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.4+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "88a5f4a424faf49c3c2c344f166f0662341d470ea185e939657aaff130f0ec4a" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] @@ -9342,35 +9439,36 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" dependencies = [ "bumpalo", "log", "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe" dependencies = [ "cfg-if", "js-sys", @@ -9381,9 +9479,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" dependencies = [ "quote 1.0.40", "wasm-bindgen-macro-support", @@ -9391,22 +9489,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" dependencies = [ "unicode-ident", ] @@ -9421,7 +9519,7 @@ dependencies = [ "base64 0.13.1", "chrono", "ece", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "http 0.2.12", "isahc", "jwt-simple", @@ -9435,9 +9533,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12" dependencies = [ "js-sys", "wasm-bindgen", @@ -9455,34 +9553,28 @@ dependencies = [ [[package]] name = "webp" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f53152f51fb5af0c08484c33d16cca96175881d1f3dec068c23b31a158c2d99" +checksum = "c071456adef4aca59bf6a583c46b90ff5eb0b4f758fc347cea81290288f37ce1" dependencies = [ "image", "libwebp-sys", ] -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - [[package]] name = "webpki-roots" version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.1", + "webpki-roots 1.0.2", ] [[package]] name = "webpki-roots" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8782dd5a41a24eed3a4f40b606249b3e236ca61adf1f25ea4d45c73de122b502" +checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" dependencies = [ "rustls-pki-types", ] @@ -9529,11 +9621,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -9605,7 +9697,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -9616,7 +9708,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -9697,7 +9789,7 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.2", + "windows-targets 0.53.3", ] [[package]] @@ -9733,10 +9825,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.2" +version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ + "windows-link", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -9905,9 +9998,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] @@ -9923,13 +10016,10 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.1", -] +checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" [[package]] name = "writeable" @@ -9996,7 +10086,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", "synstructure 0.13.2", ] @@ -10022,29 +10112,29 @@ dependencies = [ "serde", "serde_json", "time", - "tokio 1.45.1", + "tokio 1.47.1", "tower-service", "url", ] [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -10064,7 +10154,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", "synstructure 0.13.2", ] @@ -10087,9 +10177,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", @@ -10104,7 +10194,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -10124,9 +10214,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.18" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7384255a918371b5af158218d131530f694de9ad3815ebdd0453a940485cb0fa" +checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" dependencies = [ "zune-core", ] diff --git a/crates/core/database/src/events/client.rs b/crates/core/database/src/events/client.rs index 9d630406..f6d16c67 100644 --- a/crates/core/database/src/events/client.rs +++ b/crates/core/database/src/events/client.rs @@ -145,7 +145,13 @@ pub enum EventV1 { }, /// User joins server - ServerMemberJoin { id: String, user: String }, + ServerMemberJoin { + id: String, + // Deprecated: use member.id.user + #[deprecated = "Use member.id.user instead"] + user: String, + member: Member, + }, /// User left server ServerMemberLeave { diff --git a/crates/core/database/src/events/server.rs b/crates/core/database/src/events/server.rs index cdaf6418..3c53314c 100644 --- a/crates/core/database/src/events/server.rs +++ b/crates/core/database/src/events/server.rs @@ -1,8 +1,8 @@ -use serde::Deserialize; +use serde::{Serialize, Deserialize}; use super::client::Ping; -#[derive(Deserialize, Debug)] +#[derive(Serialize, Deserialize, Debug)] #[serde(tag = "type")] pub enum ClientMessage { Authenticate { token: String }, diff --git a/crates/core/database/src/models/server_members/model.rs b/crates/core/database/src/models/server_members/model.rs index 6ff439b4..2856cecf 100644 --- a/crates/core/database/src/models/server_members/model.rs +++ b/crates/core/database/src/models/server_members/model.rs @@ -46,6 +46,10 @@ auto_derived_partial!( /// Whether the member is server-wide voice deafened #[serde(skip_serializing_if = "is_true", default = "default_true")] pub can_receive: bool, + + // This value only exists in the database, not the models. + // If it is not-None, the database layer should return None to member fetching queries. + // pub pending_deletion_at: Option }, "PartialMember" ); @@ -68,6 +72,7 @@ auto_derived!( Timeout, CanReceive, CanPublish, + JoinedAt, } /// Member removal intention @@ -110,7 +115,7 @@ impl Member { return Err(create_error!(AlreadyInServer)); } - let member = Member { + let mut member = Member { id: MemberCompositeKey { server: server.id.to_string(), user: user.id.to_string(), @@ -118,7 +123,9 @@ impl Member { ..Default::default() }; - db.insert_member(&member).await?; + if let Some(updated) = db.insert_or_merge_member(&member).await? { + member = updated; + } let should_fetch = channels.is_none(); let mut channels = channels.unwrap_or_default(); @@ -152,6 +159,7 @@ impl Member { EventV1::ServerMemberJoin { id: server.id.clone(), user: user.id.clone(), + member: member.clone().into(), } .p(server.id.clone()) .await; @@ -215,6 +223,7 @@ impl Member { pub fn remove_field(&mut self, field: &FieldsMember) { match field { + FieldsMember::JoinedAt => (), FieldsMember::Avatar => self.avatar = None, FieldsMember::Nickname => self.nickname = None, FieldsMember::Roles => self.roles.clear(), @@ -255,7 +264,7 @@ impl Member { intention: RemovalIntention, silent: bool, ) -> Result<()> { - db.delete_member(&self.id).await?; + db.soft_delete_member(&self.id).await?; EventV1::ServerMemberLeave { id: self.id.server.to_string(), @@ -291,3 +300,74 @@ impl Member { Ok(()) } } + +#[cfg(test)] +mod tests { + use iso8601_timestamp::{Duration, Timestamp}; + use revolt_models::v0::DataCreateServer; + + use crate::{Member, PartialMember, RemovalIntention, Server, User}; + + #[async_std::test] + async fn muted_member_rejoin() { + database_test!(|db| async move { + match db { + crate::Database::Reference(_) => return, + crate::Database::MongoDb(_) => (), + } + let owner = User::create(&db, "Server Owner".to_string(), None, None) + .await + .unwrap(); + + let kickable_user = User::create(&db, "Member".to_string(), None, None) + .await + .unwrap(); + + let server = Server::create( + &db, + DataCreateServer { + name: "Server".to_string(), + description: None, + nsfw: None, + }, + &owner, + false, + ) + .await + .unwrap() + .0; + + Member::create(&db, &server, &owner, None).await.unwrap(); + let mut kickable_member = Member::create(&db, &server, &kickable_user, None) + .await + .unwrap() + .0; + + kickable_member + .update( + &db, + PartialMember { + timeout: Some(Timestamp::now_utc() + Duration::minutes(5)), + ..Default::default() + }, + vec![], + ) + .await + .unwrap(); + + assert!(kickable_member.in_timeout()); + + kickable_member + .remove(&db, &server, RemovalIntention::Kick, false) + .await + .unwrap(); + + let kickable_member = Member::create(&db, &server, &kickable_user, None) + .await + .unwrap() + .0; + + assert!(kickable_member.in_timeout()) + }); + } +} diff --git a/crates/core/database/src/models/server_members/ops.rs b/crates/core/database/src/models/server_members/ops.rs index 51ddd574..1c59bf0f 100644 --- a/crates/core/database/src/models/server_members/ops.rs +++ b/crates/core/database/src/models/server_members/ops.rs @@ -73,13 +73,13 @@ impl ChunkedServerMembersGenerator { #[async_trait] pub trait AbstractServerMembers: Sync + Send { /// Insert a new server member into the database - async fn insert_member(&self, member: &Member) -> Result<()>; + async fn insert_or_merge_member(&self, member: &Member) -> Result>; /// Fetch a server member by their id async fn fetch_member(&self, server_id: &str, user_id: &str) -> Result; /// Fetch all members in a server - async fn fetch_all_members<'a>(&self, server_id: &str) -> Result>; + async fn fetch_all_members(&self, server_id: &str) -> Result>; /// Fetch all members in a server as an iterator async fn fetch_all_members_chunked( @@ -100,10 +100,10 @@ pub trait AbstractServerMembers: Sync + Send { ) -> Result; /// Fetch all memberships for a user - async fn fetch_all_memberships<'a>(&self, user_id: &str) -> Result>; + async fn fetch_all_memberships(&self, user_id: &str) -> Result>; /// Fetch multiple members by their ids - async fn fetch_members<'a>(&self, server_id: &str, ids: &'a [String]) -> Result>; + async fn fetch_members(&self, server_id: &str, ids: &[String]) -> Result>; /// Fetch member count of a server async fn fetch_member_count(&self, server_id: &str) -> Result; @@ -119,6 +119,14 @@ pub trait AbstractServerMembers: Sync + Send { remove: Vec, ) -> Result<()>; - /// Delete a server member by their id - async fn delete_member(&self, id: &MemberCompositeKey) -> Result<()>; + /// Marks a user as no longer a member of a server, while retaining the database value. + /// This is used to keep information such as timeouts in place, but will remove information such as join date and applied roles. + async fn soft_delete_member(&self, id: &MemberCompositeKey) -> Result<()>; + + /// Forcibly delete a server member by their id. + /// This will cancel any pending timeouts or other longer term actions, and they will not be reapplied on rejoin. + async fn force_delete_member(&self, id: &MemberCompositeKey) -> Result<()>; + + /// Fetch all members who have been marked for deletion. + async fn remove_dangling_members(&self) -> Result<()>; } diff --git a/crates/core/database/src/models/server_members/ops/mongodb.rs b/crates/core/database/src/models/server_members/ops/mongodb.rs index 5634eec7..96bb4159 100644 --- a/crates/core/database/src/models/server_members/ops/mongodb.rs +++ b/crates/core/database/src/models/server_members/ops/mongodb.rs @@ -1,4 +1,6 @@ +use bson::Document; use futures::StreamExt; +use iso8601_timestamp::Timestamp; use mongodb::options::ReadConcern; use revolt_result::Result; @@ -11,9 +13,42 @@ static COL: &str = "server_members"; #[async_trait] impl AbstractServerMembers for MongoDb { - /// Insert a new server member into the database - async fn insert_member(&self, member: &Member) -> Result<()> { - query!(self, insert_one, COL, &member).map(|_| ()) + /// Insert a new server member (or use the existing member if one is found) + async fn insert_or_merge_member(&self, member: &Member) -> Result> { + let existing: Result> = query!( + self, + find_one, + COL, + doc! { + "_id.server": &member.id.server, + "_id.user": &member.id.user, + "pending_deletion_at": {"$exists": true} + } + ); + // Update the existing record if it exist, otherwise make a new record + if existing.is_ok_and(|x| x.is_some()) { + self.col::(COL) + .find_one_and_update( + doc! { + "_id.server": &member.id.server, + "_id.user": &member.id.user, + }, + doc! { + "$set": { + "joined_at": member.joined_at.duration_since(Timestamp::UNIX_EPOCH).whole_seconds(), + }, + "$unset": { + "pending_deletion_at": "" + } + }, + ) + .return_document(mongodb::options::ReturnDocument::After) + .await + .map_err(|_| create_database_error!("update_one", COL)) + } else { + query!(self, insert_one, COL, &member).map(|_| ())?; + Ok(None) + } } /// Fetch a server member by their id @@ -24,18 +59,20 @@ impl AbstractServerMembers for MongoDb { COL, doc! { "_id.server": server_id, - "_id.user": user_id + "_id.user": user_id, + "pending_deletion_at": {"$exists": false} } )? .ok_or_else(|| create_error!(NotFound)) } /// Fetch all members in a server - async fn fetch_all_members<'a>(&self, server_id: &str) -> Result> { + async fn fetch_all_members(&self, server_id: &str) -> Result> { Ok(self .col::(COL) .find(doc! { - "_id.server": server_id + "_id.server": server_id, + "pending_deletion_at": {"$exists": false} }) .await .map_err(|_| create_database_error!("find", COL))? @@ -139,11 +176,12 @@ impl AbstractServerMembers for MongoDb { } /// Fetch all memberships for a user - async fn fetch_all_memberships<'a>(&self, user_id: &str) -> Result> { + async fn fetch_all_memberships(&self, user_id: &str) -> Result> { Ok(self .col::(COL) .find(doc! { - "_id.user": user_id + "_id.user": user_id, + "pending_deletion_at": {"$exists": false} }) .await .map_err(|_| create_database_error!("find", COL))? @@ -159,11 +197,12 @@ impl AbstractServerMembers for MongoDb { } /// Fetch multiple members by their ids - async fn fetch_members<'a>(&self, server_id: &str, ids: &'a [String]) -> Result> { + async fn fetch_members(&self, server_id: &str, ids: &[String]) -> Result> { Ok(self .col::(COL) .find(doc! { "_id.server": server_id, + "pending_deletion_at": {"$exists": false}, "_id.user": { "$in": ids } @@ -185,7 +224,8 @@ impl AbstractServerMembers for MongoDb { async fn fetch_member_count(&self, server_id: &str) -> Result { self.col::(COL) .count_documents(doc! { - "_id.server": server_id + "_id.server": server_id, + "pending_deletion_at": {"$exists": false} }) .await .map(|c| c as usize) @@ -196,7 +236,8 @@ impl AbstractServerMembers for MongoDb { async fn fetch_server_count(&self, user_id: &str) -> Result { self.col::(COL) .count_documents(doc! { - "_id.user": user_id + "_id.user": user_id, + "pending_deletion_at": {"$exists": false} }) .await .map(|c| c as usize) @@ -225,8 +266,42 @@ impl AbstractServerMembers for MongoDb { .map(|_| ()) } + /// Marks a member for deletion. + /// This will remove the record if the user has no pending actions (eg. timeout), + /// otherwise will slate the record for deletion by revolt_crond once the actions expire. + async fn soft_delete_member(&self, id: &MemberCompositeKey) -> Result<()> { + let member = self.fetch_member(&id.server, &id.user).await; + if let Ok(member) = member { + if member.in_timeout() { + self.col::(COL) + .update_many( + doc! { + "_id.server": &id.server, + "_id.user": &id.user, + }, + doc! { + "$set": {"pending_deletion_at": format!("{}", member.timeout.unwrap().format())}, + "$unset": { + "joined_at": "", + "avatar": "", + "nickname": "", + "roles": "" + } + }, + ) + .await + .map(|_| ()) + .map_err(|_| create_database_error!("update_many", COL)) + } else { + self.force_delete_member(id).await + } + } else { + Err(create_database_error!("fetch_member", COL)) + } + } + /// Delete a server member by their id - async fn delete_member(&self, id: &MemberCompositeKey) -> Result<()> { + async fn force_delete_member(&self, id: &MemberCompositeKey) -> Result<()> { query!( self, delete_one, @@ -238,11 +313,25 @@ impl AbstractServerMembers for MongoDb { ) .map(|_| ()) } + + async fn remove_dangling_members(&self) -> Result<()> { + let now = Timestamp::now_utc(); + let date = bson::to_bson(&now).expect("Failed to serialize timestamp"); + + self.col::(COL) + .delete_many(doc! { + "pending_deletion_at": {"$lt": date} + }) + .await + .map(|_| ()) + .map_err(|_| create_database_error!("count_documents", COL)) + } } impl IntoDocumentPath for FieldsMember { fn as_path(&self) -> Option<&'static str> { Some(match self { + FieldsMember::JoinedAt => "joined_at", FieldsMember::Avatar => "avatar", FieldsMember::Nickname => "nickname", FieldsMember::Roles => "roles", diff --git a/crates/core/database/src/models/server_members/ops/reference.rs b/crates/core/database/src/models/server_members/ops/reference.rs index ac15d977..3238edbb 100644 --- a/crates/core/database/src/models/server_members/ops/reference.rs +++ b/crates/core/database/src/models/server_members/ops/reference.rs @@ -8,13 +8,13 @@ use super::{AbstractServerMembers, ChunkedServerMembersGenerator}; #[async_trait] impl AbstractServerMembers for ReferenceDb { /// Insert a new server member into the database - async fn insert_member(&self, member: &Member) -> Result<()> { + async fn insert_or_merge_member(&self, member: &Member) -> Result> { let mut server_members = self.server_members.lock().await; if server_members.contains_key(&member.id) { Err(create_database_error!("insert", "member")) } else { server_members.insert(member.id.clone(), member.clone()); - Ok(()) + Ok(None) } } @@ -31,7 +31,7 @@ impl AbstractServerMembers for ReferenceDb { } /// Fetch all members in a server - async fn fetch_all_members<'a>(&self, server_id: &str) -> Result> { + async fn fetch_all_members(&self, server_id: &str) -> Result> { let server_members = self.server_members.lock().await; Ok(server_members .values() @@ -105,7 +105,7 @@ impl AbstractServerMembers for ReferenceDb { } /// Fetch all memberships for a user - async fn fetch_all_memberships<'a>(&self, user_id: &str) -> Result> { + async fn fetch_all_memberships(&self, user_id: &str) -> Result> { let server_members = self.server_members.lock().await; Ok(server_members .values() @@ -115,7 +115,7 @@ impl AbstractServerMembers for ReferenceDb { } /// Fetch multiple members by their ids - async fn fetch_members<'a>(&self, server_id: &str, ids: &'a [String]) -> Result> { + async fn fetch_members(&self, server_id: &str, ids: &[String]) -> Result> { let server_members = self.server_members.lock().await; Ok(ids .iter() @@ -169,8 +169,26 @@ impl AbstractServerMembers for ReferenceDb { } } + /// Soft delete a member + async fn soft_delete_member(&self, id: &MemberCompositeKey) -> Result<()> { + let mut server_members = self.server_members.lock().await; + + let member = server_members.get_mut(id); + if let Some(member) = member { + if member.in_timeout() { + panic!("Soft deletion is not implemented.") + } else if server_members.remove(id).is_some() { + Ok(()) + } else { + Err(create_error!(NotFound)) + } + } else { + Err(create_error!(NotFound)) + } + } + /// Delete a server member by their id - async fn delete_member(&self, id: &MemberCompositeKey) -> Result<()> { + async fn force_delete_member(&self, id: &MemberCompositeKey) -> Result<()> { let mut server_members = self.server_members.lock().await; if server_members.remove(id).is_some() { Ok(()) @@ -178,4 +196,8 @@ impl AbstractServerMembers for ReferenceDb { Err(create_error!(NotFound)) } } + + async fn remove_dangling_members(&self) -> Result<()> { + todo!() + } } diff --git a/crates/core/database/src/util/bridge/v0.rs b/crates/core/database/src/util/bridge/v0.rs index 832081a0..33f7dac6 100644 --- a/crates/core/database/src/util/bridge/v0.rs +++ b/crates/core/database/src/util/bridge/v0.rs @@ -688,6 +688,7 @@ impl From for FieldsMember { crate::FieldsMember::Timeout => FieldsMember::Timeout, crate::FieldsMember::CanReceive => FieldsMember::CanReceive, crate::FieldsMember::CanPublish => FieldsMember::CanPublish, + crate::FieldsMember::JoinedAt => FieldsMember::JoinedAt, } } } @@ -701,6 +702,7 @@ impl From for crate::FieldsMember { FieldsMember::Timeout => crate::FieldsMember::Timeout, FieldsMember::CanReceive => crate::FieldsMember::CanReceive, FieldsMember::CanPublish => crate::FieldsMember::CanPublish, + FieldsMember::JoinedAt => crate::FieldsMember::JoinedAt, } } } diff --git a/crates/core/database/src/util/test_fixtures.rs b/crates/core/database/src/util/test_fixtures.rs index f08fe91b..e4374e82 100644 --- a/crates/core/database/src/util/test_fixtures.rs +++ b/crates/core/database/src/util/test_fixtures.rs @@ -39,7 +39,9 @@ pub async fn load_fixture(db: &Database, input: &str) -> HashMap LoadedFixture::User(user) => db.insert_user(&user).await.unwrap(), LoadedFixture::Channel(channel) => db.insert_channel(&channel).await.unwrap(), LoadedFixture::Server(server) => db.insert_server(&server).await.unwrap(), - LoadedFixture::ServerMember(member) => db.insert_member(&member).await.unwrap(), + LoadedFixture::ServerMember(member) => { + db.insert_or_merge_member(&member).await.unwrap(); + } } } diff --git a/crates/core/models/src/v0/server_members.rs b/crates/core/models/src/v0/server_members.rs index bdd28a31..d1ccb058 100644 --- a/crates/core/models/src/v0/server_members.rs +++ b/crates/core/models/src/v0/server_members.rs @@ -94,6 +94,7 @@ auto_derived!( Timeout, CanReceive, CanPublish, + JoinedAt, } /// Member removal intention diff --git a/crates/core/models/src/v0/users.rs b/crates/core/models/src/v0/users.rs index 3fd6e255..8a7e5f37 100644 --- a/crates/core/models/src/v0/users.rs +++ b/crates/core/models/src/v0/users.rs @@ -255,12 +255,14 @@ auto_derived!( pub flags: i32, } - /// Mutual friends and servers response + /// Mutual friends, servers, groups and DMs response pub struct MutualResponse { /// Array of mutual user IDs that both users are friends with pub users: Vec, /// Array of mutual server IDs that both users are in pub servers: Vec, + /// Array of mutual group and dm IDs that both users are in + pub channels: Vec, } /// Bot information for if the user is a bot diff --git a/crates/core/parser/Cargo.toml b/crates/core/parser/Cargo.toml index a162cee3..a6e1869b 100644 --- a/crates/core/parser/Cargo.toml +++ b/crates/core/parser/Cargo.toml @@ -2,7 +2,8 @@ name = "revolt-parser" version = "0.8.8" edition = "2021" -license = "AGPL-3.0-or-later" +license = "MIT" +authors = ["Zomatree ", "Paul Makles "] description = "Revolt Backend: Message Parser" [dependencies] diff --git a/crates/core/parser/LICENSE b/crates/core/parser/LICENSE new file mode 100644 index 00000000..7c2815b9 --- /dev/null +++ b/crates/core/parser/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2024 Pawel Makles + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/crates/core/parser/src/lib.rs b/crates/core/parser/src/lib.rs index 191540c1..4ebbac63 100644 --- a/crates/core/parser/src/lib.rs +++ b/crates/core/parser/src/lib.rs @@ -4,15 +4,18 @@ use logos::Logos; #[derive(Debug, Clone, Logos, PartialEq)] #[logos(skip "\n")] -pub enum MessageToken { +#[logos(subpattern id="[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}")] +pub enum MessageToken<'a> { #[token("\\")] Escape, - #[regex("(```[^`\n]*)|(``)|`", |lex| lex.slice().to_owned().chars().filter(|&c| c == '`').count())] + #[regex("```[^`\n]*", |_| 3)] + #[regex("``", |_| 2)] + #[regex("`", |_| 1)] CodeblockMarker(usize), - #[regex("<@[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}>", |lex| lex.slice()[2..lex.slice().len() - 1].to_owned())] - UserMention(String), - #[regex("<%[0123456789ABCDEFGHJKMNPQRSTVWXYZ]{26}>", |lex| lex.slice()[2..lex.slice().len() - 1].to_owned())] - RoleMention(String), + #[regex("<@(?&id)>", |lex| &lex.slice()[2..lex.slice().len() - 1])] + UserMention(&'a str), + #[regex("<%(?&id)>", |lex| &lex.slice()[2..lex.slice().len() - 1],)] + RoleMention(&'a str), #[token("@everyone")] MentionEveryone, #[token("@online")] @@ -27,13 +30,13 @@ pub struct MessageResults { pub mentions_online: bool } -struct MessageParserIterator { +struct MessageParserIterator<'a, I> { inner: I, - temp: VecDeque + temp: VecDeque> } -impl> Iterator for MessageParserIterator { - type Item = MessageToken; +impl<'a, I: Iterator>> Iterator for MessageParserIterator<'a, I> { + type Item = MessageToken<'a>; fn next(&mut self) -> Option { if !self.temp.is_empty() { @@ -80,8 +83,8 @@ pub fn parse_message(text: &str) -> MessageResults { match token { MessageToken::Escape => {} MessageToken::CodeblockMarker(_) => {}, - MessageToken::UserMention(id) => { results.user_mentions.insert(id); }, - MessageToken::RoleMention(id) => { results.role_mentions.insert(id); }, + MessageToken::UserMention(id) => { results.user_mentions.insert(id.to_string()); }, + MessageToken::RoleMention(id) => { results.role_mentions.insert(id.to_string()); }, MessageToken::MentionEveryone => results.mentions_everyone = true, MessageToken::MentionOnline => results.mentions_online = true, }; @@ -106,7 +109,7 @@ mod tests { let output = parse_message_iter("Hello <@01FD58YK5W7QRV5H3D64KTQYX3>.").collect::>(); assert_eq!(output.len(), 1); - assert_eq!(output[0], MessageToken::UserMention("01FD58YK5W7QRV5H3D64KTQYX3".to_string())); + assert_eq!(output[0], MessageToken::UserMention("01FD58YK5W7QRV5H3D64KTQYX3")); } #[test] @@ -114,7 +117,7 @@ mod tests { let output = parse_message_iter("Hello <%01FD58YK5W7QRV5H3D64KTQYX3>.").collect::>(); assert_eq!(output.len(), 1); - assert_eq!(output[0], MessageToken::RoleMention("01FD58YK5W7QRV5H3D64KTQYX3".to_string())); + assert_eq!(output[0], MessageToken::RoleMention("01FD58YK5W7QRV5H3D64KTQYX3")); } #[test] @@ -138,8 +141,8 @@ mod tests { let output = parse_message_iter("Hello <@01FD58YK5W7QRV5H3D64KTQYX3>, <%01FD58YK5W7QRV5H3D64KTQYX3>, @everyone and @online.").collect::>(); assert_eq!(output.len(), 4); - assert_eq!(output[0], MessageToken::UserMention("01FD58YK5W7QRV5H3D64KTQYX3".to_string())); - assert_eq!(output[1], MessageToken::RoleMention("01FD58YK5W7QRV5H3D64KTQYX3".to_string())); + assert_eq!(output[0], MessageToken::UserMention("01FD58YK5W7QRV5H3D64KTQYX3")); + assert_eq!(output[1], MessageToken::RoleMention("01FD58YK5W7QRV5H3D64KTQYX3")); assert_eq!(output[2], MessageToken::MentionEveryone); assert_eq!(output[3], MessageToken::MentionOnline); } @@ -149,8 +152,8 @@ mod tests { let output = parse_message_iter("<@01FD58YK5W7QRV5H3D64KTQYX3><%01FD58YK5W7QRV5H3D64KTQYX3>@everyone@online").collect::>(); assert_eq!(output.len(), 4); - assert_eq!(output[0], MessageToken::UserMention("01FD58YK5W7QRV5H3D64KTQYX3".to_string())); - assert_eq!(output[1], MessageToken::RoleMention("01FD58YK5W7QRV5H3D64KTQYX3".to_string())); + assert_eq!(output[0], MessageToken::UserMention("01FD58YK5W7QRV5H3D64KTQYX3")); + assert_eq!(output[1], MessageToken::RoleMention("01FD58YK5W7QRV5H3D64KTQYX3")); assert_eq!(output[2], MessageToken::MentionEveryone); assert_eq!(output[3], MessageToken::MentionOnline); } @@ -170,15 +173,14 @@ mod tests { assert_eq!(output.len(), 5); assert_eq!(output[0], MessageToken::CodeblockMarker(3)); - assert_eq!(output[1], MessageToken::UserMention("01FD58YK5W7QRV5H3D64KTQYX3".to_string())); - assert_eq!(output[2], MessageToken::RoleMention("01FD58YK5W7QRV5H3D64KTQYX3".to_string())); + assert_eq!(output[1], MessageToken::UserMention("01FD58YK5W7QRV5H3D64KTQYX3")); + assert_eq!(output[2], MessageToken::RoleMention("01FD58YK5W7QRV5H3D64KTQYX3")); assert_eq!(output[3], MessageToken::MentionEveryone); assert_eq!(output[4], MessageToken::MentionOnline); } #[test] fn test_inline_codeblock_no_mentions() { - let output = parse_message_iter("`<@01FD58YK5W7QRV5H3D64KTQYX3><%01FD58YK5W7QRV5H3D64KTQYX3>@everyone@online`").collect::>(); assert_eq!(output.len(), 2); @@ -192,12 +194,21 @@ mod tests { assert_eq!(output.len(), 5); assert_eq!(output[0], MessageToken::CodeblockMarker(1)); - assert_eq!(output[1], MessageToken::UserMention("01FD58YK5W7QRV5H3D64KTQYX3".to_string())); - assert_eq!(output[2], MessageToken::RoleMention("01FD58YK5W7QRV5H3D64KTQYX3".to_string())); + assert_eq!(output[1], MessageToken::UserMention("01FD58YK5W7QRV5H3D64KTQYX3")); + assert_eq!(output[2], MessageToken::RoleMention("01FD58YK5W7QRV5H3D64KTQYX3")); assert_eq!(output[3], MessageToken::MentionEveryone); assert_eq!(output[4], MessageToken::MentionOnline); } + #[test] + fn test_codeblock_with_language_no_mentions() { + let output = parse_message_iter("```rust\n<@01FD58YK5W7QRV5H3D64KTQYX3><%01FD58YK5W7QRV5H3D64KTQYX3>@everyone@online```").collect::>(); + + assert_eq!(output.len(), 2); + assert_eq!(output[0], MessageToken::CodeblockMarker(3)); + assert_eq!(output[1], MessageToken::CodeblockMarker(3)); + } + #[test] fn test_double_inline_codeblock() { let output = parse_message_iter("``this should not ping @everyone``").collect::>(); diff --git a/crates/core/permissions/src/models/mod.rs b/crates/core/permissions/src/models/mod.rs index b8788230..ba72b38b 100644 --- a/crates/core/permissions/src/models/mod.rs +++ b/crates/core/permissions/src/models/mod.rs @@ -8,10 +8,18 @@ pub use server::*; pub use user::*; /// Holds a permission value to manipulate. -#[derive(Copy, Clone, Debug)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub struct PermissionValue(u64); impl PermissionValue { + pub fn from_raw(value: u64) -> Self { + Self(value) + } + + pub fn into_raw(self) -> u64 { + self.0 + } + /// Apply a given override to this value pub fn apply(&mut self, v: Override) { self.allow(v.allow); diff --git a/crates/daemons/crond/src/main.rs b/crates/daemons/crond/src/main.rs index 40af6a2b..b232a10a 100644 --- a/crates/daemons/crond/src/main.rs +++ b/crates/daemons/crond/src/main.rs @@ -1,7 +1,7 @@ use revolt_config::configure; use revolt_database::DatabaseInfo; use revolt_result::Result; -use tasks::{file_deletion, prune_dangling_files}; +use tasks::{file_deletion, prune_dangling_files, prune_members}; use tokio::try_join; pub mod tasks; @@ -13,7 +13,8 @@ async fn main() -> Result<()> { let db = DatabaseInfo::Auto.connect().await.expect("database"); try_join!( file_deletion::task(db.clone()), - prune_dangling_files::task(db) + prune_dangling_files::task(db.clone()), + prune_members::task(db.clone()) ) .map(|_| ()) } diff --git a/crates/daemons/crond/src/tasks/mod.rs b/crates/daemons/crond/src/tasks/mod.rs index 2a668f14..060f55d8 100644 --- a/crates/daemons/crond/src/tasks/mod.rs +++ b/crates/daemons/crond/src/tasks/mod.rs @@ -1,2 +1,3 @@ pub mod file_deletion; pub mod prune_dangling_files; +pub mod prune_members; diff --git a/crates/daemons/crond/src/tasks/prune_members.rs b/crates/daemons/crond/src/tasks/prune_members.rs new file mode 100644 index 00000000..e21b7d73 --- /dev/null +++ b/crates/daemons/crond/src/tasks/prune_members.rs @@ -0,0 +1,18 @@ +use std::time::Duration; + +use log::warn; +use revolt_database::Database; +use revolt_result::Result; +use tokio::time::sleep; + +pub async fn task(db: Database) -> Result<()> { + loop { + let success = db.remove_dangling_members().await; + if let Err(s) = success { + revolt_config::capture_error(&s); + warn!("Failed to prune dangling members: {:?}", &s); + } + + sleep(Duration::from_secs(90)).await; + } +} diff --git a/crates/delta/src/routes/bots/invite.rs b/crates/delta/src/routes/bots/invite.rs index 39517c51..ad4f16ad 100644 --- a/crates/delta/src/routes/bots/invite.rs +++ b/crates/delta/src/routes/bots/invite.rs @@ -168,8 +168,8 @@ mod test { .await; match event { - EventV1::ServerMemberJoin { user, .. } => { - assert_eq!(bot.id, user); + EventV1::ServerMemberJoin { member, .. } => { + assert_eq!(bot.id, member.id.user); } _ => unreachable!(), } diff --git a/crates/delta/src/routes/users/find_mutual.rs b/crates/delta/src/routes/users/find_mutual.rs index 9f7fd950..78d5256f 100644 --- a/crates/delta/src/routes/users/find_mutual.rs +++ b/crates/delta/src/routes/users/find_mutual.rs @@ -8,9 +8,9 @@ use revolt_result::{create_error, Result}; use rocket::serde::json::Json; use rocket::State; -/// # Fetch Mutual Friends And Servers +/// # Fetch Mutual Friends, Servers, Groups and DMs /// -/// Retrieve a list of mutual friends and servers with another user. +/// Retrieve a list of mutual friends, servers, groups and DMs with another user. #[openapi(tag = "Relationships")] #[get("//mutual")] pub async fn mutual( @@ -32,5 +32,6 @@ pub async fn mutual( Ok(Json(v0::MutualResponse { users: db.fetch_mutual_user_ids(&user.id, &target.id).await?, servers: db.fetch_mutual_server_ids(&user.id, &target.id).await?, + channels: db.fetch_mutual_channel_ids(&user.id, &target.id).await?, })) } diff --git a/crates/delta/src/util/ratelimiter.rs b/crates/delta/src/util/ratelimiter.rs index 5527ee42..7d00e96d 100644 --- a/crates/delta/src/util/ratelimiter.rs +++ b/crates/delta/src/util/ratelimiter.rs @@ -109,6 +109,9 @@ fn resolve_bucket<'r>(request: &'r rocket::Request<'_>) -> (&'r str, Option<&'r }; if let Some(segment) = segment { + #[allow(clippy::redundant_locals)] + let resource = resource; + let method = request.method(); match (segment, resource, method) { ("users", target, Method::Patch) => ("user_edit", target), diff --git a/crates/services/autumn/Dockerfile b/crates/services/autumn/Dockerfile index 75eba733..40548e2c 100644 --- a/crates/services/autumn/Dockerfile +++ b/crates/services/autumn/Dockerfile @@ -1,11 +1,13 @@ # Build Stage FROM ghcr.io/revoltchat/base:latest AS builder +FROM debian:12 AS debian # Bundle Stage FROM gcr.io/distroless/cc-debian12:nonroot COPY --from=builder /home/rust/src/target/release/revolt-autumn ./ COPY --from=mwader/static-ffmpeg:7.0.2 /ffmpeg /usr/local/bin/ COPY --from=mwader/static-ffmpeg:7.0.2 /ffprobe /usr/local/bin/ +COPY --from=debian /usr/bin/uname /usr/bin/uname EXPOSE 14704 USER nonroot diff --git a/crates/services/january/Dockerfile b/crates/services/january/Dockerfile index 0d61449d..0848291a 100644 --- a/crates/services/january/Dockerfile +++ b/crates/services/january/Dockerfile @@ -1,11 +1,13 @@ # Build Stage FROM ghcr.io/revoltchat/base:latest AS builder +FROM debian:12 AS debian # Bundle Stage FROM gcr.io/distroless/cc-debian12:nonroot COPY --from=builder /home/rust/src/target/release/revolt-january ./ COPY --from=mwader/static-ffmpeg:7.0.2 /ffmpeg /usr/local/bin/ COPY --from=mwader/static-ffmpeg:7.0.2 /ffprobe /usr/local/bin/ +COPY --from=debian /usr/bin/uname /usr/bin/uname EXPOSE 14705 USER nonroot