diff --git a/.config/nextest.toml b/.config/nextest.toml index d50a040b..1f69a63f 100644 --- a/.config/nextest.toml +++ b/.config/nextest.toml @@ -1,2 +1,2 @@ [profile.default] -slow-timeout = { period = "3s", terminate-after = 2 } +slow-timeout = { period = "5s", terminate-after = 10 } diff --git a/Cargo.lock b/Cargo.lock index 4d6226da..31789720 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,12 +1,14 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" version = "0.24.2" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] @@ -25,6 +27,7 @@ checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", "generic-array 0.14.7", + "generic-array 0.14.7", ] [[package]] @@ -55,8 +58,10 @@ dependencies = [ [[package]] name = "ahash" version = "0.7.8" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ "getrandom", "once_cell", @@ -94,8 +99,10 @@ checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" [[package]] name = "allocator-api2" version = "0.2.21" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "amqp_serde" @@ -103,6 +110,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "787581044ca08ad61cdb3a4e21afba087fb8cdba3bb3e23ce69a7d091808014d" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "serde", "serde_bytes_ng", @@ -117,9 +125,10 @@ dependencies = [ "amqp_serde", "async-trait", "bytes 1.9.0", + "bytes 1.9.0", "serde", "serde_bytes_ng", - "tokio 1.43.0", + "tokio 1.42.0", ] [[package]] @@ -137,73 +146,29 @@ dependencies = [ "libc", ] -[[package]] -name = "anstream" -version = "0.6.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" - -[[package]] -name = "anstyle-parse" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" -dependencies = [ - "anstyle", - "once_cell", - "windows-sys 0.59.0", -] - [[package]] name = "anyhow" version = "1.0.95" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "arbitrary" version = "1.4.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" [[package]] name = "arc-swap" version = "1.7.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" [[package]] name = "arg_enum_proc_macro" @@ -213,14 +178,16 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "arrayref" version = "0.3.9" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" @@ -236,14 +203,20 @@ checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" dependencies = [ "quote 1.0.38", "syn 1.0.109", + "quote 1.0.38", + "syn 1.0.109", ] [[package]] name = "async-channel" version = "1.9.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", "concurrent-queue", "event-listener 2.5.3", "futures-core", @@ -255,59 +228,72 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ + "concurrent-queue", "concurrent-queue", "event-listener-strategy", "futures-core", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", ] [[package]] name = "async-executor" version = "1.13.1" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", "fastrand 2.3.0", - "futures-lite 2.6.0", + "futures-lite 2.5.0", "slab", ] [[package]] name = "async-global-executor" version = "2.4.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ + "async-channel 2.3.1", "async-channel 2.3.1", "async-executor", "async-io", "async-lock 3.4.0", + "async-lock 3.4.0", "blocking", - "futures-lite 2.6.0", + "futures-lite 2.5.0", "once_cell", "tokio 0.2.25", - "tokio 1.43.0", + "tokio 1.42.0", ] [[package]] name = "async-io" version = "2.4.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ "async-lock 3.4.0", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.6.0", + "futures-lite 2.5.0", "parking", "polling 3.7.4", "rustix", + "polling 3.7.4", + "rustix", "slab", "tracing", "windows-sys 0.59.0", + "tracing", + "windows-sys 0.59.0", ] [[package]] @@ -317,6 +303,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" dependencies = [ "event-listener 2.5.3", + "event-listener 2.5.3", ] [[package]] @@ -327,24 +314,30 @@ checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ "event-listener 5.4.0", "event-listener-strategy", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", ] [[package]] name = "async-process" version = "2.3.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ + "async-channel 2.3.1", "async-channel 2.3.1", "async-io", "async-lock 3.4.0", "async-signal", "async-task", + "async-lock 3.4.0", + "async-signal", + "async-task", "blocking", "cfg-if", - "event-listener 5.4.0", - "futures-lite 2.6.0", + "event-listener 5.3.1", + "futures-lite 2.5.0", "rustix", "tracing", ] @@ -357,7 +350,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -381,83 +374,78 @@ dependencies = [ [[package]] name = "async-std" version = "1.13.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" +checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" dependencies = [ "async-attributes", "async-channel 1.9.0", + "async-channel 1.9.0", "async-global-executor", "async-io", "async-lock 3.4.0", + "async-lock 3.4.0", "async-process", "crossbeam-utils", "futures-channel", "futures-core", "futures-io", - "futures-lite 2.6.0", + "futures-lite 2.5.0", "gloo-timers", "kv-log-macro", "log", "memchr", "once_cell", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "pin-utils", "slab", "wasm-bindgen-futures", ] -[[package]] -name = "async-std-resolver" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2f8a4a203be3325981310ab243a28e6e4ea55b6519bffce05d41ab60e09ad8" -dependencies = [ - "async-std", - "async-trait", - "futures-io", - "futures-util", - "pin-utils", - "socket2 0.4.10", - "trust-dns-resolver", -] - [[package]] name = "async-stream" version = "0.3.6" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", ] [[package]] name = "async-stream-impl" version = "0.3.6" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "async-task" version = "4.7.1" +version = "4.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.85" +version = "0.1.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +checksum = "1b1244b10dcd56c92219da4e14caa97e312079e185f04ba3eea25061561dc0a0" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -470,16 +458,24 @@ dependencies = [ "futures-io", "futures-util", "log", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "tungstenite", ] [[package]] name = "atomic" version = "0.5.3" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" +[[package]] +name = "atomic" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994" +checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" + [[package]] name = "atomic" version = "0.6.0" @@ -487,13 +483,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994" dependencies = [ "bytemuck", + "bytemuck", ] [[package]] name = "atomic-waker" version = "1.1.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "atty" @@ -508,9 +507,9 @@ dependencies = [ [[package]] name = "authifier" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba4df3b5df5cf1a08d4af71c407fb56a675b6aaf4d1fec704da32595497d73d" +checksum = "edfe88c4a9fcf24b18a216b27c9766966af2a40603d24c7782237afd6ca0d5cd" dependencies = [ "async-std", "async-trait", @@ -520,6 +519,7 @@ dependencies = [ "futures", "handlebars", "iso8601-timestamp 0.1.11", + "iso8601-timestamp 0.1.11", "lazy_static", "lettre", "log", @@ -528,6 +528,7 @@ dependencies = [ "rand 0.8.5", "regex", "reqwest 0.11.27", + "reqwest 0.11.27", "revolt_okapi", "revolt_rocket_okapi", "rocket", @@ -553,13 +554,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" dependencies = [ "autocfg 1.4.0", + "autocfg 1.4.0", ] [[package]] name = "autocfg" version = "1.4.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "av1-grain" @@ -578,17 +582,19 @@ dependencies = [ [[package]] name = "avif-serialize" version = "0.8.2" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62" +checksum = "e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62" dependencies = [ "arrayvec", ] [[package]] name = "aws-config" -version = "1.5.15" +version = "1.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc47e70fc35d054c8fcd296d47a61711f043ac80534a10b4f741904f81e73a90" +checksum = "649316840239f4e58df0b7f620c428f5fababbbca2d504488c641534050bd141" dependencies = [ "aws-credential-types", "aws-runtime", @@ -604,11 +610,13 @@ dependencies = [ "aws-types", "bytes 1.9.0", "fastrand 2.3.0", + "bytes 1.9.0", + "fastrand 2.3.0", "hex", "http 0.2.12", - "ring 0.17.8", + "ring", "time", - "tokio 1.43.0", + "tokio 1.42.0", "tracing", "url", "zeroize", @@ -628,9 +636,9 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.5.4" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee7643696e7fdd74c10f9eb42848a87fe469d35eae9c3323f80aa98f350baac" +checksum = "44f6f1124d6e19ab6daf7f2e615644305dc6cb2d706892a8a8c0b98db35de020" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -643,20 +651,24 @@ dependencies = [ "aws-types", "bytes 1.9.0", "fastrand 2.3.0", + "bytes 1.9.0", + "fastrand 2.3.0", "http 0.2.12", "http-body 0.4.6", + "http-body 0.4.6", "once_cell", "percent-encoding", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "tracing", "uuid", + "uuid", ] [[package]] name = "aws-sdk-s3" -version = "1.71.0" +version = "1.67.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "705cb534fb7b620f540d2fac268d378918dc67d25b173f67edcab3851fe19392" +checksum = "bbc644164269a1e38ce7f2f7373629d3fb3d310c0e3feb5573a29744288b24d3" dependencies = [ "aws-credential-types", "aws-runtime", @@ -673,11 +685,15 @@ dependencies = [ "aws-types", "bytes 1.9.0", "fastrand 2.3.0", + "bytes 1.9.0", + "fastrand 2.3.0", "hex", "hmac", "http 0.2.12", "http-body 0.4.6", "lru 0.12.5", + "http-body 0.4.6", + "lru 0.12.5", "once_cell", "percent-encoding", "regex-lite", @@ -688,9 +704,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.56.0" +version = "1.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12e057fdcb8842de9b83592a70f5b4da0ee10bc0ad278247da1425a742a444d7" +checksum = "cb25f7129c74d36afe33405af4517524df8f74b635af8c2c8e91c1552b8397b2" dependencies = [ "aws-credential-types", "aws-runtime", @@ -702,6 +718,7 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes 1.9.0", + "bytes 1.9.0", "http 0.2.12", "once_cell", "regex-lite", @@ -710,9 +727,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.57.1" +version = "1.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a120ade4a44691b3c5c2ff2fa61b14ed331fdc218397f61ab48d66593012ae2a" +checksum = "d03a3d5ef14851625eafd89660a751776f938bf32f309308b20dcca41c44b568" dependencies = [ "aws-credential-types", "aws-runtime", @@ -724,6 +741,7 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes 1.9.0", + "bytes 1.9.0", "http 0.2.12", "once_cell", "regex-lite", @@ -732,9 +750,9 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.57.0" +version = "1.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115fd4fb663817ed595a5ee4f1649d7aacd861d47462323cb37576ce89271b93" +checksum = "cf3a9f073ae3a53b54421503063dfb87ff1ea83b876f567d92e8b8d9942ba91b" dependencies = [ "aws-credential-types", "aws-runtime", @@ -755,9 +773,9 @@ dependencies = [ [[package]] name = "aws-sigv4" -version = "1.2.7" +version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "690118821e46967b3c4501d67d7d52dd75106a9c54cf36cefa1985cedbe94e05" +checksum = "7d3820e0c08d0737872ff3c7c1f21ebbb6693d832312d6152bf18ef50a5471c2" dependencies = [ "aws-credential-types", "aws-smithy-eventstream", @@ -765,16 +783,19 @@ dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", "bytes 1.9.0", + "bytes 1.9.0", "crypto-bigint 0.5.5", "form_urlencoded", "hex", "hmac", "http 0.2.12", "http 1.2.0", + "http 1.2.0", "once_cell", "p256 0.11.1", + "p256 0.11.1", "percent-encoding", - "ring 0.17.8", + "ring", "sha2", "subtle", "time", @@ -784,32 +805,34 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.4" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa59d1327d8b5053c54bf2eaae63bf629ba9e904434d0835a28ed3c0ed0a614e" +checksum = "427cb637d15d63d6f9aae26358e1c9a9c09d5aa490d64b09354c8217cfef0f28" dependencies = [ "futures-util", - "pin-project-lite 0.2.16", - "tokio 1.43.0", + "pin-project-lite 0.2.15", + "tokio 1.42.0", ] [[package]] name = "aws-smithy-checksums" -version = "0.62.0" +version = "0.60.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f45a1c384d7a393026bc5f5c177105aa9fa68e4749653b985707ac27d77295" +checksum = "ba1a71073fca26775c8b5189175ea8863afb1c9ea2cceb02a5de5ad9dfbaa795" dependencies = [ "aws-smithy-http", "aws-smithy-types", "bytes 1.9.0", + "bytes 1.9.0", "crc32c", "crc32fast", "crc64fast-nvme", "hex", "http 0.2.12", "http-body 0.4.6", + "http-body 0.4.6", "md-5", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "sha1", "sha2", "tracing", @@ -817,41 +840,44 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.6" +version = "0.60.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b18559a41e0c909b77625adf2b8c50de480a8041e5e4a3f5f7d177db70abc5a" +checksum = "cef7d0a272725f87e51ba2bf89f8c21e4df61b9e49ae1ac367a6d69916ef7c90" dependencies = [ "aws-smithy-types", "bytes 1.9.0", + "bytes 1.9.0", "crc32fast", ] [[package]] name = "aws-smithy-http" -version = "0.60.12" +version = "0.60.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7809c27ad8da6a6a68c454e651d4962479e81472aa19ae99e59f9aba1f9713cc" +checksum = "5c8bc3e8fdc6b8d07d976e301c02fe553f72a39b7a9fea820e023268467d7ab6" dependencies = [ "aws-smithy-eventstream", "aws-smithy-runtime-api", "aws-smithy-types", "bytes 1.9.0", + "bytes 1.9.0", "bytes-utils", "futures-core", "http 0.2.12", "http-body 0.4.6", + "http-body 0.4.6", "once_cell", "percent-encoding", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "pin-utils", "tracing", ] [[package]] name = "aws-smithy-json" -version = "0.61.2" +version = "0.61.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "623a51127f24c30776c8b374295f2df78d92517386f77ba30773f15a30ce1422" +checksum = "ee4e69cc50921eb913c6b662f8d909131bb3e6ad6cb6090d3a39b66fc5c52095" dependencies = [ "aws-smithy-types", ] @@ -868,9 +894,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.7.7" +version = "1.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "865f7050bbc7107a6c98a397a9fcd9413690c27fa718446967cf03b2d3ac517e" +checksum = "a05dd41a70fc74051758ee75b5c4db2c0ca070ed9229c3df50e9475cda1cb985" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -878,69 +904,83 @@ dependencies = [ "aws-smithy-types", "bytes 1.9.0", "fastrand 2.3.0", + "bytes 1.9.0", + "fastrand 2.3.0", "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", "http-body 1.0.1", + "http-body 0.4.6", + "http-body 1.0.1", "httparse", "hyper 0.14.32", + "hyper 0.14.32", "hyper-rustls 0.24.2", "once_cell", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "pin-utils", "rustls 0.21.12", - "tokio 1.43.0", + "tokio 1.42.0", "tracing", ] [[package]] name = "aws-smithy-runtime-api" version = "1.7.3" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92165296a47a812b267b4f41032ff8069ab7ff783696d217f0994a0d7ab585cd" +checksum = "92165296a47a812b267b4f41032ff8069ab7ff783696d217f0994a0d7ab585cd" dependencies = [ "aws-smithy-async", "aws-smithy-types", "bytes 1.9.0", + "bytes 1.9.0", "http 0.2.12", "http 1.2.0", - "pin-project-lite 0.2.16", - "tokio 1.43.0", + "pin-project-lite 0.2.15", + "tokio 1.42.0", "tracing", "zeroize", ] [[package]] name = "aws-smithy-types" -version = "1.2.12" +version = "1.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28f6feb647fb5e0d5b50f0472c19a7db9462b74e2fec01bb0b44eedcc834e97" +checksum = "38ddc9bd6c28aeb303477170ddd183760a956a03e083b3902a990238a7e3792d" dependencies = [ "base64-simd", "bytes 1.9.0", + "bytes 1.9.0", "bytes-utils", "futures-core", "http 0.2.12", "http 1.2.0", "http-body 0.4.6", "http-body 1.0.1", + "http 1.2.0", + "http-body 0.4.6", + "http-body 1.0.1", "http-body-util", "itoa", "num-integer", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "pin-utils", "ryu", "serde", "time", - "tokio 1.43.0", + "tokio 1.42.0", "tokio-util", ] [[package]] name = "aws-smithy-xml" version = "0.60.9" +version = "0.60.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab0b0166827aa700d3dc519f72f8b3a91c35d0b8d042dc5d643a91e6f80648fc" +checksum = "ab0b0166827aa700d3dc519f72f8b3a91c35d0b8d042dc5d643a91e6f80648fc" dependencies = [ "xmlparser", ] @@ -955,24 +995,29 @@ dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", "aws-smithy-types", - "rustc_version 0.4.1", + "rustc_version", "tracing", ] [[package]] name = "axum" version = "0.7.9" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", "axum-core", "bytes 1.9.0", + "bytes 1.9.0", "futures-util", "http 1.2.0", "http-body 1.0.1", + "http 1.2.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.5.2", "hyper-util", "itoa", "matchit", @@ -980,14 +1025,14 @@ dependencies = [ "mime", "multer", "percent-encoding", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "rustversion", "serde", "serde_json", "serde_path_to_error", "serde_urlencoded", "sync_wrapper 1.0.2", - "tokio 1.43.0", + "tokio 1.42.0", "tower", "tower-layer", "tower-service", @@ -997,19 +1042,25 @@ dependencies = [ [[package]] name = "axum-core" version = "0.4.5" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" dependencies = [ "async-trait", "bytes 1.9.0", + "bytes 1.9.0", "futures-util", "http 1.2.0", "http-body 1.0.1", + "http 1.2.0", + "http-body 1.0.1", "http-body-util", "mime", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "rustversion", "sync_wrapper 1.0.2", + "sync_wrapper 1.0.2", "tower-layer", "tower-service", "tracing", @@ -1018,21 +1069,27 @@ dependencies = [ [[package]] name = "axum-extra" version = "0.9.6" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" +checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" dependencies = [ "axum", "axum-core", "bytes 1.9.0", "fastrand 2.3.0", + "bytes 1.9.0", + "fastrand 2.3.0", "futures-util", "headers", "http 1.2.0", "http-body 1.0.1", + "http 1.2.0", + "http-body 1.0.1", "http-body-util", "mime", "multer", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "serde", "tower", "tower-layer", @@ -1042,60 +1099,71 @@ dependencies = [ [[package]] name = "axum-macros" version = "0.4.2" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" +checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "axum_typed_multipart" version = "0.12.2" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05679dcdfeccf4cc6a8f45b80318fff8a9908337da1cfeb6acca00562a345b4d" +checksum = "05679dcdfeccf4cc6a8f45b80318fff8a9908337da1cfeb6acca00562a345b4d" dependencies = [ "anyhow", "axum", "axum_typed_multipart_macros", "bytes 1.9.0", + "bytes 1.9.0", "chrono", "futures-core", "futures-util", "tempfile", "thiserror 1.0.69", - "tokio 1.43.0", + "tokio 1.42.0", "uuid", ] [[package]] name = "axum_typed_multipart_macros" version = "0.12.2" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11eeb275b20a4c750c9fe7bf5a750e97e7944563003efd1c82e70c229a612ca1" +checksum = "11eeb275b20a4c750c9fe7bf5a750e97e7944563003efd1c82e70c229a612ca1" dependencies = [ "darling 0.20.10", - "heck 0.5.0", + "heck", "proc-macro-error", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", "ubyte", ] [[package]] name = "backtrace" version = "0.3.74" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", "cfg-if", "libc", "miniz_oxide", + "miniz_oxide", "object", "rustc-demangle", "windows-targets 0.52.6", + "windows-targets 0.52.6", ] [[package]] @@ -1110,6 +1178,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + [[package]] name = "base32" version = "0.4.0" @@ -1119,14 +1193,18 @@ checksum = "23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa" [[package]] name = "base64" version = "0.13.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" version = "0.21.7" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64" @@ -1168,9 +1246,25 @@ dependencies = [ [[package]] name = "binstring" version = "0.1.2" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed79c2a8151273c70956b5e3cdfdc1ff6c1a8b9779ba59c6807d281b32ee2f86" +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bit_field" version = "0.10.2" @@ -1198,65 +1292,91 @@ checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "bitstream-io" version = "2.6.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" +checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" [[package]] name = "bitvec" version = "1.0.1" +name = "bitvec" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", "tap", "wyz", + "funty", + "radium", + "tap", + "wyz", ] [[package]] name = "blake2b_simd" version = "1.0.2" +name = "blake2b_simd" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", "arrayvec", "constant_time_eq", + "arrayref", + "arrayvec", + "constant_time_eq", ] [[package]] name = "block-buffer" version = "0.10.4" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array 0.14.7", + "generic-array 0.14.7", ] [[package]] name = "blocking" version = "1.6.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ + "async-channel 2.3.1", "async-channel 2.3.1", "async-task", "futures-io", - "futures-lite 2.6.0", + "futures-lite 2.5.0", "piper", ] [[package]] name = "bson" version = "2.13.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "068208f2b6fcfa27a7f1ee37488d2bb8ba2640f68f5475d08e1d9130696aba59" +checksum = "068208f2b6fcfa27a7f1ee37488d2bb8ba2640f68f5475d08e1d9130696aba59" dependencies = [ + "ahash 0.8.11", + "base64 0.13.1", + "bitvec", "ahash 0.8.11", "base64 0.13.1", "bitvec", "hex", - "indexmap 2.7.1", + "indexmap 2.7.0", "js-sys", "once_cell", "rand 0.8.5", @@ -1265,31 +1385,41 @@ dependencies = [ "serde_json", "time", "uuid", + "time", + "uuid", ] [[package]] name = "built" version = "0.7.5" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c360505aed52b7ec96a3636c3f039d99103c37d1d9b4f7a8c743d3ea9ffcd03b" +checksum = "c360505aed52b7ec96a3636c3f039d99103c37d1d9b4f7a8c743d3ea9ffcd03b" [[package]] name = "bumpalo" version = "3.16.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" version = "1.21.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" [[package]] name = "byteorder" version = "1.5.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "byteorder-lite" @@ -1306,8 +1436,10 @@ checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" [[package]] name = "bytes" version = "1.9.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "bytes-utils" @@ -1315,6 +1447,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "either", ] @@ -1333,7 +1466,7 @@ dependencies = [ "instant", "once_cell", "thiserror 1.0.69", - "tokio 1.43.0", + "tokio 1.42.0", ] [[package]] @@ -1347,13 +1480,17 @@ dependencies = [ "proc-macro2", "quote 1.0.38", "syn 1.0.109", + "quote 1.0.38", + "syn 1.0.109", ] [[package]] name = "cached_proc_macro_types" version = "0.1.1" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" +checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" [[package]] name = "castaway" @@ -1382,9 +1519,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.10" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" +checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" dependencies = [ "jobserver", "libc", @@ -1400,6 +1537,7 @@ dependencies = [ "byteorder", "fnv", "uuid", + "uuid", ] [[package]] @@ -1421,13 +1559,16 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" version = "0.4.39" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", + "serde", "wasm-bindgen", "windows-targets 0.52.6", ] @@ -1481,11 +1622,14 @@ dependencies = [ [[package]] name = "coarsetime" version = "0.1.35" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4252bf230cb600c19826a575b31c8c9c84c6f11acfab6dfcad2e941b10b6f8e2" +checksum = "4252bf230cb600c19826a575b31c8c9c84c6f11acfab6dfcad2e941b10b6f8e2" dependencies = [ "libc", "wasix", + "wasix", "wasm-bindgen", ] @@ -1504,14 +1648,17 @@ checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "combine" version = "4.6.7" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "futures-core", "memchr", - "pin-project-lite 0.2.16", - "tokio 1.43.0", + "pin-project-lite 0.2.15", + "tokio 1.42.0", "tokio-util", ] @@ -1527,8 +1674,10 @@ dependencies = [ [[package]] name = "config" version = "0.13.4" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23738e11972c7643e4ec947840fc463b6a571afcd3e735bdfce7d03c7a784aca" +checksum = "23738e11972c7643e4ec947840fc463b6a571afcd3e735bdfce7d03c7a784aca" dependencies = [ "async-trait", "json5", @@ -1540,6 +1689,7 @@ dependencies = [ "serde", "serde_json", "toml 0.5.11", + "toml 0.5.11", "yaml-rust", ] @@ -1552,15 +1702,25 @@ checksum = "9d6f2aa4d0537bcc1c74df8755072bd31c1ef1a3a1b85a68e8404a8c353b7b8b" [[package]] name = "const-oid" version = "0.9.6" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "constant_time_eq" version = "0.3.1" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + [[package]] name = "convert_case" version = "0.4.0" @@ -1581,17 +1741,24 @@ dependencies = [ [[package]] name = "cookie-factory" version = "0.3.3" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9885fa71e26b8ab7855e2ec7cae6e9b380edff76cd052e07c683a0319d51b3a2" dependencies = [ "futures", ] +checksum = "9885fa71e26b8ab7855e2ec7cae6e9b380edff76cd052e07c683a0319d51b3a2" +dependencies = [ + "futures", +] [[package]] name = "core-foundation" version = "0.9.4" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -1600,8 +1767,10 @@ dependencies = [ [[package]] name = "core-foundation-sys" version = "0.8.7" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core_maths" @@ -1614,9 +1783,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.17" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] @@ -1648,7 +1817,7 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a47af21622d091a8f0fb295b88bc886ac74efcc613efc19f5d0b21de5c89e47" dependencies = [ - "rustc_version 0.4.1", + "rustc_version", ] [[package]] @@ -1670,16 +1839,6 @@ dependencies = [ "revolt-files", ] -[[package]] -name = "crossbeam-channel" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5e2ee08013e3f228d6d2394116c4549a6df77708442c62d887d83f68ef2ee37" -dependencies = [ - "cbindgen", - "crc", -] - [[package]] name = "crossbeam-channel" version = "0.5.14" @@ -1692,8 +1851,10 @@ dependencies = [ [[package]] name = "crossbeam-deque" version = "0.8.6" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -1711,8 +1872,10 @@ dependencies = [ [[package]] name = "crossbeam-queue" version = "0.3.12" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] @@ -1720,8 +1883,10 @@ dependencies = [ [[package]] name = "crossbeam-utils" version = "0.8.21" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" @@ -1735,6 +1900,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ + "generic-array 0.14.7", "generic-array 0.14.7", "rand_core 0.6.4", "subtle", @@ -1747,10 +1913,12 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ + "generic-array 0.14.7", "generic-array 0.14.7", "rand_core 0.6.4", "subtle", "zeroize", + "zeroize", ] [[package]] @@ -1759,6 +1927,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ + "generic-array 0.14.7", "generic-array 0.14.7", "rand_core 0.6.4", "typenum", @@ -1784,14 +1953,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "ct-codecs" version = "1.1.3" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b916ba8ce9e4182696896f015e8a5ae6081b305f74690baa8465e35f5a142ea4" +checksum = "b916ba8ce9e4182696896f015e8a5ae6081b305f74690baa8465e35f5a142ea4" [[package]] name = "ctr" @@ -1805,8 +1976,10 @@ dependencies = [ [[package]] name = "curl" version = "0.4.47" +version = "0.4.47" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9fb4d13a1be2b58f14d60adba57c9834b78c62fd86c3e76a148f732686e9265" +checksum = "d9fb4d13a1be2b58f14d60adba57c9834b78c62fd86c3e76a148f732686e9265" dependencies = [ "curl-sys", "libc", @@ -1815,13 +1988,17 @@ dependencies = [ "schannel", "socket2 0.5.8", "windows-sys 0.52.0", + "socket2 0.5.8", + "windows-sys 0.52.0", ] [[package]] name = "curl-sys" version = "0.4.78+curl-8.11.0" +version = "0.4.78+curl-8.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eec768341c5c7789611ae51cf6c459099f22e64a5d5d0ce4892434e33821eaf" +checksum = "8eec768341c5c7789611ae51cf6c459099f22e64a5d5d0ce4892434e33821eaf" dependencies = [ "cc", "libc", @@ -1831,6 +2008,7 @@ dependencies = [ "pkg-config", "vcpkg", "windows-sys 0.52.0", + "windows-sys 0.52.0", ] [[package]] @@ -1873,8 +2051,10 @@ dependencies = [ "ident_case", "proc-macro2", "quote 1.0.38", + "quote 1.0.38", "strsim 0.10.0", "syn 1.0.109", + "syn 1.0.109", ] [[package]] @@ -1887,8 +2067,10 @@ dependencies = [ "ident_case", "proc-macro2", "quote 1.0.38", + "quote 1.0.38", "strsim 0.10.0", "syn 1.0.109", + "syn 1.0.109", ] [[package]] @@ -1901,8 +2083,9 @@ dependencies = [ "ident_case", "proc-macro2", "quote 1.0.38", + "quote 1.0.38", "strsim 0.11.1", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -1914,6 +2097,8 @@ dependencies = [ "darling_core 0.13.4", "quote 1.0.38", "syn 1.0.109", + "quote 1.0.38", + "syn 1.0.109", ] [[package]] @@ -1925,6 +2110,8 @@ dependencies = [ "darling_core 0.14.4", "quote 1.0.38", "syn 1.0.109", + "quote 1.0.38", + "syn 1.0.109", ] [[package]] @@ -1935,27 +2122,31 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "dashmap" version = "5.5.3" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", "hashbrown 0.14.5", + "hashbrown 0.14.5", "lock_api", "once_cell", + "once_cell", "parking_lot_core", ] [[package]] name = "data-encoding" -version = "2.7.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e60eed09d8c01d3cee5b7d30acb059b76614c918fa0f992e0dd6eeb10daad6f" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] name = "data-url" @@ -1970,7 +2161,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16a2561fd313df162315935989dceb8c99db4ee1933358270a57a3cfb8c957f3" dependencies = [ "crossbeam-queue", - "tokio 1.43.0", + "tokio 1.42.0", ] [[package]] @@ -1981,13 +2172,16 @@ checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" dependencies = [ "serde", "uuid", + "uuid", ] [[package]] name = "decancer" version = "1.6.5" +version = "1.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "080b09f6adad25c23d8c47c54e52e59b0dc09d079c4b23e0f147dac440359d0d" +checksum = "080b09f6adad25c23d8c47c54e52e59b0dc09d079c4b23e0f147dac440359d0d" [[package]] name = "der" @@ -2010,6 +2204,19 @@ dependencies = [ "zeroize", ] +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid 0.9.6", + "pem-rfc7468 0.7.0", + "const-oid 0.9.6", + "pem-rfc7468 0.6.0", + "zeroize", +] + [[package]] name = "der" version = "0.7.9" @@ -2044,14 +2251,14 @@ dependencies = [ ] [[package]] -name = "derivative" -version = "2.2.0" +name = "derive-where" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 1.0.109", + "syn 2.0.94", ] [[package]] @@ -2060,11 +2267,12 @@ version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ + "convert_case", "convert_case", "proc-macro2", "quote 1.0.38", - "rustc_version 0.4.1", - "syn 2.0.96", + "rustc_version", + "syn 2.0.94", ] [[package]] @@ -2085,6 +2293,7 @@ checksum = "71b28680d8be17a570a2334922518be6adc3f58ecc880cbb404eaeb8624fd867" dependencies = [ "devise_core", "quote 1.0.38", + "quote 1.0.38", ] [[package]] @@ -2097,30 +2306,39 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "digest" version = "0.10.7" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "const-oid 0.9.6", "crypto-common", "subtle", + "block-buffer", + "const-oid 0.9.6", + "crypto-common", + "subtle", ] [[package]] name = "displaydoc" version = "0.2.5" +name = "displaydoc" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -2147,8 +2365,10 @@ dependencies = [ [[package]] name = "dyn-clone" version = "1.0.17" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "ecdsa" @@ -2162,6 +2382,23 @@ dependencies = [ "signature 1.6.4", ] +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der 0.7.9", + "digest", + "elliptic-curve 0.13.8", + "rfc6979 0.4.0", + "signature 2.2.0", + "spki 0.7.3", + "elliptic-curve 0.12.3", + "rfc6979 0.3.1", + "signature 1.6.4", +] + [[package]] name = "ecdsa" version = "0.16.9" @@ -2179,9 +2416,12 @@ dependencies = [ [[package]] name = "ece" version = "2.3.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2ea1d2f2cc974957a4e2575d8e5bb494549bab66338d6320c2789abcfff5746" +checksum = "c2ea1d2f2cc974957a4e2575d8e5bb494549bab66338d6320c2789abcfff5746" dependencies = [ + "base64 0.21.7", "base64 0.21.7", "byteorder", "hex", @@ -2192,13 +2432,16 @@ dependencies = [ "serde", "sha2", "thiserror 1.0.69", + "thiserror 1.0.69", ] [[package]] name = "ed25519-compact" version = "2.1.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" +checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" dependencies = [ "ct-codecs", "getrandom", @@ -2213,8 +2456,10 @@ checksum = "12a0bb14ac04a9fcf170d0bbbef949b44cc492f4452bd20c095636956f653642" [[package]] name = "either" version = "1.13.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "elliptic-curve" @@ -2222,6 +2467,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ + "base16ct 0.1.1", "base16ct 0.1.1", "crypto-bigint 0.4.9", "der 0.6.1", @@ -2236,6 +2482,29 @@ dependencies = [ "zeroize", ] +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct 0.2.0", + "crypto-bigint 0.5.5", + "digest", + "ff 0.13.0", + "generic-array 0.14.7", + "group 0.13.0", + "digest", + "ff 0.12.1", + "generic-array 0.14.7", + "group 0.12.1", + "pkcs8 0.9.0", + "rand_core 0.6.4", + "sec1 0.3.0", + "subtle", + "zeroize", +] + [[package]] name = "elliptic-curve" version = "0.13.8" @@ -2251,8 +2520,11 @@ dependencies = [ "hkdf", "pem-rfc7468 0.7.0", "pkcs8 0.10.2", + "pem-rfc7468 0.7.0", + "pkcs8 0.10.2", "rand_core 0.6.4", "sec1 0.7.3", + "sec1 0.7.3", "subtle", "zeroize", ] @@ -2260,11 +2532,15 @@ dependencies = [ [[package]] name = "email-encoding" version = "0.2.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a87260449b06739ee78d6281c68d2a0ff3e3af64a78df63d3a1aeb3c06997c8a" +checksum = "a87260449b06739ee78d6281c68d2a0ff3e3af64a78df63d3a1aeb3c06997c8a" dependencies = [ "base64 0.22.1", "memchr", + "base64 0.22.1", + "memchr", ] [[package]] @@ -2273,32 +2549,42 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449" +[[package]] +name = "email_address" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449" + [[package]] name = "encoding_rs" version = "0.8.35" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] [[package]] name = "enum-as-inner" -version = "0.4.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "quote 1.0.38", - "syn 1.0.109", + "syn 2.0.94", ] [[package]] name = "enum-iterator" version = "1.5.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fd242f399be1da0a5354aa462d57b4ab2b4ee0683cc552f7c007d2d12d36e94" +checksum = "9fd242f399be1da0a5354aa462d57b4ab2b4ee0683cc552f7c007d2d12d36e94" dependencies = [ "enum-iterator-derive", ] @@ -2306,12 +2592,14 @@ dependencies = [ [[package]] name = "enum-iterator-derive" version = "1.4.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" +checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -2336,8 +2624,10 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "erased-serde" version = "0.3.31" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" +checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" dependencies = [ "serde", ] @@ -2345,18 +2635,23 @@ dependencies = [ [[package]] name = "errno" version = "0.3.10" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", "windows-sys 0.59.0", + "windows-sys 0.59.0", ] [[package]] name = "event-listener" version = "2.5.3" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" @@ -2364,41 +2659,60 @@ version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ + "concurrent-queue", "concurrent-queue", "parking", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", ] [[package]] name = "event-listener-strategy" version = "0.5.3" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ - "event-listener 5.4.0", - "pin-project-lite 0.2.16", + "event-listener 5.3.1", + "pin-project-lite 0.2.15", ] [[package]] name = "exr" version = "1.73.0" +version = "1.73.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" +checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" dependencies = [ "bit_field", "half", "lebe", "miniz_oxide", + "miniz_oxide", "rayon-core", "smallvec", "zune-inflate", ] +[[package]] +name = "fancy-regex" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e24cb5a94bcae1e5408b0effca5cd7172ea3c5755049c5f3af4cd283a165298" +dependencies = [ + "bit-set", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + [[package]] name = "fastrand" version = "1.9.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ "instant", ] @@ -2406,8 +2720,10 @@ dependencies = [ [[package]] name = "fastrand" version = "2.3.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fcm_v1" @@ -2417,6 +2733,7 @@ checksum = "fc9ed4ed7618b2f7581edb6ce28794a10fcc335e196fc2bcf56afee99ad63d10" dependencies = [ "async-trait", "reqwest 0.11.27", + "reqwest 0.11.27", "serde", "serde_json", "yup-oauth2", @@ -2425,8 +2742,10 @@ dependencies = [ [[package]] name = "fdeflate" version = "0.3.7" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" dependencies = [ "simd-adler32", ] @@ -2451,6 +2770,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "ffprobe" version = "0.4.0" @@ -2464,13 +2793,17 @@ dependencies = [ [[package]] name = "figment" version = "0.10.19" +version = "0.10.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" +checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" dependencies = [ + "atomic 0.6.0", "atomic 0.6.0", "pear", "serde", "toml 0.8.19", + "toml 0.8.19", "uncased", "version_check", ] @@ -2496,11 +2829,14 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" version = "1.0.35" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide", + "miniz_oxide", ] [[package]] @@ -2524,6 +2860,12 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" +[[package]] +name = "foldhash" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + [[package]] name = "fontconfig-parser" version = "0.5.7" @@ -2574,12 +2916,15 @@ dependencies = [ [[package]] name = "fred" version = "8.0.6" +version = "8.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b8e3a1339ed45ad8fde94530c4bdcbd5f371a3c6bd3bf57682923792830aa37" +checksum = "4b8e3a1339ed45ad8fde94530c4bdcbd5f371a3c6bd3bf57682923792830aa37" dependencies = [ "arc-swap", "async-trait", "bytes 1.9.0", + "bytes 1.9.0", "bytes-utils", "crossbeam-queue", "float-cmp", @@ -2588,9 +2933,9 @@ dependencies = [ "parking_lot", "rand 0.8.5", "redis-protocol", - "semver 1.0.25", + "semver", "socket2 0.5.8", - "tokio 1.43.0", + "tokio 1.42.0", "tokio-stream", "tokio-util", "url", @@ -2609,6 +2954,12 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "futf" version = "0.1.5" @@ -2624,9 +2975,6 @@ name = "futures" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -2640,8 +2988,10 @@ dependencies = [ [[package]] name = "futures-channel" version = "0.3.31" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -2650,17 +3000,16 @@ dependencies = [ [[package]] name = "futures-core" version = "0.3.31" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -2670,35 +3019,40 @@ dependencies = [ [[package]] name = "futures-io" version = "0.3.31" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" version = "1.13.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ + "fastrand 1.9.0", "fastrand 1.9.0", "futures-core", "futures-io", "memchr", "parking", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "waker-fn", ] [[package]] name = "futures-lite" -version = "2.6.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ "fastrand 2.3.0", "futures-core", "futures-io", "parking", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", ] [[package]] @@ -2709,43 +3063,53 @@ checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" dependencies = [ "futures-channel", "futures-task", - "tokio 1.43.0", + "tokio 1.42.0", ] [[package]] name = "futures-macro" version = "0.3.31" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "futures-sink" version = "0.3.31" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" version = "0.3.31" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" version = "3.0.3" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" version = "0.3.31" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -2754,7 +3118,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "pin-utils", "slab", ] @@ -2771,8 +3135,10 @@ dependencies = [ [[package]] name = "generator" version = "0.7.5" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" dependencies = [ "cc", "libc", @@ -2781,6 +3147,20 @@ dependencies = [ "windows 0.48.0", ] +[[package]] +name = "generator" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" +dependencies = [ + "cfg-if", + "libc", + "log", + "rustversion", + "windows 0.58.0", + "windows 0.48.0", +] + [[package]] name = "generator" version = "0.8.4" @@ -2797,19 +3177,23 @@ dependencies = [ [[package]] name = "generic-array" version = "0.14.7" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", "zeroize", + "version_check", + "zeroize", ] [[package]] name = "generic-array" -version = "1.2.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c8444bc9d71b935156cc0ccab7f622180808af7867b1daae6547d773591703" +checksum = "2cb8bc4c28d15ade99c7e90b219f30da4be5c88e586277e8cbe886beeb868ab2" dependencies = [ "typenum", ] @@ -2826,8 +3210,10 @@ dependencies = [ [[package]] name = "getrandom" version = "0.2.15" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "js-sys", @@ -2838,14 +3224,15 @@ dependencies = [ [[package]] name = "getset" -version = "0.1.4" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded738faa0e88d3abc9d1a13cb11adc2073c400969eeb8793cf7132589959fc" +checksum = "f636605b743120a8d32ed92fc27b6cde1a769f8f936c065151eb66f88ded513c" dependencies = [ + "proc-macro-error2", "proc-macro-error2", "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -2854,6 +3241,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ + "opaque-debug", "opaque-debug", "polyval", ] @@ -2871,14 +3259,18 @@ dependencies = [ [[package]] name = "gimli" version = "0.31.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "git2" version = "0.16.1" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" +checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" dependencies = [ "bitflags 1.3.2", "libc", @@ -2890,14 +3282,18 @@ dependencies = [ [[package]] name = "glob" version = "0.3.2" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "gloo-timers" version = "0.3.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" dependencies = [ "futures-channel", "futures-core", @@ -2916,6 +3312,18 @@ dependencies = [ "subtle", ] +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff 0.13.0", + "ff 0.12.1", + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "group" version = "0.13.0" @@ -2933,15 +3341,16 @@ version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "fnv", "futures-core", "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.7.1", + "indexmap 2.7.0", "slab", - "tokio 1.43.0", + "tokio 1.42.0", "tokio-util", "tracing", ] @@ -2949,18 +3358,21 @@ dependencies = [ [[package]] name = "h2" version = "0.4.7" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ "atomic-waker", "bytes 1.9.0", + "bytes 1.9.0", "fnv", "futures-core", "futures-sink", "http 1.2.0", - "indexmap 2.7.1", + "indexmap 2.7.0", "slab", - "tokio 1.43.0", + "tokio 1.42.0", "tokio-util", "tracing", ] @@ -2978,8 +3390,10 @@ dependencies = [ [[package]] name = "handlebars" version = "4.5.0" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" +checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" dependencies = [ "log", "pest", @@ -2987,42 +3401,58 @@ dependencies = [ "serde", "serde_json", "thiserror 1.0.69", + "thiserror 1.0.69", ] [[package]] name = "hashbrown" version = "0.12.3" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ "ahash 0.7.8", + "ahash 0.7.8", ] [[package]] name = "hashbrown" version = "0.13.2" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" [[package]] name = "hashbrown" version = "0.14.5" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash 0.8.11", "allocator-api2", ] +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", +] [[package]] name = "hashbrown" version = "0.15.2" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ "allocator-api2", "equivalent", "foldhash", + "equivalent", + "foldhash", ] [[package]] @@ -3031,10 +3461,13 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "322106e6bd0cba2d5ead589ddb8150a13d7c4217cf80d7c4f682ca994ccc6aa9" dependencies = [ + "base64 0.21.7", + "bytes 1.9.0", "base64 0.21.7", "bytes 1.9.0", "headers-core", "http 1.2.0", + "http 1.2.0", "httpdate", "mime", "sha1", @@ -3047,14 +3480,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" dependencies = [ "http 1.2.0", + "http 1.2.0", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" @@ -3088,11 +3516,58 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hickory-proto" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "447afdcdb8afb9d0a852af6dc65d9b285ce720ed7a59e42a8bf2e931c67bc1b5" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 1.0.3", + "ipnet", + "once_cell", + "rand 0.8.5", + "thiserror 1.0.69", + "tinyvec", + "tokio 1.42.0", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a2e2aba9c389ce5267d31cf1e4dace82390ae276b0b364ea55630b1fa1b44b4" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot", + "rand 0.8.5", + "resolv-conf", + "smallvec", + "thiserror 1.0.69", + "tokio 1.42.0", + "tracing", +] + [[package]] name = "hkdf" version = "0.12.4" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" dependencies = [ "hmac", ] @@ -3104,30 +3579,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ "digest", + "digest", ] [[package]] name = "hmac-sha1-compact" version = "1.1.5" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18492c9f6f9a560e0d346369b665ad2bdbc89fa9bceca75796584e79042694c3" +checksum = "18492c9f6f9a560e0d346369b665ad2bdbc89fa9bceca75796584e79042694c3" [[package]] name = "hmac-sha256" version = "1.1.8" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a8575493d277c9092b988c780c94737fb9fd8651a1001e16bee3eccfc1baedb" +checksum = "4a8575493d277c9092b988c780c94737fb9fd8651a1001e16bee3eccfc1baedb" dependencies = [ "digest", + "digest", ] [[package]] name = "hmac-sha512" version = "1.1.6" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0b3a0f572aa8389d325f5852b9e0a333a15b0f86ecccbb3fdb6e97cd86dc67c" +checksum = "b0b3a0f572aa8389d325f5852b9e0a333a15b0f86ecccbb3fdb6e97cd86dc67c" dependencies = [ "digest", + "digest", ] [[package]] @@ -3152,7 +3636,7 @@ dependencies = [ "markup5ever", "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -3161,6 +3645,7 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "fnv", "itoa", @@ -3169,9 +3654,12 @@ dependencies = [ [[package]] name = "http" version = "1.2.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "fnv", "itoa", @@ -3180,22 +3668,29 @@ dependencies = [ [[package]] name = "http-body" version = "0.4.6" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "http 0.2.12", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", ] [[package]] name = "http-body" version = "1.0.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes 1.9.0", "http 1.2.0", + "bytes 1.9.0", + "http 1.2.0", ] [[package]] @@ -3204,24 +3699,27 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "futures-util", "http 1.2.0", "http-body 1.0.1", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", ] [[package]] name = "httparse" -version = "1.10.0" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" version = "1.0.3" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" @@ -3235,9 +3733,12 @@ dependencies = [ [[package]] name = "hyper" version = "0.14.32" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "futures-channel", "futures-core", @@ -3245,12 +3746,13 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", + "http-body 0.4.6", "httparse", "httpdate", "itoa", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "socket2 0.5.8", - "tokio 1.43.0", + "tokio 1.42.0", "tower-service", "tracing", "want", @@ -3258,22 +3760,26 @@ dependencies = [ [[package]] name = "hyper" -version = "1.6.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "futures-channel", "futures-util", "h2 0.4.7", "http 1.2.0", "http-body 1.0.1", + "h2 0.4.7", + "http 1.2.0", + "http-body 1.0.1", "httparse", "httpdate", "itoa", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "smallvec", - "tokio 1.43.0", + "tokio 1.42.0", "want", ] @@ -3286,10 +3792,11 @@ dependencies = [ "futures-util", "http 0.2.12", "hyper 0.14.32", + "hyper 0.14.32", "log", "rustls 0.21.12", "rustls-native-certs", - "tokio 1.43.0", + "tokio 1.42.0", "tokio-rustls 0.24.1", ] @@ -3301,11 +3808,11 @@ checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" dependencies = [ "futures-util", "http 1.2.0", - "hyper 1.6.0", + "hyper 1.5.2", "hyper-util", "rustls 0.22.4", "rustls-pki-types", - "tokio 1.43.0", + "tokio 1.42.0", "tokio-rustls 0.25.0", "tower-service", "webpki-roots 0.26.7", @@ -3319,11 +3826,11 @@ checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http 1.2.0", - "hyper 1.6.0", + "hyper 1.5.2", "hyper-util", - "rustls 0.23.21", + "rustls 0.23.20", "rustls-pki-types", - "tokio 1.43.0", + "tokio 1.42.0", "tokio-rustls 0.26.1", "tower-service", ] @@ -3334,10 +3841,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ + "bytes 1.9.0", + "hyper 0.14.32", "bytes 1.9.0", "hyper 0.14.32", "native-tls", - "tokio 1.43.0", + "tokio 1.42.0", "tokio-native-tls", ] @@ -3347,12 +3856,13 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "http-body-util", - "hyper 1.6.0", + "hyper 1.5.2", "hyper-util", "native-tls", - "tokio 1.43.0", + "tokio 1.42.0", "tokio-native-tls", "tower-service", ] @@ -3360,18 +3870,21 @@ dependencies = [ [[package]] name = "hyper-util" version = "0.1.10" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "futures-channel", "futures-util", "http 1.2.0", "http-body 1.0.1", - "hyper 1.6.0", - "pin-project-lite 0.2.16", + "hyper 1.5.2", + "pin-project-lite 0.2.15", "socket2 0.5.8", - "tokio 1.43.0", + "tokio 1.42.0", "tower-service", "tracing", ] @@ -3379,8 +3892,10 @@ dependencies = [ [[package]] name = "iana-time-zone" version = "0.1.61" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -3388,6 +3903,7 @@ dependencies = [ "js-sys", "wasm-bindgen", "windows-core 0.52.0", + "windows-core 0.52.0", ] [[package]] @@ -3514,7 +4030,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -3537,8 +4053,10 @@ dependencies = [ [[package]] name = "idna" version = "0.3.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -3575,6 +4093,37 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + [[package]] name = "if_chain" version = "1.0.2" @@ -3584,15 +4133,17 @@ checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" [[package]] name = "image" version = "0.25.5" +version = "0.25.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" +checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" dependencies = [ "bytemuck", "byteorder-lite", "color_quant", "exr", "gif", - "image-webp 0.2.1", + "image-webp 0.2.0", "num-traits", "png", "qoi", @@ -3616,9 +4167,9 @@ dependencies = [ [[package]] name = "image-webp" -version = "0.2.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b77d01e822461baa8409e156015a1d91735549f0f2c17691bd2d996bef238f7f" +checksum = "e031e8e3d94711a9ccb5d6ea357439ef3dcbed361798bd4071dc4d9793fbe22f" dependencies = [ "byteorder-lite", "quick-error 2.0.1", @@ -3633,8 +4184,10 @@ checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" [[package]] name = "imgref" version = "1.11.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" +checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" [[package]] name = "impl_ops" @@ -3648,6 +4201,8 @@ version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ + "autocfg 1.4.0", + "hashbrown 0.12.3", "autocfg 1.4.0", "hashbrown 0.12.3", "serde", @@ -3655,12 +4210,13 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", "hashbrown 0.15.2", + "hashbrown 0.15.2", "serde", ] @@ -3686,13 +4242,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ "generic-array 0.14.7", + "generic-array 0.14.7", ] [[package]] name = "instant" version = "0.1.13" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -3705,26 +4264,31 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "ipconfig" version = "0.3.2" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ + "socket2 0.5.8", "socket2 0.5.8", "widestring", "windows-sys 0.48.0", "winreg", + "windows-sys 0.48.0", + "winreg", ] [[package]] name = "ipnet" -version = "2.11.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "is-terminal" @@ -3749,6 +4313,7 @@ version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" dependencies = [ + "async-channel 1.9.0", "async-channel 1.9.0", "castaway", "crossbeam-utils", @@ -3757,11 +4322,14 @@ dependencies = [ "encoding_rs", "event-listener 2.5.3", "futures-lite 1.13.0", + "event-listener 2.5.3", + "futures-lite 1.13.0", "http 0.2.12", "log", "mime", "once_cell", "polling 2.8.0", + "polling 2.8.0", "serde", "serde_json", "slab", @@ -3775,9 +4343,12 @@ dependencies = [ [[package]] name = "iso8601-timestamp" version = "0.1.11" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b088f3296223f11d6bd70998132653b30b6f39e6ab4be055c0bda486fa8d11c7" +checksum = "b088f3296223f11d6bd70998132653b30b6f39e6ab4be055c0bda486fa8d11c7" dependencies = [ + "generic-array 0.14.7", "generic-array 0.14.7", "serde", "time", @@ -3786,10 +4357,12 @@ dependencies = [ [[package]] name = "iso8601-timestamp" version = "0.2.17" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d4e5d712dd664b11e778d1cfc06c79ba2700d6bc1771e44fb7b6a4656b487d" +checksum = "24d4e5d712dd664b11e778d1cfc06c79ba2700d6bc1771e44fb7b6a4656b487d" dependencies = [ - "generic-array 1.2.0", + "generic-array 1.1.1", "schemars", "serde", "time", @@ -3816,8 +4389,10 @@ dependencies = [ [[package]] name = "itoa" version = "1.0.14" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jobserver" @@ -3836,10 +4411,11 @@ checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "once_cell", "wasm-bindgen", ] @@ -3871,8 +4447,10 @@ dependencies = [ [[package]] name = "jwt-simple" version = "0.11.9" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357892bb32159d763abdea50733fadcb9a8e1c319a9aa77592db8555d05af83e" +checksum = "357892bb32159d763abdea50733fadcb9a8e1c319a9aa77592db8555d05af83e" dependencies = [ "anyhow", "binstring", @@ -3884,6 +4462,7 @@ dependencies = [ "hmac-sha512", "k256", "p256 0.13.2", + "p256 0.13.2", "p384", "rand 0.8.5", "rsa", @@ -3891,14 +4470,18 @@ dependencies = [ "serde_json", "spki 0.6.0", "thiserror 1.0.69", + "spki 0.6.0", + "thiserror 1.0.69", "zeroize", ] [[package]] name = "jxl-bitstream" version = "0.4.1" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5855ff16398ffbcf81fee52c41ca65326499c8764b21bb9952c367ace98995fb" +checksum = "5855ff16398ffbcf81fee52c41ca65326499c8764b21bb9952c367ace98995fb" dependencies = [ "tracing", ] @@ -3906,8 +4489,10 @@ dependencies = [ [[package]] name = "jxl-coding" version = "0.4.1" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da5b5093904e940bc11ef50e872c7bdf7b6e88653f012b925f8479daf212b5c9" +checksum = "da5b5093904e940bc11ef50e872c7bdf7b6e88653f012b925f8479daf212b5c9" dependencies = [ "jxl-bitstream", "tracing", @@ -4038,15 +4623,21 @@ dependencies = [ [[package]] name = "k256" version = "0.13.4" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ "cfg-if", "ecdsa 0.16.9", "elliptic-curve 0.13.8", "once_cell", + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", + "once_cell", "sha2", "signature 2.2.0", + "signature 2.2.0", ] [[package]] @@ -4083,7 +4674,7 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "spin 0.9.8", + "spin", ] [[package]] @@ -4095,37 +4686,47 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "lettre" version = "0.10.4" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76bd09637ae3ec7bd605b8e135e757980b3968430ff2b1a4a94fb7769e50166d" +checksum = "76bd09637ae3ec7bd605b8e135e757980b3968430ff2b1a4a94fb7769e50166d" dependencies = [ + "base64 0.21.7", "base64 0.21.7", "email-encoding", "email_address", "fastrand 1.9.0", + "email_address", + "fastrand 1.9.0", "futures-util", "hostname", "httpdate", "idna 0.3.0", + "idna 0.3.0", "mime", "native-tls", "nom", "once_cell", "quoted_printable", "socket2 0.4.10", - "tokio 1.43.0", + "tokio 1.42.0", ] [[package]] name = "libc" version = "0.2.169" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libfuzzer-sys" version = "0.4.8" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b9569d2f74e257076d8c6bfa73fb505b46b851e51ddaecc825944aa3bed17fa" +checksum = "9b9569d2f74e257076d8c6bfa73fb505b46b851e51ddaecc825944aa3bed17fa" dependencies = [ "arbitrary", "cc", @@ -4134,8 +4735,10 @@ dependencies = [ [[package]] name = "libgit2-sys" version = "0.14.2+1.5.1" +version = "0.14.2+1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4" +checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4" dependencies = [ "cc", "libc", @@ -4146,8 +4749,10 @@ dependencies = [ [[package]] name = "libloading" version = "0.8.6" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", "windows-targets 0.52.6", @@ -4156,14 +4761,16 @@ dependencies = [ [[package]] name = "libm" version = "0.2.11" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "libnghttp2-sys" -version = "0.1.11+1.64.0" +version = "0.1.10+1.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6c24e48a7167cffa7119da39d577fa482e66c688a4aac016bee862e1a713c4" +checksum = "959c25552127d2e1fa72f0e52548ec04fc386e827ba71a7bd01db46a447dc135" dependencies = [ "cc", "libc", @@ -4181,9 +4788,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.21" +version = "1.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" dependencies = [ "cc", "libc", @@ -4194,8 +4801,10 @@ dependencies = [ [[package]] name = "linked-hash-map" version = "0.5.6" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linkify" @@ -4219,7 +4828,7 @@ dependencies = [ name = "linux-raw-sys" version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "litemap" @@ -4227,62 +4836,15 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" -[[package]] -name = "livekit-api" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bccba8f66e9eeef0edd98470bee3212ca4f4468793f18264995feb1ce4ab45dc" -dependencies = [ - "base64 0.21.7", - "http 0.2.12", - "jsonwebtoken", - "livekit-protocol", - "log", - "parking_lot", - "prost", - "reqwest 0.11.27", - "scopeguard", - "serde", - "serde_json", - "sha2", - "thiserror 1.0.69", - "url", -] - -[[package]] -name = "livekit-protocol" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a3554533d83fb849cb140641edcbf48628980ef816f50002202368fe908fb85" -dependencies = [ - "futures-util", - "livekit-runtime", - "parking_lot", - "pbjson", - "pbjson-types", - "prost", - "prost-types", - "serde", - "thiserror 1.0.69", - "tokio 1.43.0", -] - -[[package]] -name = "livekit-runtime" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ae53eb874eb86e96e8ccffc31b5a00926d46174cbcb1c24ce4e57b1fcc5c8f6" -dependencies = [ - "tokio 1.43.0", - "tokio-stream", -] - [[package]] name = "lock_api" version = "0.4.12" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ + "autocfg 1.4.0", "autocfg 1.4.0", "scopeguard", ] @@ -4304,6 +4866,7 @@ checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" dependencies = [ "cfg-if", "generator 0.7.5", + "generator 0.7.5", "scoped-tls", "serde", "serde_json", @@ -4324,6 +4887,19 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "loom" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" +dependencies = [ + "cfg-if", + "generator 0.8.4", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + [[package]] name = "loop9" version = "0.1.5" @@ -4336,28 +4912,37 @@ dependencies = [ [[package]] name = "lru" version = "0.7.8" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" dependencies = [ "hashbrown 0.12.3", + "hashbrown 0.12.3", ] [[package]] name = "lru" version = "0.11.1" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4a83fb7698b3643a0e34f9ae6f2e8f0178c0fd42f8b59d493aa271ff3a5bf21" +checksum = "a4a83fb7698b3643a0e34f9ae6f2e8f0178c0fd42f8b59d493aa271ff3a5bf21" dependencies = [ "hashbrown 0.14.5", + "hashbrown 0.14.5", ] [[package]] name = "lru" version = "0.12.5" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ "hashbrown 0.15.2", + "hashbrown 0.15.2", ] [[package]] @@ -4413,8 +4998,10 @@ dependencies = [ [[package]] name = "matches" version = "0.1.10" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matchit" @@ -4435,11 +5022,15 @@ dependencies = [ [[package]] name = "md-5" version = "0.10.6" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", "digest", + "cfg-if", + "digest", ] [[package]] @@ -4460,11 +5051,15 @@ dependencies = [ [[package]] name = "metrics" version = "0.23.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "884adb57038347dfbaf2d5065887b6cf4312330dc8e94bc30a1a839bd79d3261" +checksum = "884adb57038347dfbaf2d5065887b6cf4312330dc8e94bc30a1a839bd79d3261" dependencies = [ "ahash 0.8.11", "portable-atomic", + "ahash 0.8.11", + "portable-atomic", ] [[package]] @@ -4481,10 +5076,11 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.3" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ + "adler2", "adler2", "simd-adler32", ] @@ -4492,8 +5088,10 @@ dependencies = [ [[package]] name = "mio" version = "1.0.3" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "wasi", @@ -4503,8 +5101,10 @@ dependencies = [ [[package]] name = "mobc" version = "0.8.5" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "316a7d198b51958a0ab57248bf5f42d8409551203cb3c821d5925819a8d5415f" +checksum = "316a7d198b51958a0ab57248bf5f42d8409551203cb3c821d5925819a8d5415f" dependencies = [ "async-std", "async-trait", @@ -4515,7 +5115,7 @@ dependencies = [ "log", "metrics", "thiserror 1.0.69", - "tokio 1.43.0", + "tokio 1.42.0", "tracing", "tracing-subscriber", ] @@ -4523,18 +5123,21 @@ dependencies = [ [[package]] name = "mobc-redis" version = "0.8.2" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e90cc63bd181da5c1f826427d26a63ab0ad1927462b2411aaa86e5f6be3d6b1" +checksum = "5e90cc63bd181da5c1f826427d26a63ab0ad1927462b2411aaa86e5f6be3d6b1" dependencies = [ "mobc", "redis", + "redis", ] [[package]] name = "moka" -version = "0.12.10" +version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" +checksum = "23db87a7f248211f6a7c8644a1b750541f8a4c68ae7de0f908860e44c0c201f6" dependencies = [ "async-lock 3.4.0", "crossbeam-channel", @@ -4543,61 +5146,78 @@ dependencies = [ "event-listener 5.4.0", "futures-util", "loom 0.7.2", + "loom 0.7.2", "parking_lot", - "portable-atomic", - "rustc_version 0.4.1", + "quanta", + "rustc_version", "smallvec", "tagptr", "thiserror 1.0.69", "uuid", + "thiserror 1.0.69", + "uuid", ] [[package]] name = "mongodb" -version = "2.6.1" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16928502631c0db72214720aa479c722397fe5aed6bf1c740a3830b3fe4bfcfe" +checksum = "ff1f6edf7fe8828429647a2200f684681ca6d5a33b45edc3140c81390d852301" dependencies = [ - "async-std", - "async-std-resolver", "async-trait", "base64 0.13.1", + "base64 0.13.1", "bitflags 1.3.2", "bson", "chrono", - "derivative", + "derive-where", "derive_more", "futures-core", "futures-executor", "futures-io", + "futures-io", "futures-util", "hex", + "hickory-proto", + "hickory-resolver", "hmac", - "lazy_static", "md-5", + "mongodb-internal-macros", + "once_cell", "pbkdf2", "percent-encoding", "rand 0.8.5", "rustc_version_runtime", - "rustls 0.20.9", + "rustls 0.21.12", "rustls-pemfile 1.0.4", "serde", + "serde_bytes", "serde_with", "sha-1", + "sha-1", "sha2", - "socket2 0.4.10", + "socket2 0.5.8", "stringprep", - "strsim 0.10.0", + "strsim 0.11.1", "take_mut", "thiserror 1.0.69", - "tokio 1.43.0", - "tokio-rustls 0.23.4", + "tokio 1.42.0", + "tokio-rustls 0.24.1", "tokio-util", - "trust-dns-proto", - "trust-dns-resolver", "typed-builder", "uuid", - "webpki-roots 0.22.6", + "webpki-roots 0.25.4", +] + +[[package]] +name = "mongodb-internal-macros" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b07bfd601af78e39384707a8e80041946c98260e3e0190e294ee7435823e6bf" +dependencies = [ + "proc-macro2", + "quote 1.0.38", + "syn 2.0.94", ] [[package]] @@ -4606,15 +5226,17 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "encoding_rs", "futures-util", "http 1.2.0", + "http 1.2.0", "httparse", "memchr", "mime", - "spin 0.9.8", - "tokio 1.43.0", + "spin", + "tokio 1.42.0", "tokio-util", "version_check", ] @@ -4642,9 +5264,9 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.13" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dab59f8e050d5df8e4dd87d9206fb6f65a483e20ac9fda365ade4fab353196c" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ "libc", "log", @@ -4667,7 +5289,7 @@ dependencies = [ "libloading", "neon-macros", "once_cell", - "semver 1.0.25", + "semver", "send_wrapper", "smallvec", ] @@ -4679,7 +5301,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6813fde79b646e47e7ad75f480aa80ef76a5d9599e2717407961531169ee38b" dependencies = [ "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", "syn-mid", ] @@ -4703,8 +5325,10 @@ checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "nom" version = "7.1.3" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", @@ -4719,8 +5343,10 @@ checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" [[package]] name = "ntapi" version = "0.4.1" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" dependencies = [ "winapi", ] @@ -4735,6 +5361,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + [[package]] name = "num" version = "0.4.3" @@ -4790,6 +5426,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-derive" version = "0.4.2" @@ -4798,7 +5440,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -4816,6 +5458,7 @@ version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ + "autocfg 1.4.0", "autocfg 1.4.0", "num-integer", "num-traits", @@ -4838,6 +5481,7 @@ version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ + "autocfg 1.4.0", "autocfg 1.4.0", "libm", ] @@ -4845,9 +5489,12 @@ dependencies = [ [[package]] name = "num_cpus" version = "1.16.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ + "hermit-abi 0.3.9", "hermit-abi 0.3.9", "libc", ] @@ -4855,10 +5502,13 @@ dependencies = [ [[package]] name = "num_enum" version = "0.5.11" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ "num_enum_derive 0.5.11", + "num_enum_derive 0.5.11", ] [[package]] @@ -4873,13 +5523,17 @@ dependencies = [ [[package]] name = "num_enum_derive" version = "0.5.11" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ "proc-macro-crate", "proc-macro2", "quote 1.0.38", "syn 1.0.109", + "quote 1.0.38", + "syn 1.0.109", ] [[package]] @@ -4891,7 +5545,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -4906,8 +5560,10 @@ dependencies = [ [[package]] name = "object" version = "0.36.7" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] @@ -4915,22 +5571,26 @@ dependencies = [ [[package]] name = "once_cell" version = "1.20.2" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "opaque-debug" version = "0.3.1" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.69" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e534d133a060a3c19daec1eb3e98ec6f4685978834f2dbadfe2ec215bab64e" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.6.0", "cfg-if", "foreign-types", "libc", @@ -4942,12 +5602,14 @@ dependencies = [ [[package]] name = "openssl-macros" version = "0.1.1" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -4959,8 +5621,10 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" version = "0.9.104" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -4976,24 +5640,26 @@ checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a" dependencies = [ "dlv-list", "hashbrown 0.12.3", + "hashbrown 0.12.3", ] [[package]] name = "os_info" -version = "3.9.2" +version = "3.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e6520c8cc998c5741ee68ec1dc369fc47e5f0ea5320018ecf2a1ccd6328f48b" +checksum = "eb6651f4be5e39563c4fe5cc8326349eb99a25d805a3493f791d5bfd0269e430" dependencies = [ "log", "serde", "windows-sys 0.52.0", + "windows-sys 0.52.0", ] [[package]] name = "outref" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" +checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a" [[package]] name = "overload" @@ -5012,6 +5678,20 @@ dependencies = [ "sha2", ] +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", + "primeorder", + "ecdsa 0.14.8", + "elliptic-curve 0.12.3", + "sha2", +] + [[package]] name = "p256" version = "0.13.2" @@ -5027,9 +5707,14 @@ dependencies = [ [[package]] name = "p384" version = "0.13.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" +checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" dependencies = [ + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", + "primeorder", "ecdsa 0.16.9", "elliptic-curve 0.13.8", "primeorder", @@ -5039,14 +5724,18 @@ dependencies = [ [[package]] name = "parking" version = "2.2.1" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" version = "0.12.3" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -5055,14 +5744,17 @@ dependencies = [ [[package]] name = "parking_lot_core" version = "0.9.10" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", "windows-targets 0.52.6", + "windows-targets 0.52.6", ] [[package]] @@ -5074,53 +5766,20 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pathdiff" version = "0.2.3" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" -[[package]] -name = "pbjson" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1030c719b0ec2a2d25a5df729d6cff1acf3cc230bf766f4f97833591f7577b90" -dependencies = [ - "base64 0.21.7", - "serde", -] - -[[package]] -name = "pbjson-build" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2580e33f2292d34be285c5bc3dba5259542b083cfad6037b6d70345f24dcb735" -dependencies = [ - "heck 0.4.1", - "itertools 0.11.0", - "prost", - "prost-types", -] - -[[package]] -name = "pbjson-types" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18f596653ba4ac51bdecbb4ef6773bc7f56042dc13927910de1684ad3d32aa12" -dependencies = [ - "bytes 1.9.0", - "chrono", - "pbjson", - "pbjson-build", - "prost", - "prost-build", - "serde", -] - [[package]] name = "pbkdf2" version = "0.11.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ "digest", + "digest", ] [[package]] @@ -5143,7 +5802,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -5152,6 +5811,7 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" dependencies = [ + "base64 0.13.1", "base64 0.13.1", "once_cell", "regex", @@ -5164,6 +5824,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" dependencies = [ "base64 0.13.1", + "base64 0.13.1", ] [[package]] @@ -5194,6 +5855,15 @@ dependencies = [ "base64ct", ] +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -5203,19 +5873,23 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" version = "2.7.15" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" +checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", - "thiserror 2.0.11", + "thiserror 2.0.9", "ucd-trie", ] [[package]] name = "pest_derive" version = "2.7.15" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" +checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" dependencies = [ "pest", "pest_generator", @@ -5224,37 +5898,32 @@ dependencies = [ [[package]] name = "pest_generator" version = "2.7.15" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" +checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "pest_meta" version = "2.7.15" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" +checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" dependencies = [ + "once_cell", "once_cell", "pest", "sha2", ] -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap 2.7.1", -] - [[package]] name = "phf" version = "0.10.1" @@ -5324,7 +5993,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -5353,22 +6022,22 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project" -version = "1.1.8" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.8" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -5379,9 +6048,9 @@ checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -5400,6 +6069,17 @@ dependencies = [ "futures-io", ] +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.3.0", + "futures-io", +] + [[package]] name = "pkcs1" version = "0.4.1" @@ -5409,6 +6089,8 @@ dependencies = [ "der 0.6.1", "pkcs8 0.9.0", "spki 0.6.0", + "pkcs8 0.9.0", + "spki 0.6.0", "zeroize", ] @@ -5422,6 +6104,17 @@ dependencies = [ "spki 0.6.0", ] +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der 0.7.9", + "spki 0.7.3", + "spki 0.6.0", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -5435,35 +6128,45 @@ dependencies = [ [[package]] name = "pkg-config" version = "0.3.31" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "png" version = "0.17.16" +version = "0.17.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" dependencies = [ "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", "miniz_oxide", + "miniz_oxide", ] [[package]] name = "polling" version = "2.8.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ + "autocfg 1.4.0", + "bitflags 1.3.2", "autocfg 1.4.0", "bitflags 1.3.2", "cfg-if", "concurrent-queue", + "concurrent-queue", "libc", "log", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "windows-sys 0.48.0", ] @@ -5476,7 +6179,7 @@ dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi 0.4.0", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "rustix", "tracing", "windows-sys 0.59.0", @@ -5491,6 +6194,7 @@ dependencies = [ "cfg-if", "cpufeatures", "opaque-debug", + "opaque-debug", "universal-hash", ] @@ -5506,14 +6210,31 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +[[package]] +name = "portable-atomic" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.20" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ "zerocopy", ] +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "precomputed-hash" @@ -5531,16 +6252,6 @@ dependencies = [ "log", ] -[[package]] -name = "prettyplease" -version = "0.2.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" -dependencies = [ - "proc-macro2", - "syn 2.0.96", -] - [[package]] name = "primeorder" version = "0.13.6" @@ -5553,11 +6264,15 @@ dependencies = [ [[package]] name = "proc-macro-crate" version = "1.3.1" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", "toml_edit 0.19.15", + "once_cell", + "toml_edit 0.19.15", ] [[package]] @@ -5570,6 +6285,8 @@ dependencies = [ "proc-macro2", "quote 1.0.38", "syn 1.0.109", + "quote 1.0.38", + "syn 1.0.109", "version_check", ] @@ -5581,6 +6298,7 @@ checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2", "quote 1.0.38", + "quote 1.0.38", "version_check", ] @@ -5603,14 +6321,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -5623,7 +6341,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", "version_check", "yansi", ] @@ -5631,8 +6349,10 @@ dependencies = [ [[package]] name = "profiling" version = "1.0.16" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" +checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" dependencies = [ "profiling-procmacros", ] @@ -5640,18 +6360,22 @@ dependencies = [ [[package]] name = "profiling-procmacros" version = "1.0.16" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" +checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" dependencies = [ "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "prometheus" version = "0.13.4" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" dependencies = [ "cfg-if", "fnv", @@ -5659,6 +6383,7 @@ dependencies = [ "memchr", "parking_lot", "thiserror 1.0.69", + "thiserror 1.0.69", ] [[package]] @@ -5672,10 +6397,10 @@ dependencies = [ ] [[package]] -name = "prost-build" -version = "0.12.6" +name = "quanta" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" +checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" dependencies = [ "bytes 1.9.0", "heck 0.5.0", @@ -5750,8 +6475,10 @@ checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" [[package]] name = "quote" version = "1.0.38" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -5759,9 +6486,17 @@ dependencies = [ [[package]] name = "quoted_printable" version = "0.4.8" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3866219251662ec3b26fc217e3e05bf9c4f84325234dfb96bf0bf840889e49" +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +checksum = "5a3866219251662ec3b26fc217e3e05bf9c4f84325234dfb96bf0bf840889e49" + [[package]] name = "radium" version = "0.7.0" @@ -5936,6 +6671,7 @@ dependencies = [ "simd_helpers", "system-deps", "thiserror 1.0.69", + "thiserror 1.0.69", "v_frame", "wasm-bindgen", ] @@ -5943,8 +6679,10 @@ dependencies = [ [[package]] name = "ravif" version = "0.11.11" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" +checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" dependencies = [ "avif-serialize", "imgref", @@ -5955,6 +6693,15 @@ dependencies = [ "rgb", ] +[[package]] +name = "raw-cpuid" +version = "11.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ab240315c661615f2ee9f0f2cd32d5a7343a84d5ebcccb99d46e6637565e7b0" +dependencies = [ + "bitflags 2.6.0", +] + [[package]] name = "rayon" version = "1.10.0" @@ -5986,20 +6733,22 @@ dependencies = [ [[package]] name = "redis" -version = "0.23.1" -source = "git+https://github.com/revoltchat/redis-rs?rev=f8ca28ab85da59d2ccde526b4d2fb390eff5a5f9#f8ca28ab85da59d2ccde526b4d2fb390eff5a5f9" +version = "0.23.3" +source = "git+https://github.com/revoltchat/redis-rs?rev=523b2937367e17bd0073722bf6e23d06042cb4e4#523b2937367e17bd0073722bf6e23d06042cb4e4" dependencies = [ "async-std", "async-trait", "bytes 1.9.0", + "bytes 1.9.0", "combine", "futures-util", "itoa", "percent-encoding", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "ryu", "sha1_smol", - "tokio 1.43.0", + "socket2 0.4.10", + "tokio 1.42.0", "tokio-util", "url", ] @@ -6015,6 +6764,7 @@ dependencies = [ "mobc", "mobc-redis", "redis", + "redis", "rmp-serde", "serde", "serde_json", @@ -6026,6 +6776,7 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c31deddf734dc0a39d3112e73490e88b61a05e83e074d211f348404cee4d2c6" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "bytes-utils", "cookie-factory", @@ -6037,17 +6788,21 @@ dependencies = [ [[package]] name = "redox_syscall" version = "0.5.8" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.6.0", ] [[package]] name = "ref-cast" version = "1.0.23" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" +checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" dependencies = [ "ref-cast-impl", ] @@ -6055,23 +6810,28 @@ dependencies = [ [[package]] name = "ref-cast-impl" version = "1.0.23" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" +checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "regex" version = "1.11.1" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", "regex-automata 0.4.9", + "regex-automata 0.4.9", "regex-syntax 0.8.5", ] @@ -6082,13 +6842,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ "regex-syntax 0.6.29", + "regex-syntax 0.6.29", ] [[package]] name = "regex-automata" version = "0.4.9" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -6104,8 +6867,10 @@ checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" [[package]] name = "regex-syntax" version = "0.6.29" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" @@ -6116,9 +6881,13 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" version = "0.11.27" +version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ + "base64 0.21.7", + "bytes 1.9.0", "base64 0.21.7", "bytes 1.9.0", "encoding_rs", @@ -6128,6 +6897,8 @@ dependencies = [ "http 0.2.12", "http-body 0.4.6", "hyper 0.14.32", + "http-body 0.4.6", + "hyper 0.14.32", "hyper-tls 0.5.0", "ipnet", "js-sys", @@ -6135,40 +6906,49 @@ dependencies = [ "mime", "native-tls", "once_cell", + "once_cell", "percent-encoding", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", "sync_wrapper 0.1.2", "system-configuration 0.5.1", - "tokio 1.43.0", + "tokio 1.42.0", "tokio-native-tls", "tower-service", + "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "winreg", + "winreg", ] [[package]] name = "reqwest" version = "0.12.12" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64 0.22.1", "bytes 1.9.0", + "bytes 1.9.0", "encoding_rs", "futures-core", "futures-util", "h2 0.4.7", "http 1.2.0", "http-body 1.0.1", + "h2 0.4.7", + "http 1.2.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.5.2", "hyper-rustls 0.27.5", "hyper-tls 0.6.0", "hyper-util", @@ -6179,22 +6959,24 @@ dependencies = [ "native-tls", "once_cell", "percent-encoding", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "rustls-pemfile 2.2.0", "serde", "serde_json", "serde_urlencoded", "sync_wrapper 1.0.2", "system-configuration 0.6.1", - "tokio 1.43.0", + "tokio 1.42.0", "tokio-native-tls", "tower", + "tower", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "windows-registry", + "windows-registry", ] [[package]] @@ -6215,6 +6997,7 @@ checksum = "4a325d5e8d1cebddd070b13f44cec8071594ab67d1012797c121f27a669b7958" dependencies = [ "gif", "image-webp 0.1.3", + "image-webp 0.1.3", "log", "pico-args", "rgb", @@ -6251,7 +7034,7 @@ dependencies = [ "simdutf8", "strum_macros", "tempfile", - "tokio 1.43.0", + "tokio 1.42.0", "tower-http", "tracing", "tracing-subscriber", @@ -6274,6 +7057,7 @@ dependencies = [ "futures", "log", "lru 0.7.8", + "lru 0.7.8", "lru_time_cache", "once_cell", "querystring", @@ -6316,7 +7100,7 @@ dependencies = [ "revolt-database", "revolt-files", "revolt-result", - "tokio 1.40.0", + "tokio 1.42.0", ] [[package]] @@ -6331,6 +7115,7 @@ dependencies = [ "authifier", "axum", "base64 0.21.7", + "base64 0.21.7", "bson", "deadqueue", "decancer", @@ -6339,12 +7124,14 @@ dependencies = [ "indexmap 1.9.3", "isahc", "iso8601-timestamp 0.2.17", + "iso8601-timestamp 0.2.17", "linkify 0.8.1", "livekit-api", "livekit-protocol", "livekit-runtime", "log", "lru 0.11.1", + "lru 0.11.1", "mongodb", "nanoid", "once_cell", @@ -6368,6 +7155,7 @@ dependencies = [ "unicode-segmentation", "url-escape", "validator 0.16.1", + "validator 0.16.1", "web-push", ] @@ -6377,6 +7165,7 @@ version = "0.8.4" dependencies = [ "amqprs", "async-channel 1.9.0", + "async-channel 1.9.0", "async-std", "authifier", "bitfield", @@ -6386,19 +7175,23 @@ dependencies = [ "futures", "impl_ops", "iso8601-timestamp 0.2.17", + "iso8601-timestamp 0.2.17", "lettre", "linkify 0.6.0", "livekit-api", "livekit-protocol", "log", "lru 0.7.8", + "lru 0.7.8", "nanoid", "num_enum 0.5.11", + "num_enum 0.5.11", "once_cell", "rand 0.8.5", "redis-kiss", "regex", "reqwest 0.11.27", + "reqwest 0.11.27", "revolt-config", "revolt-database", "revolt-models", @@ -6417,6 +7210,7 @@ dependencies = [ "ulid 0.4.1", "url", "validator 0.16.1", + "validator 0.16.1", "vergen", ] @@ -6456,6 +7250,7 @@ dependencies = [ "moka", "regex", "reqwest 0.12.12", + "reqwest 0.12.12", "revolt-config", "revolt-files", "revolt-models", @@ -6464,7 +7259,7 @@ dependencies = [ "serde", "serde_json", "tempfile", - "tokio 1.43.0", + "tokio 1.42.0", "tracing", "tracing-subscriber", "utoipa", @@ -6475,8 +7270,10 @@ dependencies = [ name = "revolt-models" version = "0.8.4" dependencies = [ + "fancy-regex", "indexmap 1.9.3", "iso8601-timestamp 0.2.17", + "num_enum 0.6.1", "once_cell", "regex", "revolt-config", @@ -6487,6 +7284,7 @@ dependencies = [ "serde", "utoipa", "validator 0.16.1", + "validator 0.16.1", ] [[package]] @@ -6539,16 +7337,19 @@ dependencies = [ "fcm_v1", "isahc", "iso8601-timestamp 0.2.17", + "iso8601-timestamp 0.2.17", "log", + "pretty_env_logger", "revolt-config", "revolt-database", "revolt-models", + "revolt-presence", "revolt_a2", "revolt_optional_struct", "serde", "serde_json", - "tokio 1.43.0", - "ulid 1.1.4", + "tokio 1.42.0", + "ulid 1.1.3", "web-push", ] @@ -6599,22 +7400,25 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edbe1f79cb41271d3cd8f932d75dddeba963c19dc93d1ee6cbe0391b495ab2f5" dependencies = [ + "base64 0.21.7", "base64 0.21.7", "erased-serde", "http 1.2.0", + "http 1.2.0", "http-body-util", - "hyper 1.6.0", + "hyper 1.5.2", "hyper-rustls 0.26.0", "hyper-util", "parking_lot", "pem 3.0.4", - "ring 0.17.8", + "ring", "rustls 0.22.4", "rustls-pemfile 2.2.0", + "rustls-pemfile 2.2.0", "serde", "serde_json", "thiserror 1.0.69", - "tokio 1.43.0", + "tokio 1.42.0", ] [[package]] @@ -6670,8 +7474,10 @@ dependencies = [ "darling 0.13.4", "proc-macro2", "quote 1.0.38", + "quote 1.0.38", "rocket_http", "syn 1.0.109", + "syn 1.0.109", ] [[package]] @@ -6704,21 +7510,6 @@ dependencies = [ "bytemuck", ] -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi", -] - [[package]] name = "ring" version = "0.17.8" @@ -6729,16 +7520,18 @@ dependencies = [ "cfg-if", "getrandom", "libc", - "spin 0.9.8", - "untrusted 0.9.0", + "spin", + "untrusted", "windows-sys 0.52.0", ] [[package]] name = "rmp" version = "0.8.14" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" dependencies = [ "byteorder", "num-traits", @@ -6748,8 +7541,10 @@ dependencies = [ [[package]] name = "rmp-serde" version = "1.3.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" dependencies = [ "byteorder", "rmp", @@ -6765,18 +7560,20 @@ dependencies = [ "async-stream", "async-trait", "atomic 0.5.3", + "atomic 0.5.3", "binascii", "bytes 1.9.0", + "bytes 1.9.0", "either", "figment", "futures", - "indexmap 2.7.1", + "indexmap 2.7.0", "log", "memchr", "multer", "num_cpus", "parking_lot", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "rand 0.8.5", "ref-cast", "rocket_codegen", @@ -6786,7 +7583,7 @@ dependencies = [ "state", "tempfile", "time", - "tokio 1.43.0", + "tokio 1.42.0", "tokio-stream", "tokio-util", "ubyte", @@ -6796,12 +7593,13 @@ dependencies = [ [[package]] name = "rocket_authifier" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "810753b79106c44a4e76247fc7576b660663133a9e8f4b0afeb303589ec51d59" +checksum = "c2aa1bfaee106d088b78de7c3cc2a8ab2c9e05a0286b6b912f0b18ea656b329e" dependencies = [ "authifier", "iso8601-timestamp 0.1.11", + "iso8601-timestamp 0.1.11", "revolt_okapi", "revolt_rocket_okapi", "rocket", @@ -6818,11 +7616,12 @@ checksum = "575d32d7ec1a9770108c879fc7c47815a80073f96ca07ff9525a94fcede1dd46" dependencies = [ "devise", "glob", - "indexmap 2.7.1", + "indexmap 2.7.0", "proc-macro2", "quote 1.0.38", + "quote 1.0.38", "rocket_http", - "syn 2.0.96", + "syn 2.0.94", "unicode-xid 0.2.6", "version_check", ] @@ -6865,27 +7664,29 @@ dependencies = [ "futures", "http 0.2.12", "hyper 0.14.32", - "indexmap 2.7.1", + "indexmap 2.7.0", "log", "memchr", "pear", "percent-encoding", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "ref-cast", "serde", "smallvec", "stable-pattern", "state", "time", - "tokio 1.43.0", + "tokio 1.42.0", "uncased", ] [[package]] name = "rocket_prometheus" version = "0.10.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76f429d654a6854abef0a5361235e847b6552d5d989c2fc8a312ba4aebd8837f" +checksum = "76f429d654a6854abef0a5361235e847b6552d5d989c2fc8a312ba4aebd8837f" dependencies = [ "prometheus", "rocket", @@ -6897,6 +7698,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" dependencies = [ + "base64 0.13.1", "base64 0.13.1", "bitflags 1.3.2", "serde", @@ -6916,14 +7718,17 @@ checksum = "094052d5470cbcef561cb848a7209968c9f12dfa6d668f4bca048ac5de51099c" dependencies = [ "byteorder", "digest", + "digest", "num-bigint-dig", "num-integer", "num-iter", "num-traits", "pkcs1", "pkcs8 0.9.0", + "pkcs8 0.9.0", "rand_core 0.6.4", "signature 1.6.4", + "signature 1.6.4", "smallvec", "subtle", "zeroize", @@ -6932,9 +7737,12 @@ dependencies = [ [[package]] name = "rust-argon2" version = "1.0.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5885493fdf0be6cdff808d1533ce878d21cfa49c7086fa00c66355cd9141bfc" +checksum = "a5885493fdf0be6cdff808d1533ce878d21cfa49c7086fa00c66355cd9141bfc" dependencies = [ + "base64 0.21.7", "base64 0.21.7", "blake2b_simd", "constant_time_eq", @@ -6954,17 +7762,10 @@ dependencies = [ [[package]] name = "rustc-demangle" version = "0.1.24" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc_version" @@ -6972,42 +7773,31 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.25", + "semver", ] [[package]] name = "rustc_version_runtime" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d31b7153270ebf48bf91c65ae5b0c00e749c4cfad505f66530ac74950249582f" +checksum = "2dd18cd2bae1820af0b6ad5e54f4a51d0f3fcc53b05f845675074efcc7af071d" dependencies = [ - "rustc_version 0.2.3", - "semver 0.9.0", + "rustc_version", + "semver", ] [[package]] name = "rustix" -version = "0.38.44" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ "bitflags 2.8.0", "errno", "libc", "linux-raw-sys", "windows-sys 0.59.0", -] - -[[package]] -name = "rustls" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" -dependencies = [ - "log", - "ring 0.16.20", - "sct", - "webpki", + "windows-sys 0.59.0", ] [[package]] @@ -7017,7 +7807,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", - "ring 0.17.8", + "ring", "rustls-webpki 0.101.7", "sct", ] @@ -7029,7 +7819,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" dependencies = [ "log", - "ring 0.17.8", + "ring", "rustls-pki-types", "rustls-webpki 0.102.8", "subtle", @@ -7038,9 +7828,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.21" +version = "0.23.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" +checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" dependencies = [ "once_cell", "rustls-pki-types", @@ -7068,22 +7858,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ "base64 0.21.7", + "base64 0.21.7", ] [[package]] name = "rustls-pemfile" version = "2.2.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.11.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" [[package]] name = "rustls-webpki" @@ -7091,26 +7884,30 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", + "ring", + "untrusted", ] [[package]] name = "rustls-webpki" version = "0.102.8" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ - "ring 0.17.8", + "ring", "rustls-pki-types", - "untrusted 0.9.0", + "untrusted", ] [[package]] name = "rustversion" version = "1.0.19" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "rustybuzz" @@ -7132,24 +7929,29 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.19" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "schannel" version = "0.1.27" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", + "windows-sys 0.59.0", ] [[package]] name = "schemars" version = "0.8.21" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" dependencies = [ "dyn-clone", "indexmap 1.9.3", @@ -7161,26 +7963,33 @@ dependencies = [ [[package]] name = "schemars_derive" version = "0.8.21" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" dependencies = [ "proc-macro2", "quote 1.0.38", + "quote 1.0.38", "serde_derive_internals", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "scoped-tls" version = "1.0.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" version = "1.2.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scraper" @@ -7201,11 +8010,13 @@ dependencies = [ [[package]] name = "sct" version = "0.7.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", + "ring", + "untrusted", ] [[package]] @@ -7220,6 +8031,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ + "base16ct 0.1.1", "base16ct 0.1.1", "der 0.6.1", "generic-array 0.14.7", @@ -7228,6 +8040,22 @@ dependencies = [ "zeroize", ] +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct 0.2.0", + "der 0.7.9", + "generic-array 0.14.7", + "pkcs8 0.10.2", + "generic-array 0.14.7", + "pkcs8 0.9.0", + "subtle", + "zeroize", +] + [[package]] name = "sec1" version = "0.7.3" @@ -7251,15 +8079,18 @@ dependencies = [ "der 0.4.5", "pem 0.8.3", "thiserror 1.0.69", + "thiserror 1.0.69", ] [[package]] name = "security-framework" version = "2.11.1" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -7268,9 +8099,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5" dependencies = [ "core-foundation-sys", "libc", @@ -7297,24 +8128,9 @@ dependencies = [ [[package]] name = "semver" -version = "0.9.0" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" [[package]] name = "send_wrapper" @@ -7325,27 +8141,32 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "sentry" version = "0.31.8" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce4b57f1b521f674df7a1d200be8ff5d74e3712020ee25b553146657b5377d5" +checksum = "6ce4b57f1b521f674df7a1d200be8ff5d74e3712020ee25b553146657b5377d5" dependencies = [ "httpdate", "native-tls", "reqwest 0.11.27", + "reqwest 0.11.27", "sentry-backtrace", "sentry-contexts", "sentry-core", "sentry-debug-images", "sentry-panic", "sentry-tracing", - "tokio 1.43.0", + "tokio 1.42.0", "ureq", ] [[package]] name = "sentry-backtrace" version = "0.31.8" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58cc8d4e04a73de8f718dc703943666d03f25d3e9e4d0fb271ca0b8c76dfa00e" +checksum = "58cc8d4e04a73de8f718dc703943666d03f25d3e9e4d0fb271ca0b8c76dfa00e" dependencies = [ "backtrace", "once_cell", @@ -7356,13 +8177,15 @@ dependencies = [ [[package]] name = "sentry-contexts" version = "0.31.8" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6436c1bad22cdeb02179ea8ef116ffc217797c028927def303bc593d9320c0d1" +checksum = "6436c1bad22cdeb02179ea8ef116ffc217797c028927def303bc593d9320c0d1" dependencies = [ "hostname", "libc", "os_info", - "rustc_version 0.4.1", + "rustc_version", "sentry-core", "uname", ] @@ -7370,8 +8193,10 @@ dependencies = [ [[package]] name = "sentry-core" version = "0.31.8" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "901f761681f97db3db836ef9e094acdd8756c40215326c194201941947164ef1" +checksum = "901f761681f97db3db836ef9e094acdd8756c40215326c194201941947164ef1" dependencies = [ "once_cell", "rand 0.8.5", @@ -7383,8 +8208,10 @@ dependencies = [ [[package]] name = "sentry-debug-images" version = "0.31.8" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afdb263e73d22f39946f6022ed455b7561b22ff5553aca9be3c6a047fa39c328" +checksum = "afdb263e73d22f39946f6022ed455b7561b22ff5553aca9be3c6a047fa39c328" dependencies = [ "findshlibs", "once_cell", @@ -7394,8 +8221,10 @@ dependencies = [ [[package]] name = "sentry-panic" version = "0.31.8" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74fbf1c163f8b6a9d05912e1b272afa27c652e8b47ea60cb9a57ad5e481eea99" +checksum = "74fbf1c163f8b6a9d05912e1b272afa27c652e8b47ea60cb9a57ad5e481eea99" dependencies = [ "sentry-backtrace", "sentry-core", @@ -7404,8 +8233,10 @@ dependencies = [ [[package]] name = "sentry-tracing" version = "0.31.8" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82eabcab0a047040befd44599a1da73d3adb228ff53b5ed9795ae04535577704" +checksum = "82eabcab0a047040befd44599a1da73d3adb228ff53b5ed9795ae04535577704" dependencies = [ "sentry-backtrace", "sentry-core", @@ -7416,25 +8247,32 @@ dependencies = [ [[package]] name = "sentry-types" version = "0.31.8" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da956cca56e0101998c8688bc65ce1a96f00673a0e58e663664023d4c7911e82" +checksum = "da956cca56e0101998c8688bc65ce1a96f00673a0e58e663664023d4c7911e82" dependencies = [ "debugid", "hex", "rand 0.8.5", + "rand 0.8.5", "serde", "serde_json", "thiserror 1.0.69", + "thiserror 1.0.69", "time", "url", "uuid", + "uuid", ] [[package]] name = "serde" version = "1.0.217" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] @@ -7442,8 +8280,10 @@ dependencies = [ [[package]] name = "serde_bytes" version = "0.11.15" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" dependencies = [ "serde", ] @@ -7460,34 +8300,39 @@ dependencies = [ [[package]] name = "serde_derive" version = "1.0.217" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "serde_derive_internals" version = "0.29.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "serde_json" -version = "1.0.137" +version = "1.0.134" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "930cfb6e6abf99298aaad7d29abbef7a9999a9a8806a40088f55f0dcec03146b" +checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.7.0", "itoa", "memchr", + "memchr", "ryu", "serde", ] @@ -7505,8 +8350,10 @@ dependencies = [ [[package]] name = "serde_spanned" version = "0.6.8" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -7525,24 +8372,32 @@ dependencies = [ [[package]] name = "serde_with" -version = "1.14.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.7.0", "serde", + "serde_derive", + "serde_json", "serde_with_macros", + "time", ] [[package]] name = "serde_with_macros" -version = "1.5.2" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" dependencies = [ - "darling 0.13.4", + "darling 0.20.10", "proc-macro2", "quote 1.0.38", - "syn 1.0.109", + "syn 2.0.94", ] [[package]] @@ -7557,12 +8412,15 @@ dependencies = [ [[package]] name = "sha-1" version = "0.10.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" +checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" dependencies = [ "cfg-if", "cpufeatures", "digest", + "digest", ] [[package]] @@ -7574,13 +8432,16 @@ dependencies = [ "cfg-if", "cpufeatures", "digest", + "digest", ] [[package]] name = "sha1_smol" version = "1.0.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" [[package]] name = "sha2" @@ -7591,13 +8452,16 @@ dependencies = [ "cfg-if", "cpufeatures", "digest", + "digest", ] [[package]] name = "sharded-slab" version = "0.1.7" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] @@ -7611,8 +8475,11 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" version = "1.4.2" +name = "signal-hook-registry" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] @@ -7620,19 +8487,27 @@ dependencies = [ [[package]] name = "signature" version = "1.6.4" +name = "signature" +version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ "digest", "rand_core 0.6.4", + "digest", + "rand_core 0.6.4", ] [[package]] name = "signature" version = "2.2.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ + "digest", "digest", "rand_core 0.6.4", ] @@ -7650,13 +8525,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" dependencies = [ "quote 1.0.38", + "quote 1.0.38", ] [[package]] name = "simdutf8" version = "0.1.5" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "simplecss" @@ -7682,11 +8560,16 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" version = "0.4.9" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg 1.4.0", ] +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg 1.4.0", +] [[package]] name = "slotmap" @@ -7703,6 +8586,7 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" dependencies = [ + "async-channel 1.9.0", "async-channel 1.9.0", "futures-core", "futures-io", @@ -7717,8 +8601,10 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" version = "0.4.10" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", @@ -7727,19 +8613,16 @@ dependencies = [ [[package]] name = "socket2" version = "0.5.8" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", + "windows-sys 0.52.0", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -7766,6 +8649,16 @@ dependencies = [ "der 0.7.9", ] +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der 0.7.9", +] + [[package]] name = "stable-pattern" version = "0.1.0" @@ -7788,6 +8681,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b8c4a4445d81357df8b1a650d0d0d6fbbbfe99d064aa5e02f3e4022061476d8" dependencies = [ "loom 0.5.6", + "loom 0.5.6", ] [[package]] @@ -7823,17 +8717,21 @@ dependencies = [ "phf_shared 0.10.0", "proc-macro2", "quote 1.0.38", + "quote 1.0.38", ] [[package]] name = "stringprep" version = "0.1.5" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" dependencies = [ "unicode-bidi", "unicode-normalization", "unicode-properties", + "unicode-properties", ] [[package]] @@ -7854,11 +8752,12 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote 1.0.38", + "quote 1.0.38", "rustversion", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -7891,22 +8790,26 @@ dependencies = [ [[package]] name = "syn" version = "1.0.109" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote 1.0.38", + "quote 1.0.38", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.96" +version = "2.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "987bc0be1cdea8b10216bd06e2ca407d40b9543468fafd3ddfb02f36e77f71f3" dependencies = [ "proc-macro2", "quote 1.0.38", + "quote 1.0.38", "unicode-ident", ] @@ -7918,7 +8821,7 @@ checksum = "b5dc35bb08dd1ca3dfb09dce91fd2d13294d6711c88897d9a9d60acf39bce049" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -7930,11 +8833,16 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "sync_wrapper" version = "1.0.2" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] [[package]] name = "synom" @@ -7965,14 +8873,16 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "sysinfo" version = "0.27.8" +version = "0.27.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a902e9050fca0a5d6877550b769abd2bd1ce8c04634b941dbe2809735e1a1e33" +checksum = "a902e9050fca0a5d6877550b769abd2bd1ce8c04634b941dbe2809735e1a1e33" dependencies = [ "cfg-if", "core-foundation-sys", @@ -7999,7 +8909,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.6.0", "core-foundation", "system-configuration-sys 0.6.0", ] @@ -8024,6 +8934,16 @@ dependencies = [ "libc", ] +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "system-deps" version = "6.2.2" @@ -8031,7 +8951,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ "cfg-expr", - "heck 0.5.0", + "heck", "pkg-config", "toml 0.8.19", "version-compare", @@ -8055,6 +8975,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "target-lexicon" version = "0.12.16" @@ -8064,12 +8990,16 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" version = "3.15.0" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" +checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" dependencies = [ "cfg-if", "fastrand 2.3.0", "getrandom", + "fastrand 2.3.0", + "getrandom", "once_cell", "rustix", "windows-sys 0.59.0", @@ -8089,8 +9019,10 @@ dependencies = [ [[package]] name = "termcolor" version = "1.4.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] @@ -8098,49 +9030,56 @@ dependencies = [ [[package]] name = "thiserror" version = "1.0.69" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" -version = "2.0.11" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" dependencies = [ - "thiserror-impl 2.0.11", + "thiserror-impl 2.0.9", ] [[package]] name = "thiserror-impl" version = "1.0.69" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "thiserror-impl" -version = "2.0.11" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "thread_local" version = "1.1.8" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ + "cfg-if", "cfg-if", "once_cell", ] @@ -8159,15 +9098,20 @@ dependencies = [ [[package]] name = "time" version = "0.3.37" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ + "deranged", "deranged", "itoa", "libc", "num-conv", + "num-conv", "num_threads", "powerfmt", + "powerfmt", "serde", "time-core", "time-macros", @@ -8176,15 +9120,20 @@ dependencies = [ [[package]] name = "time-core" version = "0.1.2" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" version = "0.2.19" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ + "num-conv", "num-conv", "time-core", ] @@ -8225,11 +9174,23 @@ dependencies = [ "zerovec", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" version = "1.8.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -8237,8 +9198,10 @@ dependencies = [ [[package]] name = "tinyvec_macros" version = "0.1.1" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" @@ -8253,18 +9216,20 @@ dependencies = [ [[package]] name = "tokio" -version = "1.43.0" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", "bytes 1.9.0", + "bytes 1.9.0", "libc", "mio", "parking_lot", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "signal-hook-registry", "socket2 0.5.8", + "socket2 0.5.8", "tokio-macros", "windows-sys 0.52.0", ] @@ -8277,28 +9242,19 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "tokio-native-tls" version = "0.3.1" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", - "tokio 1.43.0", -] - -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls 0.20.9", - "tokio 1.43.0", - "webpki", + "tokio 1.42.0", ] [[package]] @@ -8308,7 +9264,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ "rustls 0.21.12", - "tokio 1.43.0", + "tokio 1.42.0", ] [[package]] @@ -8319,7 +9275,7 @@ checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" dependencies = [ "rustls 0.22.4", "rustls-pki-types", - "tokio 1.43.0", + "tokio 1.42.0", ] [[package]] @@ -8328,40 +9284,47 @@ version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls 0.23.21", - "tokio 1.43.0", + "rustls 0.23.20", + "tokio 1.42.0", ] [[package]] name = "tokio-stream" version = "0.1.17" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", - "pin-project-lite 0.2.16", - "tokio 1.43.0", + "pin-project-lite 0.2.15", + "tokio 1.42.0", ] [[package]] name = "tokio-util" version = "0.7.13" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ + "bytes 1.9.0", "bytes 1.9.0", "futures-core", "futures-io", "futures-sink", - "pin-project-lite 0.2.16", - "tokio 1.43.0", + "pin-project-lite 0.2.15", + "tokio 1.42.0", ] [[package]] name = "toml" version = "0.5.11" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] @@ -8376,6 +9339,7 @@ dependencies = [ "serde_spanned", "toml_datetime", "toml_edit 0.22.22", + "toml_edit 0.22.22", ] [[package]] @@ -8390,10 +9354,12 @@ dependencies = [ [[package]] name = "toml_edit" version = "0.19.15" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.7.0", "toml_datetime", "winnow 0.5.40", ] @@ -8404,36 +9370,42 @@ version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.7.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.25", + "winnow 0.6.21", ] [[package]] name = "totp-lite" version = "2.0.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8e43134db17199f7f721803383ac5854edd0d3d523cc34dba321d6acfbe76c3" +checksum = "f8e43134db17199f7f721803383ac5854edd0d3d523cc34dba321d6acfbe76c3" dependencies = [ + "digest", "digest", "hmac", "sha1", + "sha1", "sha2", ] [[package]] name = "tower" version = "0.5.2" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "sync_wrapper 1.0.2", - "tokio 1.43.0", + "tokio 1.42.0", "tower-layer", "tower-service", "tracing", @@ -8445,12 +9417,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.6.0", "bytes 1.9.0", "http 1.2.0", "http-body 1.0.1", "http-body-util", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "tower-layer", "tower-service", ] @@ -8458,23 +9430,29 @@ dependencies = [ [[package]] name = "tower-layer" version = "0.3.3" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" version = "0.3.3" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" version = "0.1.41" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", - "pin-project-lite 0.2.16", + "pin-project-lite 0.2.15", "tracing-attributes", "tracing-core", ] @@ -8482,19 +9460,23 @@ dependencies = [ [[package]] name = "tracing-attributes" version = "0.1.28" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] name = "tracing-core" version = "0.1.33" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -8513,23 +9495,30 @@ dependencies = [ [[package]] name = "tracing-log" version = "0.2.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ "log", "once_cell", + "once_cell", "tracing-core", ] [[package]] name = "tracing-subscriber" version = "0.3.19" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", "once_cell", + "nu-ansi-term", + "once_cell", "regex", "sharded-slab", "smallvec", @@ -8539,56 +9528,13 @@ dependencies = [ "tracing-log", ] -[[package]] -name = "trust-dns-proto" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.2.3", - "ipnet", - "lazy_static", - "log", - "rand 0.8.5", - "smallvec", - "thiserror 1.0.69", - "tinyvec", - "tokio 1.43.0", - "url", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558" -dependencies = [ - "cfg-if", - "futures-util", - "ipconfig", - "lazy_static", - "log", - "lru-cache", - "parking_lot", - "resolv-conf", - "smallvec", - "thiserror 1.0.69", - "tokio 1.43.0", - "trust-dns-proto", -] - [[package]] name = "try-lock" version = "0.2.5" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "ttf-parser" @@ -8602,18 +9548,24 @@ dependencies = [ [[package]] name = "tungstenite" version = "0.17.3" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" +checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" dependencies = [ + "base64 0.13.1", "base64 0.13.1", "byteorder", "bytes 1.9.0", + "bytes 1.9.0", "http 0.2.12", "httparse", "log", "rand 0.8.5", "sha-1", "thiserror 1.0.69", + "sha-1", + "thiserror 1.0.69", "url", "utf-8", ] @@ -8627,6 +9579,8 @@ dependencies = [ "proc-macro2", "quote 1.0.38", "syn 1.0.109", + "quote 1.0.38", + "syn 1.0.109", ] [[package]] @@ -8647,8 +9601,10 @@ dependencies = [ [[package]] name = "ucd-trie" version = "0.1.7" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "ulid" @@ -8693,8 +9649,10 @@ dependencies = [ [[package]] name = "uncased" version = "0.9.10" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" +checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" dependencies = [ "serde", "version_check", @@ -8703,8 +9661,10 @@ dependencies = [ [[package]] name = "unicase" version = "2.8.1" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicase_serde" @@ -8719,8 +9679,10 @@ dependencies = [ [[package]] name = "unicode-bidi" version = "0.3.18" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-bidi-mirroring" @@ -8736,15 +9698,17 @@ checksum = "260bc6647b3893a9a90668360803a15f96b85a5257b1c3a0c3daf6ae2496de42" [[package]] name = "unicode-ident" -version = "1.0.16" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-normalization" version = "0.1.24" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] @@ -8764,8 +9728,10 @@ checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" [[package]] name = "unicode-segmentation" version = "1.12.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-vo" @@ -8788,8 +9754,10 @@ checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" [[package]] name = "unicode-xid" version = "0.2.6" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" @@ -8801,12 +9769,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - [[package]] name = "untrusted" version = "0.9.0" @@ -8816,9 +9778,12 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" version = "2.12.1" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" +checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" dependencies = [ + "base64 0.22.1", "base64 0.22.1", "log", "native-tls", @@ -8829,11 +9794,14 @@ dependencies = [ [[package]] name = "url" version = "2.5.4" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna 1.0.3", + "idna 1.0.3", "percent-encoding", "serde", ] @@ -8898,19 +9866,13 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - [[package]] name = "utoipa" version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5afb1a60e207dca502682537fefcfd9921e71d0b83e9576060f09abc6efab23" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.7.0", "serde", "serde_json", "utoipa-gen", @@ -8919,15 +9881,18 @@ dependencies = [ [[package]] name = "utoipa-gen" version = "4.3.1" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20c24e8ab68ff9ee746aad22d39b5535601e6416d1b0feeabf78be986a5c4392" +checksum = "20c24e8ab68ff9ee746aad22d39b5535601e6416d1b0feeabf78be986a5c4392" dependencies = [ "proc-macro-error", "proc-macro2", "quote 1.0.38", + "quote 1.0.38", "regex", - "syn 2.0.96", - "ulid 1.1.4", + "syn 2.0.94", + "ulid 1.1.3", ] [[package]] @@ -8944,9 +9909,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.12.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "getrandom", "serde", @@ -8981,9 +9946,12 @@ dependencies = [ [[package]] name = "validator" version = "0.16.1" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b92f40481c04ff1f4f61f304d61793c7b56ff76ac1469f1beb199b1445b253bd" +checksum = "b92f40481c04ff1f4f61f304d61793c7b56ff76ac1469f1beb199b1445b253bd" dependencies = [ + "idna 0.4.0", "idna 0.4.0", "lazy_static", "regex", @@ -9005,8 +9973,10 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote 1.0.38", + "quote 1.0.38", "regex", "syn 1.0.109", + "syn 1.0.109", "validator_types", ] @@ -9018,6 +9988,7 @@ checksum = "111abfe30072511849c5910134e8baf8dc05de4c0e5903d681cbd5c9c4d611e3" dependencies = [ "proc-macro2", "syn 1.0.109", + "syn 1.0.109", ] [[package]] @@ -9029,8 +10000,10 @@ checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "value-bag" version = "1.10.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" +checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" [[package]] name = "vcpkg" @@ -9041,18 +10014,21 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "vergen" version = "7.5.1" +version = "7.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f21b881cd6636ece9735721cf03c1fe1e774fe258683d084bb2812ab67435749" +checksum = "f21b881cd6636ece9735721cf03c1fe1e774fe258683d084bb2812ab67435749" dependencies = [ "anyhow", "cfg-if", "enum-iterator", "getset", "git2", - "rustc_version 0.4.1", + "rustc_version", "rustversion", "sysinfo", "thiserror 1.0.69", + "thiserror 1.0.69", "time", ] @@ -9065,8 +10041,10 @@ checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" [[package]] name = "version_check" version = "0.9.5" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vsimd" @@ -9077,14 +10055,18 @@ checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" [[package]] name = "waker-fn" version = "1.2.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" [[package]] name = "want" version = "0.3.1" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ "try-lock", ] @@ -9105,10 +10087,19 @@ dependencies = [ ] [[package]] -name = "wasm-bindgen" -version = "0.2.100" +name = "wasix" +version = "0.12.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" +dependencies = [ + "wasi", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", "once_cell", @@ -9118,74 +10109,77 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", "once_cell", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ + "quote 1.0.38", "quote 1.0.38", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" -dependencies = [ - "unicode-ident", -] +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "web-push" version = "0.10.2" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49214685777c429ac44a92780983f4fadeecddd8c08c463d8196521e17e974bd" +checksum = "49214685777c429ac44a92780983f4fadeecddd8c08c463d8196521e17e974bd" dependencies = [ "async-trait", "base64 0.13.1", + "base64 0.13.1", "chrono", "ece", "futures-lite 1.13.0", + "futures-lite 1.13.0", "http 0.2.12", "isahc", "jwt-simple", @@ -9199,9 +10193,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ "js-sys", "wasm-bindgen", @@ -9227,30 +10221,19 @@ dependencies = [ "libwebp-sys", ] -[[package]] -name = "webpki" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" -dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", -] - [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki", -] +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "webpki-roots" version = "0.26.7" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" dependencies = [ "rustls-pki-types", ] @@ -9264,8 +10247,10 @@ checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "widestring" version = "1.1.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" [[package]] name = "winapi" @@ -9286,10 +10271,13 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" version = "0.1.9" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ "windows-sys 0.59.0", + "windows-sys 0.59.0", ] [[package]] @@ -9317,6 +10305,25 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core 0.58.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.52.0" @@ -9329,8 +10336,11 @@ dependencies = [ [[package]] name = "windows-core" version = "0.58.0" +name = "windows-core" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ "windows-implement", "windows-interface", @@ -9347,7 +10357,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -9358,7 +10368,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -9542,34 +10552,43 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" version = "0.5.40" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] [[package]] name = "winnow" -version = "0.6.25" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad699df48212c6cc6eb4435f35500ac6fd3b9913324f938aea302022ce19d310" +checksum = "e6f5bb5257f2407a5425c6e749bfd9692192a73e70a6060516ac04f889087d68" dependencies = [ "memchr", + "memchr", ] [[package]] name = "winreg" version = "0.50.0" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ "cfg-if", "windows-sys 0.48.0", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] name = "write16" version = "1.0.0" +name = "write16" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" @@ -9579,6 +10598,19 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "wyz" version = "0.5.1" @@ -9586,6 +10618,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ "tap", + "tap", ] [[package]] @@ -9638,7 +10671,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", "synstructure 0.13.1", ] @@ -9651,9 +10684,11 @@ dependencies = [ "anyhow", "async-trait", "base64 0.21.7", + "base64 0.21.7", "futures", "http 0.2.12", "hyper 0.14.32", + "hyper 0.14.32", "hyper-rustls 0.24.2", "itertools 0.12.1", "log", @@ -9664,7 +10699,7 @@ dependencies = [ "serde", "serde_json", "time", - "tokio 1.43.0", + "tokio 1.42.0", "tower-service", "url", ] @@ -9675,6 +10710,7 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "byteorder", "zerocopy-derive", ] @@ -9687,7 +10723,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -9707,13 +10743,14 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", "synstructure 0.13.1", ] [[package]] name = "zeroize" version = "1.8.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" @@ -9736,7 +10773,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote 1.0.38", - "syn 2.0.96", + "syn 2.0.94", ] [[package]] @@ -9757,13 +10794,10 @@ dependencies = [ [[package]] name = "zune-jpeg" version = "0.4.14" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028" +checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028" dependencies = [ "zune-core", ] - -[[patch.unused]] -name = "redis" -version = "0.22.3" -source = "git+https://github.com/revoltchat/redis-rs?rev=1a41faf356fd21aebba71cea7eb7eb2653e5f0ef#1a41faf356fd21aebba71cea7eb7eb2653e5f0ef" diff --git a/Cargo.toml b/Cargo.toml index 0eaad88c..6c69df09 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,11 +11,7 @@ members = [ ] [patch.crates-io] -redis22 = { package = "redis", version = "0.22.3", git = "https://github.com/revoltchat/redis-rs", rev = "1a41faf356fd21aebba71cea7eb7eb2653e5f0ef" } -redis23 = { package = "redis", version = "0.23.1", git = "https://github.com/revoltchat/redis-rs", rev = "f8ca28ab85da59d2ccde526b4d2fb390eff5a5f9" } -# authifier = { package = "authifier", version = "1.0.8", path = "../authifier/crates/authifier" } -# rocket_authifier = { package = "rocket_authifier", version = "1.0.8", path = "../authifier/crates/rocket_authifier" } -# rocket = { git = "https://github.com/rwf2/Rocket/", rev = "4dcd928" } +redis23 = { package = "redis", version = "0.23.3", git = "https://github.com/revoltchat/redis-rs", rev = "523b2937367e17bd0073722bf6e23d06042cb4e4" } # I'm 99% sure this is overloading the GitHub worker # hence builds have been failing since, let's just diff --git a/crates/bonfire/Cargo.toml b/crates/bonfire/Cargo.toml index 30b69507..be3f6edc 100644 --- a/crates/bonfire/Cargo.toml +++ b/crates/bonfire/Cargo.toml @@ -36,7 +36,7 @@ async-std = { version = "1.8.0", features = [ ] } # core -authifier = { version = "1.0.9" } +authifier = { version = "1.0.10" } revolt-result = { path = "../core/result" } revolt-models = { path = "../core/models" } revolt-config = { path = "../core/config" } diff --git a/crates/core/config/Revolt.toml b/crates/core/config/Revolt.toml index d33b0e7c..73b2bc9a 100644 --- a/crates/core/config/Revolt.toml +++ b/crates/core/config/Revolt.toml @@ -76,13 +76,19 @@ max_concurrent_connections = 50 # Usually they have to be, so that messages sent from one or the other get sent to everyone production = true +# Changes how many users are processed in each chunk when resolving role/everyone mentions. +# Increasing this will resolve mentions faster, but will consume more memory while resolving. +mass_mention_chunk_size = 200 + # none of these should need changing exchange = "revolt.notifications" message_queue = "notifications.origin.message" -fr_accepted_queue = "notifications.ingest.fr_accepted" # friend request accepted -fr_received_queue = "notifications.ingest.fr_received" # friend request received -generic_queue = "notifications.ingest.generic" # generic messages (title + body) -ack_queue = "notifications.process.ack" # updates badges for apple devices +mass_mention_queue = "notifications.origin.mass_mention" # handles messages that contain role or everyone mentions +fr_accepted_queue = "notifications.ingest.fr_accepted" # friend request accepted +fr_received_queue = "notifications.ingest.fr_received" # friend request received +generic_queue = "notifications.ingest.generic" # generic messages (title + body) +ack_queue = "notifications.process.ack" # updates badges for apple devices + [pushd.vapid] queue = "notifications.outbound.vapid" @@ -181,6 +187,11 @@ default_bucket = "revolt-uploads" [features] # Feature gate options webhooks_enabled = false +# Enable push notifications for mass pings (everyone, online, roles) +# When false this will still ping in-client but will not send notifications from pushd +mass_mentions_send_notifications = true +# Can role/everyone pings be used at all +mass_mentions_enabled = true [features.limits] diff --git a/crates/core/config/src/lib.rs b/crates/core/config/src/lib.rs index fa12b84b..29174e7d 100644 --- a/crates/core/config/src/lib.rs +++ b/crates/core/config/src/lib.rs @@ -201,7 +201,11 @@ pub struct Api { pub struct Pushd { pub production: bool, pub exchange: String, + pub mass_mention_chunk_size: usize, + + // Queues pub message_queue: String, + pub mass_mention_queue: String, pub fr_accepted_queue: String, pub fr_received_queue: String, pub generic_queue: String, @@ -228,6 +232,10 @@ impl Pushd { self.get_routing_key(self.message_queue.clone()) } + pub fn get_mass_mention_routing_key(&self) -> String { + self.get_routing_key(self.mass_mention_queue.clone()) + } + pub fn get_fr_accepted_routing_key(&self) -> String { self.get_routing_key(self.fr_accepted_queue.clone()) } @@ -328,6 +336,9 @@ impl Default for FeaturesAdvanced { pub struct Features { pub limits: FeaturesLimitsCollection, pub webhooks_enabled: bool, + pub mass_mentions_send_notifications: bool, + pub mass_mentions_enabled: bool, + #[serde(default)] pub advanced: FeaturesAdvanced, } diff --git a/crates/core/database/Cargo.toml b/crates/core/database/Cargo.toml index e47fc8d3..9e277a3d 100644 --- a/crates/core/database/Cargo.toml +++ b/crates/core/database/Cargo.toml @@ -64,7 +64,7 @@ redis-kiss = { version = "0.1.4" } # Database bson = { optional = true, version = "2.1.0" } -mongodb = { optional = true, version = "2.1.0", default-features = false } +mongodb = { optional = true, version = "3.1.0" } # Database Migration unicode-segmentation = "1.10.1" @@ -96,7 +96,7 @@ web-push = "0.10.0" revolt_a2 = { version = "0.10", default-features = false, features = ["ring"] } # Authifier -authifier = { version = "1.0.9", features = ["rocket_impl"] } +authifier = { version = "1.0.10", features = ["rocket_impl"] } # RabbitMQ amqprs = { version = "1.7.0" } diff --git a/crates/core/database/src/amqp/amqp.rs b/crates/core/database/src/amqp/amqp.rs index 39b4820e..b567c7f7 100644 --- a/crates/core/database/src/amqp/amqp.rs +++ b/crates/core/database/src/amqp/amqp.rs @@ -170,6 +170,38 @@ impl AMQP { .await } + pub async fn mass_mention_message_sent( + &self, + server_id: String, + payload: Vec, + ) -> Result<(), AMQPError> { + let config = revolt_config::config().await; + + let payload = MassMessageSentPayload { + notifications: payload, + server_id, + }; + let payload = to_string(&payload).unwrap(); + + let routing_key = config.pushd.get_mass_mention_routing_key(); + + debug!( + "Sending mass mention payload on channel {}: {}", + routing_key, payload + ); + + self.channel + .basic_publish( + BasicProperties::default() + .with_content_type("application/json") + .with_persistence(true) + .finish(), + payload.into(), + BasicPublishArguments::new(&config.pushd.exchange, routing_key.as_str()), + ) + .await + } + pub async fn ack_message( &self, user_id: String, diff --git a/crates/core/database/src/drivers/mongodb.rs b/crates/core/database/src/drivers/mongodb.rs index 720f5a47..e12e60fb 100644 --- a/crates/core/database/src/drivers/mongodb.rs +++ b/crates/core/database/src/drivers/mongodb.rs @@ -32,17 +32,17 @@ impl MongoDb { } /// Get a collection by its name - pub fn col(&self, collection: &str) -> mongodb::Collection { + pub fn col(&self, collection: &str) -> mongodb::Collection { self.db().collection(collection) } /// Insert one document into a collection - pub async fn insert_one( + pub async fn insert_one( &self, collection: &'static str, document: T, ) -> Result { - self.col::(collection).insert_one(document, None).await + self.col::(collection).insert_one(document).await } /// Count documents by projection @@ -52,7 +52,7 @@ impl MongoDb { projection: Document, ) -> Result { self.col::(collection) - .count_documents(projection, None) + .count_documents(projection) .await } @@ -68,7 +68,8 @@ impl MongoDb { { Ok(self .col::(collection) - .find(projection, options) + .find(projection) + .with_options(options) .await? .filter_map(|s| async { if cfg!(debug_assertions) { @@ -102,7 +103,8 @@ impl MongoDb { O: Into>, { self.col::(collection) - .find_one(projection, options) + .find_one(projection) + .with_options(options) .await } @@ -166,7 +168,7 @@ impl MongoDb { }; self.col::(collection) - .update_one(projection, query, None) + .update_one(projection, query) .await } @@ -201,7 +203,7 @@ impl MongoDb { projection: Document, ) -> Result { self.col::(collection) - .delete_one(projection, None) + .delete_one(projection) .await } diff --git a/crates/core/database/src/events/rabbit.rs b/crates/core/database/src/events/rabbit.rs index 61304752..0ae91be1 100644 --- a/crates/core/database/src/events/rabbit.rs +++ b/crates/core/database/src/events/rabbit.rs @@ -11,6 +11,12 @@ pub struct MessageSentPayload { pub users: Vec, } +#[derive(Serialize, Deserialize)] +pub struct MassMessageSentPayload { + pub notifications: Vec, + pub server_id: String, +} + #[derive(Serialize, Deserialize, Clone)] pub struct FRAcceptedPayload { pub accepted_user: User, diff --git a/crates/core/database/src/models/admin_migrations/ops/mongodb.rs b/crates/core/database/src/models/admin_migrations/ops/mongodb.rs index cdc684e9..703e378a 100644 --- a/crates/core/database/src/models/admin_migrations/ops/mongodb.rs +++ b/crates/core/database/src/models/admin_migrations/ops/mongodb.rs @@ -10,7 +10,7 @@ impl AbstractMigrations for MongoDb { #[cfg(test)] /// Drop the database async fn drop_database(&self) { - self.db().drop(None).await.ok(); + self.db().drop().await.ok(); } /// Migrate the database @@ -18,7 +18,7 @@ impl AbstractMigrations for MongoDb { info!("Migrating the database."); let list = self - .list_database_names(None, None) + .list_database_names() .await .expect("Failed to fetch database names."); diff --git a/crates/core/database/src/models/admin_migrations/ops/mongodb/init.rs b/crates/core/database/src/models/admin_migrations/ops/mongodb/init.rs index ab25819b..00fe26b8 100644 --- a/crates/core/database/src/models/admin_migrations/ops/mongodb/init.rs +++ b/crates/core/database/src/models/admin_migrations/ops/mongodb/init.rs @@ -8,278 +8,254 @@ pub async fn create_database(db: &MongoDb) { info!("Creating database."); let db = db.db(); - db.create_collection("accounts", None) + db.create_collection("accounts") .await .expect("Failed to create accounts collection."); - db.create_collection("users", None) + db.create_collection("users") .await .expect("Failed to create users collection."); - db.create_collection("channels", None) + db.create_collection("channels") .await .expect("Failed to create channels collection."); - db.create_collection("messages", None) + db.create_collection("messages") .await .expect("Failed to create messages collection."); - db.create_collection("servers", None) + db.create_collection("servers") .await .expect("Failed to create servers collection."); - db.create_collection("server_members", None) + db.create_collection("server_members") .await .expect("Failed to create server_members collection."); - db.create_collection("server_bans", None) + db.create_collection("server_bans") .await .expect("Failed to create server_bans collection."); - db.create_collection("channel_invites", None) + db.create_collection("channel_invites") .await .expect("Failed to create channel_invites collection."); - db.create_collection("channel_unreads", None) + db.create_collection("channel_unreads") .await .expect("Failed to create channel_unreads collection."); - db.create_collection("channel_webhooks", None) + db.create_collection("channel_webhooks") .await .expect("Failed to create channel_webhooks collection."); - db.create_collection("migrations", None) + db.create_collection("migrations") .await .expect("Failed to create migrations collection."); - db.create_collection("attachments", None) + db.create_collection("attachments") .await .expect("Failed to create attachments collection."); - db.create_collection("attachment_hashes", None) + db.create_collection("attachment_hashes") .await .expect("Failed to create attachment_hashes collection."); - db.create_collection("user_settings", None) + db.create_collection("user_settings") .await .expect("Failed to create user_settings collection."); - db.create_collection("safety_reports", None) + db.create_collection("safety_reports") .await .expect("Failed to create safety_reports collection."); - db.create_collection("safety_snapshots", None) + db.create_collection("safety_snapshots") .await .expect("Failed to create safety_snapshots collection."); - db.create_collection("safety_strikes", None) + db.create_collection("safety_strikes") .await .expect("Failed to create safety_strikes collection."); - db.create_collection("bots", None) + db.create_collection("bots") .await .expect("Failed to create bots collection."); - db.create_collection("ratelimit_events", None) + db.create_collection("ratelimit_events") .await .expect("Failed to create ratelimit_events collection."); - db.create_collection( - "pubsub", - CreateCollectionOptions::builder() - .capped(true) - .size(1_000_000) - .build(), - ) - .await - .expect("Failed to create pubsub collection."); + db.create_collection("pubsub") + .with_options( + CreateCollectionOptions::builder() + .capped(true) + .size(1_000_000) + .build(), + ) + .await + .expect("Failed to create pubsub collection."); - db.run_command( - doc! { - "createIndexes": "users", - "indexes": [ - { - "key": { - "username": 1_i32 - }, - "name": "username", - "unique": false, - "collation": { - "locale": "en", - "strength": 2_i32 - } + db.run_command(doc! { + "createIndexes": "users", + "indexes": [ + { + "key": { + "username": 1_i32 }, - { - "key": { - "username": 1_i32, - "discriminator": 1_i32 - }, - "name": "username_discriminator", - "unique": true, - "collation": { - "locale": "en", - "strength": 2_i32 - } + "name": "username", + "unique": false, + "collation": { + "locale": "en", + "strength": 2_i32 } - ] - }, - None, - ) + }, + { + "key": { + "username": 1_i32, + "discriminator": 1_i32 + }, + "name": "username_discriminator", + "unique": true, + "collation": { + "locale": "en", + "strength": 2_i32 + } + } + ] + }) .await .expect("Failed to create username index."); - db.run_command( - doc! { - "createIndexes": "messages", - "indexes": [ - { - "key": { - "content": "text" - }, - "name": "content" + db.run_command(doc! { + "createIndexes": "messages", + "indexes": [ + { + "key": { + "content": "text" }, - { - "key": { - "channel": 1_i32, - "_id": 1_i32 - }, - "name": "channel_id_compound" + "name": "content" + }, + { + "key": { + "channel": 1_i32, + "_id": 1_i32 }, - { - "key": { - "author": 1_i32 - }, - "name": "author" + "name": "channel_id_compound" + }, + { + "key": { + "author": 1_i32 }, - { - "key": { - "channel": 1_i32, - "pinned": 1_i32 - }, - "name": "channel_pinned_compound" + "name": "author" + }, + { + "key": { + "channel": 1_i32, + "pinned": 1_i32 }, - ] - }, - None, - ) + "name": "channel_pinned_compound" + }, + ] + }) .await .expect("Failed to create message index."); - db.run_command( - doc! { - "createIndexes": "channel_unreads", - "indexes": [ - { - "key": { - "_id.channel": 1_i32, - "_id.user": 1_i32, - }, - "name": "compound_id" + db.run_command(doc! { + "createIndexes": "channel_unreads", + "indexes": [ + { + "key": { + "_id.channel": 1_i32, + "_id.user": 1_i32, }, - { - "key": { - "_id.user": 1_i32, - }, - "name": "user_id" - } - ] - }, - None, - ) + "name": "compound_id" + }, + { + "key": { + "_id.user": 1_i32, + }, + "name": "user_id" + } + ] + }) .await .expect("Failed to create channel_unreads index."); - db.run_command( - doc! { - "createIndexes": "server_members", - "indexes": [ - { - "key": { - "_id.server": 1_i32, - "_id.user": 1_i32, - }, - "name": "compound_id" + db.run_command(doc! { + "createIndexes": "server_members", + "indexes": [ + { + "key": { + "_id.server": 1_i32, + "_id.user": 1_i32, }, - { - "key": { - "_id.user": 1_i32, - }, - "name": "user_id" - } - ] - }, - None, - ) + "name": "compound_id" + }, + { + "key": { + "_id.user": 1_i32, + }, + "name": "user_id" + } + ] + }) .await .expect("Failed to create server_members index."); - db.run_command( - doc! { - "createIndexes": "attachments", - "indexes": [ - { - "key": { - "hash": 1_i32 - }, - "name": "hash" + db.run_command(doc! { + "createIndexes": "attachments", + "indexes": [ + { + "key": { + "hash": 1_i32 }, - { - "key": { - "used_for.id": 1_i32 - }, - "name": "used_for_id" - } - ] - }, - None, - ) + "name": "hash" + }, + { + "key": { + "used_for.id": 1_i32 + }, + "name": "used_for_id" + } + ] + }) .await .expect("Failed to create attachments index."); - db.run_command( - doc! { - "createIndexes": "attachment_hashes", - "indexes": [ - { - "key": { - "processed_hash": 1_i32 - }, - "name": "processed_hash" - } - ] - }, - None, - ) + db.run_command(doc! { + "createIndexes": "attachment_hashes", + "indexes": [ + { + "key": { + "processed_hash": 1_i32 + }, + "name": "processed_hash" + } + ] + }) .await .expect("Failed to create attachment_hashes index."); db.collection("migrations") - .insert_one( - doc! { - "_id": 0_i32, - "revision": LATEST_REVISION - }, - None, - ) + .insert_one(doc! { + "_id": 0_i32, + "revision": LATEST_REVISION + }) .await .expect("Failed to save migration info."); - db.run_command( - doc! { - "createIndexes": "ratelimit_events", - "indexes": [ - { - "key": { - "_id": 1_i32, - "target_id": 1_i32, - "event_type": 1_i32, - }, - "name": "compound_key" - } - ] - }, - None, - ) + db.run_command(doc! { + "createIndexes": "ratelimit_events", + "indexes": [ + { + "key": { + "_id": 1_i32, + "target_id": 1_i32, + "event_type": 1_i32, + }, + "name": "compound_key" + } + ] + }) .await .expect("Failed to create ratelimit_events index."); diff --git a/crates/core/database/src/models/admin_migrations/ops/mongodb/scripts.rs b/crates/core/database/src/models/admin_migrations/ops/mongodb/scripts.rs index f66adf14..d08b3374 100644 --- a/crates/core/database/src/models/admin_migrations/ops/mongodb/scripts.rs +++ b/crates/core/database/src/models/admin_migrations/ops/mongodb/scripts.rs @@ -26,7 +26,7 @@ pub const LATEST_REVISION: i32 = 33; pub async fn migrate_database(db: &MongoDb) { let migrations = db.col::("migrations"); let data = migrations - .find_one(None, None) + .find_one(doc! {}) .await .expect("Failed to fetch migration data."); @@ -46,7 +46,6 @@ pub async fn migrate_database(db: &MongoDb) { "revision": revision } }, - None, ) .await .expect("Failed to commit migration information."); @@ -74,7 +73,6 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { .update_many( doc! { "attachment": { "$exists": 1_i32 } }, doc! { "$set": { "attachment.tag": "attachments", "attachment.size": 0_i32 } }, - None, ) .await .expect("Failed to update messages."); @@ -83,7 +81,6 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { .update_many( doc! {}, doc! { "$set": { "tag": "attachments", "size": 0_i32 } }, - None, ) .await .expect("Failed to update attachments."); @@ -93,7 +90,7 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { info!("Running migration [revision 2 / 2021-05-08]: Add servers collection."); db.db() - .create_collection("servers", None) + .create_collection("servers") .await .expect("Failed to create servers collection."); } @@ -103,12 +100,12 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { let messages = db.col::("messages"); let mut cursor = messages - .find( - doc! { - "attachment": { - "$exists": 1_i32 - } - }, + .find(doc! { + "attachment": { + "$exists": 1_i32 + } + }) + .with_options( FindOptions::builder() .projection(doc! { "_id": 1_i32, @@ -128,19 +125,18 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { .update_one( doc! { "_id": id }, doc! { "$unset": { "attachment": 1_i32 }, "$set": { "attachments": attachments } }, - None, ) .await .unwrap(); } db.db() - .create_collection("channel_unreads", None) + .create_collection("channel_unreads") .await .expect("Failed to create channel_unreads collection."); db.db() - .create_collection("user_settings", None) + .create_collection("user_settings") .await .expect("Failed to create user_settings collection."); } @@ -149,17 +145,17 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { info!("Running migration [revision 4 / 2021-06-01]: Add more server collections."); db.db() - .create_collection("server_members", None) + .create_collection("server_members") .await .expect("Failed to create server_members collection."); db.db() - .create_collection("server_bans", None) + .create_collection("server_bans") .await .expect("Failed to create server_bans collection."); db.db() - .create_collection("channel_invites", None) + .create_collection("channel_invites") .await .expect("Failed to create channel_invites collection."); } @@ -182,7 +178,6 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { doc! { "$set": to_document(&server).unwrap() }, - None, ) .await .expect("Failed to migrate servers."); @@ -192,20 +187,17 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { info!("Running migration [revision 6 / 2021-07-09]: Add message text index."); db.db() - .run_command( - doc! { - "createIndexes": "messages", - "indexes": [ - { - "key": { - "content": "text" - }, - "name": "content" - } - ] - }, - None, - ) + .run_command(doc! { + "createIndexes": "messages", + "indexes": [ + { + "key": { + "content": "text" + }, + "name": "content" + } + ] + }) .await .expect("Failed to create message index."); } @@ -214,7 +206,7 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { info!("Running migration [revision 7 / 2021-08-11]: Add message text index."); db.db() - .create_collection("bots", None) + .create_collection("bots") .await .expect("Failed to create bots collection."); } @@ -223,22 +215,15 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { info!("Running migration [revision 8 / 2021-09-10]: Update to Authifier version 1."); db.db() - .run_command( - doc! { - "dropIndexes": "accounts", - "index": ["email", "email_normalised"] - }, - None, - ) + .run_command(doc! { + "dropIndexes": "accounts", + "index": ["email", "email_normalised"] + }) .await .expect("Failed to delete legacy account indexes."); let col = db.col::("sessions"); - let mut cursor = db - .col::("accounts") - .find(doc! {}, None) - .await - .unwrap(); + let mut cursor = db.col::("accounts").find(doc! {}).await.unwrap(); while let Some(doc) = cursor.next().await { if let Ok(account) = doc { @@ -267,7 +252,7 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { doc.insert("subscription", sub); } - col.insert_one(doc, None).await.ok(); + col.insert_one(doc).await.ok(); } } else { info!("Account doesn't have any sessions!"); @@ -288,7 +273,6 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { } } }, - None, ) .await .unwrap(); @@ -297,11 +281,7 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { if revision <= 9 { info!("Running migration [revision 9 / 2021-09-14]: Switch from last_message to last_message_id."); - let mut cursor = db - .col::("channels") - .find(doc! {}, None) - .await - .unwrap(); + let mut cursor = db.col::("channels").find(doc! {}).await.unwrap(); while let Some(doc) = cursor.next().await { if let Ok(channel) = doc { @@ -340,7 +320,6 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { "last_message": 1_i32, } }, - None, ) .await .unwrap(); @@ -362,7 +341,6 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { "nonce": 1_i32, } }, - None, ) .await .unwrap(); @@ -375,7 +353,6 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { "nonce": 1_i32, } }, - None, ) .await .unwrap(); @@ -385,70 +362,61 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { info!("Running migration [revision 11 / 2021-11-14]: Add indexes to database."); db.db() - .run_command( - doc! { - "createIndexes": "messages", - "indexes": [ - { - "key": { - "channel": 1_i32 - }, - "name": "channel" - } - ] - }, - None, - ) + .run_command(doc! { + "createIndexes": "messages", + "indexes": [ + { + "key": { + "channel": 1_i32 + }, + "name": "channel" + } + ] + }) .await .expect("Failed to create message index."); db.db() - .run_command( - doc! { - "createIndexes": "channel_unreads", - "indexes": [ - { - "key": { - "_id.channel": 1_i32, - "_id.user": 1_i32, - }, - "name": "compound_id" + .run_command(doc! { + "createIndexes": "channel_unreads", + "indexes": [ + { + "key": { + "_id.channel": 1_i32, + "_id.user": 1_i32, }, - { - "key": { - "_id.user": 1_i32, - }, - "name": "user_id" - } - ] - }, - None, - ) + "name": "compound_id" + }, + { + "key": { + "_id.user": 1_i32, + }, + "name": "user_id" + } + ] + }) .await .expect("Failed to create channel_unreads index."); db.db() - .run_command( - doc! { - "createIndexes": "server_members", - "indexes": [ - { - "key": { - "_id.server": 1_i32, - "_id.user": 1_i32, - }, - "name": "compound_id" + .run_command(doc! { + "createIndexes": "server_members", + "indexes": [ + { + "key": { + "_id.server": 1_i32, + "_id.user": 1_i32, }, - { - "key": { - "_id.user": 1_i32, - }, - "name": "user_id" - } - ] - }, - None, - ) + "name": "compound_id" + }, + { + "key": { + "_id.user": 1_i32, + }, + "name": "user_id" + } + ] + }) .await .expect("Failed to create server_members index."); } @@ -457,21 +425,18 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { info!("Running migration [revision 12 / 2021-11-21]: Add indexes to database."); db.db() - .run_command( - doc! { - "createIndexes": "messages", - "indexes": [ - { - "key": { - "channel": 1_i32, - "_id": 1_i32 - }, - "name": "channel_id_compound" - } - ] - }, - None, - ) + .run_command(doc! { + "createIndexes": "messages", + "indexes": [ + { + "key": { + "channel": 1_i32, + "_id": 1_i32 + }, + "name": "channel_id_compound" + } + ] + }) .await .expect("Failed to create message index."); } @@ -485,7 +450,7 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { async_std::task::sleep(Duration::from_secs(10)).await; let servers = db.col::("servers"); - let mut cursor = servers.find(doc! {}, None).await.unwrap(); + let mut cursor = servers.find(doc! {}).await.unwrap(); while let Some(Ok(mut document)) = cursor.next().await { let id = document.get_str("_id").unwrap().to_string(); @@ -529,13 +494,13 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { } servers - .update_one(doc! { "_id": id }, doc! { "$set": update }, None) + .update_one(doc! { "_id": id }, doc! { "$set": update }) .await .unwrap(); } let channels = db.col::("channels"); - let mut cursor = channels.find(doc! {}, None).await.unwrap(); + let mut cursor = channels.find(doc! {}).await.unwrap(); while let Some(Ok(document)) = cursor.next().await { let id = document.get_str("_id").unwrap().to_string(); @@ -575,7 +540,7 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { } channels - .update_one(doc! { "_id": id }, update, None) + .update_one(doc! { "_id": id }, update) .await .unwrap(); } @@ -596,7 +561,6 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { "content": "system" } }, - None, ) .await .unwrap(); @@ -621,25 +585,22 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { .unwrap(); db.db() - .create_collection("emojis", None) + .create_collection("emojis") .await .expect("Failed to create emojis collection."); db.db() - .run_command( - doc! { - "createIndexes": "emojis", - "indexes": [ - { - "key": { - "parent.id": 1_i32, - }, - "name": "parent_id" - } - ] - }, - None, - ) + .run_command(doc! { + "createIndexes": "emojis", + "indexes": [ + { + "key": { + "parent.id": 1_i32, + }, + "name": "parent_id" + } + ] + }) .await .expect("Failed to create emoji parent index."); } @@ -652,10 +613,9 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { doc! {}, doc! { "$set": { - "joined_at": DateTime::now().to_rfc3339_string() + "joined_at": DateTime::now().try_to_rfc3339_string().expect("Failed to convert the date to rfc3339") } }, - None, ) .await .expect("Failed to update server members."); @@ -666,13 +626,10 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { if db .db() - .run_command( - doc! { - "dropIndexes": "messages", - "index": ["channel"] - }, - None, - ) + .run_command(doc! { + "dropIndexes": "messages", + "index": ["channel"] + }) .await .is_err() { @@ -680,20 +637,17 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { } db.db() - .run_command( - doc! { - "createIndexes": "messages", - "indexes": [ - { - "key": { - "author": 1_i32, - }, - "name": "author" - } - ] - }, - None, - ) + .run_command(doc! { + "createIndexes": "messages", + "indexes": [ + { + "key": { + "author": 1_i32, + }, + "name": "author" + } + ] + }) .await .expect("Failed to create messages author index."); } @@ -703,35 +657,26 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { "Running migration [revision 19 / 27-02-2023]: Create report / snapshot collections." ); - db.db() - .create_collection("safety_reports", None) - .await - .unwrap(); + db.db().create_collection("safety_reports").await.unwrap(); - db.db() - .create_collection("safety_snapshots", None) - .await - .unwrap(); + db.db().create_collection("safety_snapshots").await.unwrap(); } if revision <= 20 { info!("Running migration [revision 20 / 28-02-2023]: Add index `snapshot.report_id`."); db.db() - .run_command( - doc! { - "createIndexes": "safety_snapshots", - "indexes": [ - { - "key": { - "report_id": 1_i32 - }, - "name": "report_id" - } - ] - }, - None, - ) + .run_command(doc! { + "createIndexes": "safety_snapshots", + "indexes": [ + { + "key": { + "report_id": 1_i32 + }, + "name": "report_id" + } + ] + }) .await .expect("Failed to create safety snapshot index."); } @@ -739,10 +684,7 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { if revision <= 21 { info!("Running migration [revision 21 / 31-05-2023]: Add collection `safety_strikes`."); - db.db() - .create_collection("safety_strikes", None) - .await - .unwrap(); + db.db().create_collection("safety_strikes").await.unwrap(); } if revision <= 22 { @@ -756,7 +698,6 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { "moderator_id": "01EX2NCWQ0CHS3QJF0FEQS1GR4" } }, - None, ) .await .expect("Failed to update server members."); @@ -766,13 +707,10 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { info!("Running migration [revision 23 / 10-06-2023]: Generate discriminators for users."); db.db() - .run_command( - doc! { - "dropIndexes": "users", - "index": "username" - }, - None, - ) + .run_command(doc! { + "dropIndexes": "users", + "index": "username" + }) .await .expect("Failed to drop existing username index."); @@ -787,7 +725,7 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { let users: Vec = db .col::("users") - .find(doc! {}, None) + .find(doc! {}) .await .unwrap() .map(|doc| doc.expect("id and username")) @@ -839,7 +777,6 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { "discriminator": discriminator } }, - None, ) .await .unwrap(); @@ -887,7 +824,6 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { "display_name": &info.username } }, - None, ) .await .unwrap(); @@ -898,43 +834,37 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { if revision <= 24 { info!("Running migration [revision 24 / 09-06-2023]: Add collection `channel_webhooks` if not exists, update users index."); - db.db() - .create_collection("channel_webhooks", None) - .await - .ok(); + db.db().create_collection("channel_webhooks").await.ok(); db.db() - .run_command( - doc! { - "createIndexes": "users", - "indexes": [ - { - "key": { - "username": 1_i32 - }, - "name": "username", - "unique": false, - "collation": { - "locale": "en", - "strength": 2_i32 - } + .run_command(doc! { + "createIndexes": "users", + "indexes": [ + { + "key": { + "username": 1_i32 }, - { - "key": { - "username": 1_i32, - "discriminator": 1_i32 - }, - "name": "username_discriminator", - "unique": true, - "collation": { - "locale": "en", - "strength": 2_i32 - } + "name": "username", + "unique": false, + "collation": { + "locale": "en", + "strength": 2_i32 } - ] - }, - None, - ) + }, + { + "key": { + "username": 1_i32, + "discriminator": 1_i32 + }, + "name": "username_discriminator", + "unique": true, + "collation": { + "locale": "en", + "strength": 2_i32 + } + } + ] + }) .await .expect("Failed to create username index."); }; @@ -950,7 +880,6 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { "permissions": *DEFAULT_WEBHOOK_PERMISSIONS as i64 } }, - None, ) .await .expect("Failed to update webhooks."); @@ -959,28 +888,22 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { if revision <= 25 { info!("Running migration [revision 25 / 15-06-2023]: Add collection `ratelimit_events` with index."); - db.db() - .create_collection("ratelimit_events", None) - .await - .ok(); + db.db().create_collection("ratelimit_events").await.ok(); db.db() - .run_command( - doc! { - "createIndexes": "ratelimit_events", - "indexes": [ - { - "key": { - "_id": 1_i32, - "target_id": 1_i32, - "event_type": 1_i32, - }, - "name": "compound_key" - } - ] - }, - None, - ) + .run_command(doc! { + "createIndexes": "ratelimit_events", + "indexes": [ + { + "key": { + "_id": 1_i32, + "target_id": 1_i32, + "event_type": 1_i32, + }, + "name": "compound_key" + } + ] + }) .await .expect("Failed to create ratelimit_events index."); } @@ -1017,12 +940,9 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { let invites = db .db() .collection::("channel_invites") - .find( - doc! { - "type": { "$exists": false } - }, - None, - ) + .find(doc! { + "type": { "$exists": false } + }) .await .expect("failed to find invites") .filter_map(|s| async { s.ok() }) @@ -1056,18 +976,15 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { if !invites.is_empty() { db.db() .collection("channel_invites") - .insert_many(invites, None) + .insert_many(invites) .await .expect("failed to insert corrected invite"); db.db() .collection::("channel_invites") - .delete_many( - doc! { - "type": { "$exists": false } - }, - None, - ) + .delete_many(doc! { + "type": { "$exists": false } + }) .await .expect("failed to find invites"); } @@ -1077,21 +994,18 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { info!("Running migration [revision 27 / 21-07-2024]: create message pinned index."); db.db() - .run_command( - doc! { - "createIndexes": "messages", - "indexes": [ - { - "key": { - "channel": 1_i32, - "pinned": 1_i32 - }, - "name": "channel_pinned_compound" - } - ] - }, - None, - ) + .run_command(doc! { + "createIndexes": "messages", + "indexes": [ + { + "key": { + "channel": 1_i32, + "pinned": 1_i32 + }, + "name": "channel_pinned_compound" + } + ] + }) .await .expect("Failed to create message index."); } @@ -1099,44 +1013,35 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { if revision <= 28 { info!("Running migration [revision 28 / 10-09-2024]: Add support for new Autumn."); - db.db() - .create_collection("attachment_hashes", None) - .await - .ok(); + db.db().create_collection("attachment_hashes").await.ok(); db.db() - .run_command( - doc! { - "createIndexes": "attachments", - "indexes": [ - { - "key": { - "hash": 1_i32 - }, - "name": "hash" - } - ] - }, - None, - ) + .run_command(doc! { + "createIndexes": "attachments", + "indexes": [ + { + "key": { + "hash": 1_i32 + }, + "name": "hash" + } + ] + }) .await .expect("Failed to create attachments index."); db.db() - .run_command( - doc! { - "createIndexes": "attachment_hashes", - "indexes": [ - { - "key": { - "processed_hash": 1_i32 - }, - "name": "processed_hash" - } - ] - }, - None, - ) + .run_command(doc! { + "createIndexes": "attachment_hashes", + "indexes": [ + { + "key": { + "processed_hash": 1_i32 + }, + "name": "processed_hash" + } + ] + }) .await .expect("Failed to create attachment_hashes index."); } @@ -1147,20 +1052,17 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { info!("Running migration [revision 30 / 29-09-2024]: Add index for used_for.id to attachments."); db.db() - .run_command( - doc! { - "createIndexes": "attachments", - "indexes": [ - { - "key": { - "used_for.id": 1_i32 - }, - "name": "used_for_id" - } - ] - }, - None, - ) + .run_command(doc! { + "createIndexes": "attachments", + "indexes": [ + { + "key": { + "used_for.id": 1_i32 + }, + "name": "used_for_id" + } + ] + }) .await .expect("Failed to create attachments index."); } @@ -1177,7 +1079,7 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { let webhooks = db .db() .collection::("channel_webhooks") - .find(doc! {}, None) + .find(doc! {}) .await .expect("webhooks") .filter_map(|s| async { s.ok() }) @@ -1209,7 +1111,6 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { "creator_id": creator_id } }, - None, ) .await .expect("update webhook"); @@ -1220,7 +1121,7 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { }) => { db.db() .collection::("channel_webhooks") - .delete_one(doc! { "_id": webhook._id }, None) + .delete_one(doc! { "_id": webhook._id }) .await .expect("failed to delete invalid webhook"); } diff --git a/crates/core/database/src/models/channel_invites/ops/mongodb.rs b/crates/core/database/src/models/channel_invites/ops/mongodb.rs index f6d55fff..d628be8e 100644 --- a/crates/core/database/src/models/channel_invites/ops/mongodb.rs +++ b/crates/core/database/src/models/channel_invites/ops/mongodb.rs @@ -24,12 +24,9 @@ impl AbstractChannelInvites for MongoDb { async fn fetch_invites_for_server(&self, server_id: &str) -> Result> { Ok(self .col::(COL) - .find( - doc! { - "server": server_id, - }, - None, - ) + .find(doc! { + "server": server_id, + }) .await .map_err(|_| create_database_error!("find", COL))? .filter_map(|s| async { diff --git a/crates/core/database/src/models/channel_unreads/ops.rs b/crates/core/database/src/models/channel_unreads/ops.rs index 6a6e98af..6c91bf64 100644 --- a/crates/core/database/src/models/channel_unreads/ops.rs +++ b/crates/core/database/src/models/channel_unreads/ops.rs @@ -26,6 +26,14 @@ pub trait AbstractChannelUnreads: Sync + Send { message_ids: &[String], ) -> Result<()>; + /// Add a mention. + async fn add_mention_to_many_unreads<'a>( + &self, + channel_id: &str, + user_ids: &[String], + message_ids: &[String], + ) -> Result<()>; + /// Fetch all unreads with mentions for a user. async fn fetch_unread_mentions(&self, user_id: &str) -> Result>; diff --git a/crates/core/database/src/models/channel_unreads/ops/mongodb.rs b/crates/core/database/src/models/channel_unreads/ops/mongodb.rs index 76cead11..7225dc3d 100644 --- a/crates/core/database/src/models/channel_unreads/ops/mongodb.rs +++ b/crates/core/database/src/models/channel_unreads/ops/mongodb.rs @@ -37,6 +37,8 @@ impl AbstractChannelUnreads for MongoDb { "last_id": message_id } }, + ) + .with_options( FindOneAndUpdateOptions::builder() .upsert(true) .return_document(ReturnDocument::After) @@ -51,15 +53,12 @@ impl AbstractChannelUnreads for MongoDb { let current_time = Ulid::new().to_string(); self.col::(COL) - .delete_many( - doc! { - "_id.channel": { - "$in": channel_ids - }, - "_id.user": user_id + .delete_many(doc! { + "_id.channel": { + "$in": channel_ids }, - None, - ) + "_id.user": user_id + }) .await .map_err(|_| create_database_error!("delete_many", COL))?; @@ -77,7 +76,6 @@ impl AbstractChannelUnreads for MongoDb { } }) .collect::>(), - None, ) .await .map(|_| ()) @@ -104,13 +102,42 @@ impl AbstractChannelUnreads for MongoDb { } } }, - UpdateOptions::builder().upsert(true).build(), ) + .with_options(UpdateOptions::builder().upsert(true).build()) .await .map(|_| ()) .map_err(|_| create_database_error!("update_one", COL)) } + /// Add a mention to multiple users. + async fn add_mention_to_many_unreads<'a>( + &self, + channel_id: &str, + user_ids: &[String], + message_ids: &[String], + ) -> Result<()> { + self.col::(COL) + .update_many( + doc! { + "_id.channel": channel_id, + "_id.user": { + "$in": user_ids + }, + }, + doc! { + "$push": { + "mentions": { + "$each": message_ids + } + } + }, + ) + .with_options(UpdateOptions::builder().upsert(true).build()) + .await + .map(|_| ()) + .map_err(|_| create_database_error!("update_many", COL)) + } + /// Fetch all channel unreads for a user. async fn fetch_unreads(&self, user_id: &str) -> Result> { query!( diff --git a/crates/core/database/src/models/channel_unreads/ops/reference.rs b/crates/core/database/src/models/channel_unreads/ops/reference.rs index 914ac95d..36969b8f 100644 --- a/crates/core/database/src/models/channel_unreads/ops/reference.rs +++ b/crates/core/database/src/models/channel_unreads/ops/reference.rs @@ -78,6 +78,38 @@ impl AbstractChannelUnreads for ReferenceDb { Ok(()) } + /// Add a mention to multiple users. + async fn add_mention_to_many_unreads<'a>( + &self, + channel_id: &str, + user_ids: &[String], + message_ids: &[String], + ) -> Result<()> { + let mut unreads = self.channel_unreads.lock().await; + + for user_id in user_ids { + let key = ChannelCompositeKey { + channel: channel_id.to_string(), + user: user_id.to_string(), + }; + + if let Some(unread) = unreads.get_mut(&key) { + unread.mentions.replace(message_ids.to_vec()); + } else { + unreads.insert( + key.clone(), + ChannelUnread { + id: key, + last_id: None, + mentions: Some(message_ids.to_vec()), + }, + ); + } + } + + Ok(()) + } + async fn fetch_unread_mentions(&self, user_id: &str) -> Result> { let unreads = self.channel_unreads.lock().await; Ok(unreads diff --git a/crates/core/database/src/models/channel_webhooks/ops/mongodb.rs b/crates/core/database/src/models/channel_webhooks/ops/mongodb.rs index 457e3b68..9e11d561 100644 --- a/crates/core/database/src/models/channel_webhooks/ops/mongodb.rs +++ b/crates/core/database/src/models/channel_webhooks/ops/mongodb.rs @@ -24,12 +24,9 @@ impl AbstractWebhooks for MongoDb { async fn fetch_webhooks_for_channel(&self, channel_id: &str) -> Result> { Ok(self .col::(COL) - .find( - doc! { - "channel_id": channel_id, - }, - None, - ) + .find(doc! { + "channel_id": channel_id, + }) .await .map_err(|_| create_database_error!("find", COL))? .filter_map(|s| async { diff --git a/crates/core/database/src/models/channels/ops/mongodb.rs b/crates/core/database/src/models/channels/ops/mongodb.rs index c75fab53..79612f8d 100644 --- a/crates/core/database/src/models/channels/ops/mongodb.rs +++ b/crates/core/database/src/models/channels/ops/mongodb.rs @@ -23,14 +23,11 @@ impl AbstractChannels for MongoDb { async fn fetch_channels<'a>(&self, ids: &'a [String]) -> Result> { Ok(self .col::(COL) - .find( - doc! { - "_id": { - "$in": ids - } - }, - None, - ) + .find(doc! { + "_id": { + "$in": ids + } + }) .await .map_err(|_| create_database_error!("fetch", "channels"))? .filter_map(|s| async { @@ -119,7 +116,6 @@ impl AbstractChannels for MongoDb { "recipients": user } }, - None, ) .await .map(|_| ()) @@ -141,7 +137,6 @@ impl AbstractChannels for MongoDb { "role_permissions.".to_owned() + role: permissions } }, - None, ) .await .map(|_| ()) @@ -179,7 +174,6 @@ impl AbstractChannels for MongoDb { "recipients": user } }, - None, ) .await .map(|_| ()) @@ -253,7 +247,6 @@ impl AbstractChannels for MongoDb { "_id": server.id }, update, - None, ) .await .map_err(|_| create_database_error!("update_one", "servers"))?; @@ -274,23 +267,17 @@ impl MongoDb { pub async fn delete_associated_channel_objects(&self, id: Bson) -> Result<()> { // Delete all invites to these channels. self.col::("channel_invites") - .delete_many( - doc! { - "channel": &id - }, - None, - ) + .delete_many(doc! { + "channel": &id + }) .await .map_err(|_| create_database_error!("delete_many", "channel_invites"))?; // Delete unread message objects on channels. self.col::("channel_unreads") - .delete_many( - doc! { - "_id.channel": &id - }, - None, - ) + .delete_many(doc! { + "_id.channel": &id + }) .await .map_err(|_| create_database_error!("delete_many", "channel_unreads")) .map(|_| ())?; @@ -299,12 +286,9 @@ impl MongoDb { // Delete all webhooks on this channel. self.col::("webhooks") - .delete_many( - doc! { - "channel": &id - }, - None, - ) + .delete_many(doc! { + "channel": &id + }) .await .map_err(|_| create_database_error!("delete_many", "webhooks")) .map(|_| ()) diff --git a/crates/core/database/src/models/emojis/ops/mongodb.rs b/crates/core/database/src/models/emojis/ops/mongodb.rs index 168d3db7..6dd3137b 100644 --- a/crates/core/database/src/models/emojis/ops/mongodb.rs +++ b/crates/core/database/src/models/emojis/ops/mongodb.rs @@ -60,7 +60,6 @@ impl AbstractEmojis for MongoDb { } } }, - None, ) .await .map(|_| ()) diff --git a/crates/core/database/src/models/file_hashes/ops/mongodb.rs b/crates/core/database/src/models/file_hashes/ops/mongodb.rs index 153cb72f..e2f06067 100644 --- a/crates/core/database/src/models/file_hashes/ops/mongodb.rs +++ b/crates/core/database/src/models/file_hashes/ops/mongodb.rs @@ -42,7 +42,6 @@ impl AbstractAttachmentHashes for MongoDb { "iv": nonce } }, - None, ) .await .map(|_| ()) diff --git a/crates/core/database/src/models/files/ops/mongodb.rs b/crates/core/database/src/models/files/ops/mongodb.rs index 43e8e946..cd4241fe 100644 --- a/crates/core/database/src/models/files/ops/mongodb.rs +++ b/crates/core/database/src/models/files/ops/mongodb.rs @@ -110,7 +110,6 @@ impl AbstractAttachments for MongoDb { "uploader_id": uploader_id } }, - None, ) .await .map_err(|_| create_database_error!("update_one", COL))?; @@ -130,7 +129,6 @@ impl AbstractAttachments for MongoDb { "reported": true } }, - None, ) .await .map(|_| ()) @@ -149,7 +147,6 @@ impl AbstractAttachments for MongoDb { "deleted": true } }, - None, ) .await .map(|_| ()) @@ -170,7 +167,6 @@ impl AbstractAttachments for MongoDb { "deleted": true } }, - None, ) .await .map(|_| ()) @@ -193,7 +189,6 @@ impl MongoDb { "deleted": true } }, - None, ) .await .map(|_| ()) diff --git a/crates/core/database/src/models/messages/model.rs b/crates/core/database/src/models/messages/model.rs index 92055cde..d74f2628 100644 --- a/crates/core/database/src/models/messages/model.rs +++ b/crates/core/database/src/models/messages/model.rs @@ -5,9 +5,10 @@ use iso8601_timestamp::Timestamp; use revolt_config::{config, FeaturesLimits}; use revolt_models::v0::{ self, BulkMessageResponse, DataMessageSend, Embed, MessageAuthor, MessageFlags, MessageSort, - MessageWebhook, PushNotification, ReplyIntent, SendableEmbed, Text, RE_MENTION, + MessageWebhook, PushNotification, ReplyIntent, SendableEmbed, Text, RE_BLOCKS, RE_MENTION, + RE_ROLE_MENTION, }; -use revolt_permissions::{ChannelPermission, PermissionValue}; +use revolt_permissions::{calculate_channel_permissions, ChannelPermission, PermissionValue}; use revolt_result::{ErrorType, Result}; use ulid::Ulid; use validator::Validate; @@ -15,7 +16,10 @@ use validator::Validate; use crate::{ events::client::EventV1, tasks::{self, ack::AckEvent}, - util::{bulk_permissions::BulkDatabasePermissionQuery, idempotency::IdempotencyKey}, + util::{ + bulk_permissions::BulkDatabasePermissionQuery, idempotency::IdempotencyKey, + permissions::DatabasePermissionQuery, + }, Channel, Database, Emoji, File, User, AMQP, }; @@ -53,6 +57,9 @@ auto_derived_partial!( /// Array of user ids mentioned in this message #[serde(skip_serializing_if = "Option::is_none")] pub mentions: Option>, + /// Array of role ids mentioned in this message + #[serde(skip_serializing_if = "Option::is_none")] + pub role_mentions: Option>, /// Array of message ids this message is replying to #[serde(skip_serializing_if = "Option::is_none")] pub replies: Option>, @@ -71,7 +78,7 @@ auto_derived_partial!( /// Bitfield of message flags #[serde(skip_serializing_if = "Option::is_none")] - pub flags: Option, + pub flags: Option, }, "PartialMessage" ); @@ -201,6 +208,30 @@ auto_derived!( } ); +pub struct MessageFlagsValue(pub u32); + +impl MessageFlagsValue { + pub fn has(&self, flag: MessageFlags) -> bool { + self.has_value(flag as u32) + } + pub fn has_value(&self, bit: u32) -> bool { + let mask = 1 << bit; + self.0 & mask == mask + } + + pub fn set(&mut self, flag: MessageFlags, toggle: bool) -> &mut Self { + self.set_value(flag as u32, toggle) + } + pub fn set_value(&mut self, bit: u32, toggle: bool) -> &mut Self { + if toggle { + self.0 |= 1 << bit; + } else { + self.0 &= !(1 << bit); + } + self + } +} + #[allow(clippy::derivable_impls)] impl Default for Message { fn default() -> Self { @@ -216,6 +247,7 @@ impl Default for Message { edited: None, embeds: None, mentions: None, + role_mentions: None, replies: None, reactions: Default::default(), interactions: Default::default(), @@ -264,13 +296,43 @@ impl Message { return Err(create_error!(EmptyMessage)); } - // Ensure flags are either not set or have permissible values - if let Some(flags) = &data.flags { - if flags != &0 && flags != &1 { + let allow_mass_mentions = allow_mentions && config.features.mass_mentions_enabled; + + let mut mentions_everyone = false; + let mut mentions_online = false; + let mut suppress_notifications = false; + + if let Some(raw_flags) = &data.flags { + if raw_flags > &7 { + // quick path to failure: bigger than all the bits combined return Err(create_error!(InvalidProperty)); } + + // First step of mass mention resolution + let flags = MessageFlagsValue(*raw_flags); + suppress_notifications = flags.has(MessageFlags::SuppressNotifications); + mentions_everyone = allow_mentions && flags.has(MessageFlags::MentionsEveryone); + mentions_online = allow_mentions && flags.has(MessageFlags::MentionsOnline); + + // Not a bot, and attempting to set mention flags + if user.as_ref().is_some_and(|u| u.bot.as_ref().is_none()) + && (mentions_everyone || mentions_online) + { + return Err(create_error!(IsNotBot)); + } + + if mentions_everyone && mentions_online { + return Err(create_error!(InvalidFlagValue)); + } } + let server_id = match channel { + Channel::TextChannel { ref server, .. } | Channel::VoiceChannel { ref server, .. } => { + Some(server.clone()) + } + _ => None, + }; + // Ensure restrict_reactions is not specified without reactions list if let Some(interactions) = &data.interactions { if interactions.restrict_reactions { @@ -304,19 +366,99 @@ impl Message { .unwrap_or_default(), author: author_id, webhook: webhook.map(|w| w.into()), - flags: data.flags.map(|v| v as i32), + flags: data.flags, ..Default::default() }; // Parse mentions in message. let mut mentions = HashSet::new(); - if allow_mentions { - if let Some(content) = &data.content { - for capture in RE_MENTION.captures_iter(content) { - if let Some(mention) = capture.get(1) { - mentions.insert(mention.as_str().to_string()); + let mut role_mentions = HashSet::new(); + let mut role_model_mentions = vec![]; + + if let Some(raw_content) = &data.content { + // remove all codeblocks before running the mention regex + let modified_content = RE_BLOCKS.replace_all(raw_content, ""); + + for capture in RE_MENTION.captures_iter(&modified_content).flatten() { + if let Some(mention) = capture.get(1) { + mentions.insert(mention.as_str().to_string()); + } + } + if allow_mass_mentions && server_id.is_some() { + // Second step of mass mention resolution. + for capture in RE_ROLE_MENTION.captures_iter(&modified_content).flatten() { + let raw = capture.get(0).expect("No capture?").as_str(); + if raw == "@everyone" { + mentions_everyone = true; + // Can't break early here since we want to capture any role ids + } else if raw == "@online" { + mentions_online = true; + } else if let Some(role_match) = capture.get(1) { + role_mentions.insert(role_match.as_str().to_string()); } } + + if !role_mentions.is_empty() { + let server_data = db + .fetch_server(server_id.unwrap().as_str()) + .await + .expect("Failed to fetch server"); + + role_mentions = role_mentions + .iter() + .filter(|role_id| server_data.roles.contains_key(*role_id)) + .cloned() + .collect(); + + role_model_mentions.extend( + role_mentions + .iter() + .map(|role_id| server_data.roles.get(role_id).to_owned()), + ); + } + } + } + + // Validate the user can perform a mass mention + if !config.features.mass_mentions_enabled + && (mentions_everyone || mentions_online || !role_mentions.is_empty()) + { + mentions_everyone = false; + mentions_online = false; + role_mentions.clear(); + } else if mentions_everyone || mentions_online || !role_mentions.is_empty() { + debug!( + "Mentioned everyone: {}, mentioned online: {}, mentioned roles: {:?}", + mentions_everyone, mentions_online, &role_mentions + ); + if let Some(user) = match author { + MessageAuthor::User(user) => Some(Ok(user)), + MessageAuthor::System { .. } => Some(Err(())), // DISALLOWED + MessageAuthor::Webhook(..) => None, // Bypass check + } { + if user.is_err() { + return Err(create_error!(InvalidProperty)); + } + let owned_user: User = user.unwrap().to_owned().into(); + + let mut query = DatabasePermissionQuery::new(db, &owned_user).channel(&channel); + let perms = calculate_channel_permissions(&mut query).await; + + if (mentions_everyone || mentions_online) + && !perms.has_channel_permission(ChannelPermission::MentionEveryone) + { + return Err(create_error!(MissingPermission { + permission: ChannelPermission::MentionEveryone.to_string() + })); + } + + if !role_mentions.is_empty() + && !perms.has_channel_permission(ChannelPermission::MentionRoles) + { + return Err(create_error!(MissingPermission { + permission: ChannelPermission::MentionRoles.to_string() + })); + } } } @@ -366,6 +508,7 @@ impl Message { let recipients_hash: HashSet<&String, RandomState> = HashSet::from_iter(recipients); mentions.retain(|m| recipients_hash.contains(m)); + role_mentions.clear(); } Channel::TextChannel { ref server, .. } | Channel::VoiceChannel { ref server, .. } => { @@ -406,12 +549,27 @@ impl Message { message.mentions.replace(mentions.into_iter().collect()); } + if !role_mentions.is_empty() { + message + .role_mentions + .replace(role_mentions.into_iter().collect()); + } + if !replies.is_empty() { message .replies .replace(replies.into_iter().collect::>()); } + // Calculate final message flags + let mut flag_value = MessageFlagsValue(0); + flag_value + .set(MessageFlags::SuppressNotifications, suppress_notifications) + .set(MessageFlags::MentionsEveryone, mentions_everyone) + .set(MessageFlags::MentionsOnline, mentions_online); + + message.flags = Some(flag_value.0); + // Add attachments to message. let mut attachments = vec![]; if data @@ -490,7 +648,12 @@ impl Message { tasks::ack::queue_message( self.channel.to_string(), AckEvent::ProcessMessage { - messages: vec![(None, self.clone(), mentions.clone(), true)], + messages: vec![( + None, + self.clone(), + mentions.clone(), + self.has_suppressed_notifications(), + )], }, ) .await; @@ -534,7 +697,9 @@ impl Message { ) .await?; - if !self.has_suppressed_notifications() { + if !self.has_suppressed_notifications() + && (self.mentions.is_some() || self.contains_mass_push_mention()) + { // send Push notifications tasks::ack::queue_message( self.channel.to_string(), @@ -557,7 +722,7 @@ impl Message { } _ => vec![], }, - self.has_suppressed_notifications(), + false, // branch already dictates this )], }, ) @@ -594,13 +759,24 @@ impl Message { /// Whether this message has suppressed notifications pub fn has_suppressed_notifications(&self) -> bool { if let Some(flags) = self.flags { - flags & MessageFlags::SuppressNotifications as i32 - == MessageFlags::SuppressNotifications as i32 + flags & MessageFlags::SuppressNotifications as u32 + == MessageFlags::SuppressNotifications as u32 } else { false } } + pub fn contains_mass_push_mention(&self) -> bool { + let ping = if let Some(flags) = self.flags { + let flags = MessageFlagsValue(flags); + flags.has(MessageFlags::MentionsEveryone) + } else { + false + }; + + ping || self.role_mentions.is_some() + } + /// Update message data pub async fn update( &mut self, diff --git a/crates/core/database/src/models/messages/ops/mongodb.rs b/crates/core/database/src/models/messages/ops/mongodb.rs index 721a3b7c..449e71ef 100644 --- a/crates/core/database/src/models/messages/ops/mongodb.rs +++ b/crates/core/database/src/models/messages/ops/mongodb.rs @@ -228,7 +228,6 @@ impl AbstractMessages for MongoDb { "_id": id }, query, - None, ) .await .map(|_| ()) @@ -247,7 +246,6 @@ impl AbstractMessages for MongoDb { format!("reactions.{emoji}"): user } }, - None, ) .await .map(|_| ()) @@ -266,7 +264,6 @@ impl AbstractMessages for MongoDb { format!("reactions.{emoji}"): user } }, - None, ) .await .map(|_| ()) @@ -285,7 +282,6 @@ impl AbstractMessages for MongoDb { format!("reactions.{emoji}"): 1 } }, - None, ) .await .map(|_| ()) @@ -300,15 +296,12 @@ impl AbstractMessages for MongoDb { /// Delete messages from a channel by their ids and corresponding channel id async fn delete_messages(&self, channel: &str, ids: &[String]) -> Result<()> { self.col::(COL) - .delete_many( - doc! { - "channel": channel, - "_id": { - "$in": ids - } - }, - None, - ) + .delete_many(doc! { + "channel": channel, + "_id": { + "$in": ids + } + }) .await .map(|_| ()) .map_err(|_| create_database_error!("delete_many", COL)) @@ -362,7 +355,6 @@ impl MongoDb { "deleted": true } }, - None, ) .await .map_err(|_| create_database_error!("update_many", "attachments"))?; @@ -370,7 +362,7 @@ impl MongoDb { // And then delete said messages. self.col::(COL) - .delete_many(projection, None) + .delete_many(projection) .await .map(|_| ()) .map_err(|_| create_database_error!("delete_many", COL)) diff --git a/crates/core/database/src/models/ratelimit_events/ops/mongodb.rs b/crates/core/database/src/models/ratelimit_events/ops/mongodb.rs index ed6f0a1b..29edd64d 100644 --- a/crates/core/database/src/models/ratelimit_events/ops/mongodb.rs +++ b/crates/core/database/src/models/ratelimit_events/ops/mongodb.rs @@ -23,16 +23,13 @@ impl AbstractRatelimitEvents for MongoDb { count: usize, ) -> Result { self.col::(COL) - .count_documents( - doc! { - "_id": { - "$gte": Ulid::from_datetime(SystemTime::now() - period).to_string() - }, - "target_id": target_id, - "event_type": event_type.to_string() + .count_documents(doc! { + "_id": { + "$gte": Ulid::from_datetime(SystemTime::now() - period).to_string() }, - None, - ) + "target_id": target_id, + "event_type": event_type.to_string() + }) .await .map(|c| c as usize >= count) .map_err(|_| create_database_error!("count_documents", COL)) diff --git a/crates/core/database/src/models/server_members/ops.rs b/crates/core/database/src/models/server_members/ops.rs index 369f43e2..1d5a045f 100644 --- a/crates/core/database/src/models/server_members/ops.rs +++ b/crates/core/database/src/models/server_members/ops.rs @@ -1,3 +1,4 @@ +use ::mongodb::SessionCursor; use revolt_result::Result; use crate::{FieldsMember, Member, MemberCompositeKey, PartialMember}; @@ -5,6 +6,66 @@ use crate::{FieldsMember, Member, MemberCompositeKey, PartialMember}; mod mongodb; mod reference; +#[derive(Debug)] +pub enum ChunkedServerMembersGenerator { + #[cfg(feature = "mongodb")] + MongoDb { + session: ::mongodb::ClientSession, + cursor: Option>, + }, + + Reference { + offset: i32, + data: Option>, + }, +} + +impl ChunkedServerMembersGenerator { + #[cfg(feature = "mongodb")] + pub fn new_mongo(session: ::mongodb::ClientSession, cursor: SessionCursor) -> Self { + ChunkedServerMembersGenerator::MongoDb { + session, + cursor: Some(cursor), + } + } + + pub fn new_reference(data: Vec) -> Self { + ChunkedServerMembersGenerator::Reference { + offset: 0, + data: Some(data), + } + } + + pub async fn next(&mut self) -> Option { + match self { + #[cfg(feature = "mongodb")] + ChunkedServerMembersGenerator::MongoDb { session, cursor } => { + if let Some(cursor) = cursor { + let value = cursor.next(session).await; + value.map(|val| val.expect("Failed to fetch the next member")) + } else { + warn!("Attempted to access a (MongoDb) server member generator without first setting a cursor"); + None + } + } + ChunkedServerMembersGenerator::Reference { offset, data } => { + if let Some(data) = data { + if data.len() as i32 >= *offset { + None + } else { + let resp = &data[*offset as usize]; + *offset += 1; + Some(resp.clone()) + } + } else { + warn!("Attempted to access a (Reference) server member generator without first providing data"); + None + } + } + } + } +} + #[async_trait] pub trait AbstractServerMembers: Sync + Send { /// Insert a new server member into the database @@ -16,6 +77,24 @@ pub trait AbstractServerMembers: Sync + Send { /// Fetch all members in a server async fn fetch_all_members<'a>(&self, server_id: &str) -> Result>; + /// Fetch all members in a server as an iterator + async fn fetch_all_members_chunked( + &self, + server_id: &str, + ) -> Result; + + async fn fetch_all_members_with_roles( + &self, + server_id: &str, + roles: &[String], + ) -> Result>; + + async fn fetch_all_members_with_roles_chunked( + &self, + server_id: &str, + roles: &[String], + ) -> Result; + /// Fetch all memberships for a user async fn fetch_all_memberships<'a>(&self, user_id: &str) -> 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 a9de60a0..5634eec7 100644 --- a/crates/core/database/src/models/server_members/ops/mongodb.rs +++ b/crates/core/database/src/models/server_members/ops/mongodb.rs @@ -1,10 +1,11 @@ use futures::StreamExt; +use mongodb::options::ReadConcern; use revolt_result::Result; use crate::{FieldsMember, Member, MemberCompositeKey, PartialMember}; use crate::{IntoDocumentPath, MongoDb}; -use super::AbstractServerMembers; +use super::{AbstractServerMembers, ChunkedServerMembersGenerator}; static COL: &str = "server_members"; @@ -33,12 +34,9 @@ impl AbstractServerMembers for MongoDb { async fn fetch_all_members<'a>(&self, server_id: &str) -> Result> { Ok(self .col::(COL) - .find( - doc! { - "_id.server": server_id - }, - None, - ) + .find(doc! { + "_id.server": server_id + }) .await .map_err(|_| create_database_error!("find", COL))? .filter_map(|s| async { @@ -52,16 +50,101 @@ impl AbstractServerMembers for MongoDb { .await) } + /// Fetch all members in a server as a generator. + /// Uses config key pushd.mass_mention_chunk_size as the batch size. + async fn fetch_all_members_chunked( + &self, + server_id: &str, + ) -> Result { + let config = revolt_config::config().await; + + let mut session = self + .start_session() + .await + .map_err(|_| create_database_error!("start_session", COL))?; + + session + .start_transaction() + .read_concern(ReadConcern::snapshot()) + .await + .map_err(|_| create_database_error!("start_transaction", COL))?; + + let cursor = self + .col::(COL) + .find(doc! { + "_id.server": server_id + }) + .session(&mut session) + .batch_size(config.pushd.mass_mention_chunk_size as u32) + .await + .map_err(|_| create_database_error!("find", COL))?; + + Ok(ChunkedServerMembersGenerator::new_mongo(session, cursor)) + } + + async fn fetch_all_members_with_roles( + &self, + server_id: &str, + roles: &[String], + ) -> Result> { + Ok(self + .col::(COL) + .find(doc! { + "_id.server": server_id, + "roles": {"$in": roles} + }) + .await + .map_err(|_| create_database_error!("find", COL))? + .filter_map(|s| async { + if cfg!(debug_assertions) { + Some(s.unwrap()) + } else { + s.ok() + } + }) + .collect() + .await) + } + + async fn fetch_all_members_with_roles_chunked( + &self, + server_id: &str, + roles: &[String], + ) -> Result { + let config = revolt_config::config().await; + + let mut session = self + .start_session() + .await + .map_err(|_| create_database_error!("start_session", COL))?; + + session + .start_transaction() + .read_concern(ReadConcern::snapshot()) + .await + .map_err(|_| create_database_error!("start_transaction", COL))?; + + let cursor = self + .col::(COL) + .find(doc! { + "_id.server": server_id, + "roles": {"$in": roles} + }) + .session(&mut session) + .batch_size(config.pushd.mass_mention_chunk_size as u32) + .await + .map_err(|_| create_database_error!("find", COL))?; + + return Ok(ChunkedServerMembersGenerator::new_mongo(session, cursor)); + } + /// Fetch all memberships for a user async fn fetch_all_memberships<'a>(&self, user_id: &str) -> Result> { Ok(self .col::(COL) - .find( - doc! { - "_id.user": user_id - }, - None, - ) + .find(doc! { + "_id.user": user_id + }) .await .map_err(|_| create_database_error!("find", COL))? .filter_map(|s| async { @@ -79,15 +162,12 @@ impl AbstractServerMembers for MongoDb { async fn fetch_members<'a>(&self, server_id: &str, ids: &'a [String]) -> Result> { Ok(self .col::(COL) - .find( - doc! { - "_id.server": server_id, - "_id.user": { - "$in": ids - } - }, - None, - ) + .find(doc! { + "_id.server": server_id, + "_id.user": { + "$in": ids + } + }) .await .map_err(|_| create_database_error!("find", COL))? .filter_map(|s| async { @@ -104,12 +184,9 @@ impl AbstractServerMembers for MongoDb { /// Fetch member count of a server async fn fetch_member_count(&self, server_id: &str) -> Result { self.col::(COL) - .count_documents( - doc! { - "_id.server": server_id - }, - None, - ) + .count_documents(doc! { + "_id.server": server_id + }) .await .map(|c| c as usize) .map_err(|_| create_database_error!("count_documents", COL)) @@ -118,12 +195,9 @@ impl AbstractServerMembers for MongoDb { /// Fetch server count of a user async fn fetch_server_count(&self, user_id: &str) -> Result { self.col::(COL) - .count_documents( - doc! { - "_id.user": user_id - }, - None, - ) + .count_documents(doc! { + "_id.user": user_id + }) .await .map(|c| c as usize) .map_err(|_| create_database_error!("count_documents", COL)) 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 f038477e..ac15d977 100644 --- a/crates/core/database/src/models/server_members/ops/reference.rs +++ b/crates/core/database/src/models/server_members/ops/reference.rs @@ -3,7 +3,7 @@ use revolt_result::Result; use crate::ReferenceDb; use crate::{FieldsMember, Member, MemberCompositeKey, PartialMember}; -use super::AbstractServerMembers; +use super::{AbstractServerMembers, ChunkedServerMembersGenerator}; #[async_trait] impl AbstractServerMembers for ReferenceDb { @@ -40,6 +40,70 @@ impl AbstractServerMembers for ReferenceDb { .collect()) } + /// Fetch all members in a server as an iterator + async fn fetch_all_members_chunked( + &self, + server_id: &str, + ) -> Result { + let server_members = self.server_members.lock().await; + + let members = server_members + .clone() + .into_values() + .filter(move |member| member.id.server == server_id) + .collect(); + + // this is inefficient as shit but its the reference db so its fine + Ok(ChunkedServerMembersGenerator::new_reference(members)) + } + + /// Fetch all members that have any of the roles given + async fn fetch_all_members_with_roles( + &self, + server_id: &str, + roles: &[String], + ) -> Result> { + let server_members = self.server_members.lock().await; + + Ok(server_members + .clone() + .into_values() + .filter(|member| { + member.id.server == server_id + && !member + .roles + .iter() + .filter(|p| roles.contains(*p)) + .collect::>() + .is_empty() + }) + .collect()) + } + + async fn fetch_all_members_with_roles_chunked( + &self, + server_id: &str, + roles: &[String], + ) -> Result { + let server_members = self.server_members.lock().await; + + let resp = server_members + .clone() + .into_values() + .filter(|member| { + member.id.server == server_id + && !member + .roles + .iter() + .filter(|p| roles.contains(*p)) + .collect::>() + .is_empty() + }) + .collect(); + + return Ok(ChunkedServerMembersGenerator::new_reference(resp)); + } + /// Fetch all memberships for a user async fn fetch_all_memberships<'a>(&self, user_id: &str) -> Result> { let server_members = self.server_members.lock().await; diff --git a/crates/core/database/src/models/servers/ops/mongodb.rs b/crates/core/database/src/models/servers/ops/mongodb.rs index e6bee03f..958963c9 100644 --- a/crates/core/database/src/models/servers/ops/mongodb.rs +++ b/crates/core/database/src/models/servers/ops/mongodb.rs @@ -25,14 +25,11 @@ impl AbstractServers for MongoDb { async fn fetch_servers<'a>(&self, ids: &'a [String]) -> Result> { Ok(self .col::(COL) - .find( - doc! { - "_id": { - "$in": ids - } - }, - None, - ) + .find(doc! { + "_id": { + "$in": ids + } + }) .await .map_err(|_| create_database_error!("find", "servers"))? .filter_map(|s| async { @@ -84,7 +81,6 @@ impl AbstractServers for MongoDb { .map_err(|_| create_database_error!("to_document", "role"))? } }, - None, ) .await .map(|_| ()) @@ -125,7 +121,6 @@ impl AbstractServers for MongoDb { "roles": &role_id } }, - None, ) .await .map_err(|_| create_database_error!("update_many", "server_members"))?; @@ -140,7 +135,6 @@ impl AbstractServers for MongoDb { "role_permissions.".to_owned() + role_id: 1_i32 } }, - None, ) .await .map_err(|_| create_database_error!("update_one", "channels"))?; @@ -155,7 +149,6 @@ impl AbstractServers for MongoDb { "roles.".to_owned() + role_id: 1_i32 } }, - None, ) .await .map(|_| ()) @@ -188,12 +181,9 @@ impl MongoDb { // Find all channels let channels: Vec = self .col::("channels") - .find( - doc! { - "server": server_id - }, - None, - ) + .find(doc! { + "server": server_id + }) .await .map_err(|_| create_database_error!("find", "channels"))? .filter_map(|s| async { @@ -225,19 +215,15 @@ impl MongoDb { } } }, - None, ) .await .map_err(|_| create_database_error!("update_many", "emojis"))?; // Delete all channels. self.col::("channels") - .delete_many( - doc! { - "server": &server_id - }, - None, - ) + .delete_many(doc! { + "server": &server_id + }) .await .map_err(|_| create_database_error!("delete_many", "channels"))?; @@ -248,12 +234,9 @@ impl MongoDb { // Delete members and bans. for with in &["server_members", "server_bans"] { self.col::(with) - .delete_many( - doc! { - "_id.server": &server_id - }, - None, - ) + .delete_many(doc! { + "_id.server": &server_id + }) .await .map_err(|_| create_database_error!("delete_many", with))?; } diff --git a/crates/core/database/src/models/user_settings/ops/mongodb.rs b/crates/core/database/src/models/user_settings/ops/mongodb.rs index 5de98832..cf5bd762 100644 --- a/crates/core/database/src/models/user_settings/ops/mongodb.rs +++ b/crates/core/database/src/models/user_settings/ops/mongodb.rs @@ -53,8 +53,8 @@ impl AbstractUserSettings for MongoDb { doc! { "$set": set }, - UpdateOptions::builder().upsert(true).build(), ) + .with_options(UpdateOptions::builder().upsert(true).build()) .await .map(|_| ()) .map_err(|_| create_database_error!("update_one", "user_settings")) diff --git a/crates/core/database/src/models/users/ops/mongodb.rs b/crates/core/database/src/models/users/ops/mongodb.rs index ae61b029..000034c5 100644 --- a/crates/core/database/src/models/users/ops/mongodb.rs +++ b/crates/core/database/src/models/users/ops/mongodb.rs @@ -49,12 +49,9 @@ impl AbstractUsers for MongoDb { /// Fetch a session from the database by token async fn fetch_session_by_token(&self, token: &str) -> Result { self.col::("sessions") - .find_one( - doc! { - "token": token - }, - None, - ) + .find_one(doc! { + "token": token + }) .await .map_err(|_| create_database_error!("find_one", "sessions"))? .ok_or_else(|| create_error!(InvalidSession)) @@ -64,14 +61,11 @@ impl AbstractUsers for MongoDb { async fn fetch_users<'a>(&self, ids: &'a [String]) -> Result> { Ok(self .col::(COL) - .find( - doc! { - "_id": { - "$in": ids - } - }, - None, - ) + .find(doc! { + "_id": { + "$in": ids + } + }) .await .map_err(|_| create_database_error!("find", COL))? .filter_map(|s| async { @@ -94,10 +88,10 @@ impl AbstractUsers for MongoDb { Ok(self .col::(COL) - .find( - doc! { - "username": username - }, + .find(doc! { + "username": username + }) + .with_options( FindOptions::builder() .collation( Collation::builder() @@ -122,15 +116,13 @@ impl AbstractUsers for MongoDb { async fn fetch_mutual_user_ids(&self, user_a: &str, user_b: &str) -> Result> { Ok(self .col::(COL) - .find( - doc! { - "$and": [ - { "relations": { "$elemMatch": { "_id": &user_a, "status": "Friend" } } }, - { "relations": { "$elemMatch": { "_id": &user_b, "status": "Friend" } } } - ] - }, - FindOptions::builder().projection(doc! { "_id": 1 }).build(), - ) + .find(doc! { + "$and": [ + { "relations": { "$elemMatch": { "_id": &user_a, "status": "Friend" } } }, + { "relations": { "$elemMatch": { "_id": &user_b, "status": "Friend" } } } + ] + }) + .with_options(FindOptions::builder().projection(doc! { "_id": 1 }).build()) .await .map_err(|_| create_database_error!("find", COL))? .filter_map(|s| async { s.ok() }) @@ -143,17 +135,15 @@ impl AbstractUsers for MongoDb { async fn fetch_mutual_channel_ids(&self, user_a: &str, user_b: &str) -> Result> { Ok(self .col::("channels") - .find( - doc! { - "channel_type": { - "$in": ["Group", "DirectMessage"] - }, - "recipients": { - "$all": [ user_a, user_b ] - } + .find(doc! { + "channel_type": { + "$in": ["Group", "DirectMessage"] }, - FindOptions::builder().projection(doc! { "_id": 1 }).build(), - ) + "recipients": { + "$all": [ user_a, user_b ] + } + }) + .with_options(FindOptions::builder().projection(doc! { "_id": 1 }).build()) .await .map_err(|_| create_database_error!("find", "channels"))? .filter_map(|s| async { s.ok() }) @@ -166,49 +156,46 @@ impl AbstractUsers for MongoDb { async fn fetch_mutual_server_ids(&self, user_a: &str, user_b: &str) -> Result> { Ok(self .col::("server_members") - .aggregate( - vec![ - doc! { - "$match": { - "_id.user": user_a - } - }, - doc! { - "$lookup": { - "from": "server_members", - "as": "members", - "let": { - "server": "$_id.server" - }, - "pipeline": [ - { - "$match": { - "$expr": { - "$and": [ - { "$eq": [ "$_id.user", user_b ] }, - { "$eq": [ "$_id.server", "$$server" ] } - ] - } + .aggregate(vec![ + doc! { + "$match": { + "_id.user": user_a + } + }, + doc! { + "$lookup": { + "from": "server_members", + "as": "members", + "let": { + "server": "$_id.server" + }, + "pipeline": [ + { + "$match": { + "$expr": { + "$and": [ + { "$eq": [ "$_id.user", user_b ] }, + { "$eq": [ "$_id.server", "$$server" ] } + ] } } - ] - } - }, - doc! { - "$match": { - "members": { - "$size": 1_i32 } + ] + } + }, + doc! { + "$match": { + "members": { + "$size": 1_i32 } - }, - doc! { - "$project": { - "_id": "$_id.server" - } - }, - ], - None, - ) + } + }, + doc! { + "$project": { + "_id": "$_id.server" + } + }, + ]) .await .map_err(|_| create_database_error!("aggregate", "server_members"))? .filter_map(|s| async { s.ok() }) @@ -284,7 +271,6 @@ impl AbstractUsers for MongoDb { } } }], - None, ) .await .map(|_| ()) @@ -305,7 +291,6 @@ impl AbstractUsers for MongoDb { } } }, - None, ) .await .map(|_| ()) @@ -329,7 +314,6 @@ impl AbstractUsers for MongoDb { "subscription": 1 } }, - None, ) .await .map(|_| ()) diff --git a/crates/core/database/src/tasks/ack.rs b/crates/core/database/src/tasks/ack.rs index 89971f66..1d2aff38 100644 --- a/crates/core/database/src/tasks/ack.rs +++ b/crates/core/database/src/tasks/ack.rs @@ -14,6 +14,7 @@ use validator::HasLen; use revolt_result::Result; use super::DelayedTask; +use crate::Channel::{TextChannel, VoiceChannel}; /// Enumeration of possible events #[derive(Debug, Eq, PartialEq)] @@ -120,17 +121,22 @@ pub async fn handle_ack_event( ); // find all the users we'll be notifying - messages - .iter() - .for_each(|(_, _, recipents, _)| users.extend(recipents.iter())); + messages.iter().for_each(|(_, _, recipents, _)| { + users.extend(recipents.iter()); + }); debug!("Found {} users to notify.", users.len()); for user in users { let message_ids: Vec = messages .iter() - .filter(|(_, _, recipients, _)| recipients.contains(user)) - .map(|(_, message, _, _)| message.id.clone()) + .filter_map(|(_, message, recipients, _)| { + if recipients.contains(user) { + Some(message.id.clone()) + } else { + None + } + }) .collect(); if !message_ids.is_empty() { @@ -140,13 +146,18 @@ pub async fn handle_ack_event( debug!("Added {} mentions for user {}", message_ids.len(), &user); } - for (push, _, recipients, silenced) in messages { - if *silenced || recipients.is_empty() || push.is_none() { + let mut mass_mentions = vec![]; + + for (push, message, recipients, silenced) in messages { + if *silenced + || push.is_none() + || (recipients.is_empty() && !message.contains_mass_push_mention()) + { debug!( "Rejecting push: silenced: {}, recipient count: {}, push exists: {:?}", *silenced, recipients.length(), - push + push.is_some() ); continue; } @@ -162,6 +173,35 @@ pub async fn handle_ack_event( { revolt_config::capture_error(&err); } + + if message.contains_mass_push_mention() { + mass_mentions.push(push.clone().unwrap()); + } + } + + if !mass_mentions.is_empty() { + debug!( + "Sending mass mention push event to AMQP; channel {}", + &mass_mentions[0].message.channel + ); + + let channel = db + .fetch_channel(&mass_mentions[0].message.channel) + .await + .expect("Failed to fetch channel from db"); + + match channel { + TextChannel { server, .. } | VoiceChannel { server, .. } => { + if let Err(err) = + amqp.mass_mention_message_sent(server, mass_mentions).await + { + revolt_config::capture_error(&err); + } + } + _ => { + panic!("Unknown channel type when sending mass mention event"); + } + } } } }; @@ -192,7 +232,7 @@ pub async fn worker(db: Database, amqp: AMQP) { revolt_config::capture_error(&err); error!("{err:?} for {event:?}. ({user:?}, {channel})"); } else { - info!("User {user:?} ack in {channel} with {event:?}"); + debug!("User {user:?} ack in {channel} with {event:?}"); } } } @@ -224,6 +264,12 @@ pub async fn worker(db: Database, amqp: AMQP) { // add the new message to the list of messages to be processed. existing.append(new_data); + // if the message contains a mass mention, do not delay it any further. + if new_data[0].1.contains_mass_push_mention() { + task.run_immediately(); + continue; + } + // put a cap on the amount of messages that can be queued, for particularly active channels if (existing.length() as u16) < revolt_config::config() diff --git a/crates/core/database/src/tasks/mod.rs b/crates/core/database/src/tasks/mod.rs index 81bfd4e1..111d5106 100644 --- a/crates/core/database/src/tasks/mod.rs +++ b/crates/core/database/src/tasks/mod.rs @@ -26,6 +26,7 @@ pub fn start_workers(db: Database, amqp: AMQP) { /// Task with additional information on when it should run pub struct DelayedTask { pub data: T, + run_now: bool, last_updated: Instant, first_seen: Instant, } @@ -41,6 +42,7 @@ impl DelayedTask { pub fn new(data: T) -> Self { DelayedTask { data, + run_now: false, last_updated: Instant::now(), first_seen: Instant::now(), } @@ -51,9 +53,15 @@ impl DelayedTask { self.last_updated = Instant::now() } + /// Flag the task to run right away, regardless of the time + pub fn run_immediately(&mut self) { + self.run_now = true + } + /// Check if a task should run yet pub fn should_run(&self) -> bool { - self.first_seen.elapsed().as_secs() > EXPIRE_CONSTANT + self.run_now + || self.first_seen.elapsed().as_secs() > EXPIRE_CONSTANT || self.last_updated.elapsed().as_secs() > SAVE_CONSTANT } } diff --git a/crates/core/database/src/util/bridge/v0.rs b/crates/core/database/src/util/bridge/v0.rs index 3673411e..250bbbd7 100644 --- a/crates/core/database/src/util/bridge/v0.rs +++ b/crates/core/database/src/util/bridge/v0.rs @@ -491,6 +491,7 @@ impl crate::Message { edited: self.edited, embeds: self.embeds, mentions: self.mentions, + role_mentions: self.role_mentions, replies: self.replies, reactions: self.reactions, interactions: self.interactions.into(), @@ -519,6 +520,7 @@ impl From for PartialMessage { edited: value.edited, embeds: value.embeds, mentions: value.mentions, + role_mentions: value.role_mentions, replies: value.replies, reactions: value.reactions, interactions: value.interactions.map(Into::into), diff --git a/crates/core/database/src/util/bulk_permissions.rs b/crates/core/database/src/util/bulk_permissions.rs index e45269ca..40260745 100644 --- a/crates/core/database/src/util/bulk_permissions.rs +++ b/crates/core/database/src/util/bulk_permissions.rs @@ -94,9 +94,28 @@ impl<'z> BulkDatabasePermissionQuery<'z> { } } + pub async fn from_channel_id(self, channel_id: String) -> BulkDatabasePermissionQuery<'z> { + let channel = self + .database + .fetch_channel(channel_id.as_str()) + .await + .expect("Valid channel id"); + + drop(channel_id); + + BulkDatabasePermissionQuery { + channel: Some(channel), + ..self + } + } + pub fn members(self, members: &'z [Member]) -> BulkDatabasePermissionQuery { BulkDatabasePermissionQuery { members: Some(members.to_owned()), + cached_member_perms: None, + users: None, + cached_members: None, + cached_users: None, ..self } } @@ -104,6 +123,10 @@ impl<'z> BulkDatabasePermissionQuery<'z> { pub fn users(self, users: &'z [User]) -> BulkDatabasePermissionQuery { BulkDatabasePermissionQuery { users: Some(users.to_owned()), + cached_member_perms: None, + members: None, + cached_members: None, + cached_users: None, ..self } } diff --git a/crates/core/models/Cargo.toml b/crates/core/models/Cargo.toml index b3bbd409..1d4c5db0 100644 --- a/crates/core/models/Cargo.toml +++ b/crates/core/models/Cargo.toml @@ -24,9 +24,11 @@ revolt-config = { version = "0.8.4", path = "../config" } revolt-permissions = { version = "0.8.4", path = "../permissions" } # Utility -regex = "1" +regex = "1.11" +fancy-regex = "0.14" indexmap = "1.9.3" once_cell = "1.17.1" +num_enum = "0.6.1" # Rocket rocket = { optional = true, version = "0.5.0-rc.2", default-features = false } diff --git a/crates/core/models/src/v0/messages.rs b/crates/core/models/src/v0/messages.rs index 2897b447..ebef99d9 100644 --- a/crates/core/models/src/v0/messages.rs +++ b/crates/core/models/src/v0/messages.rs @@ -1,8 +1,8 @@ use std::time::SystemTime; +use fancy_regex::Regex; use indexmap::{IndexMap, IndexSet}; use once_cell::sync::Lazy; -use regex::Regex; use revolt_config::config; #[cfg(feature = "validator")] @@ -18,6 +18,12 @@ use super::{Channel, Embed, File, Member, MessageWebhook, User, Webhook, RE_COLO pub static RE_MENTION: Lazy = Lazy::new(|| Regex::new(r"<@([0-9A-HJKMNP-TV-Z]{26})>").unwrap()); +pub static RE_ROLE_MENTION: Lazy = + Lazy::new(|| Regex::new(r"<%([0-9A-HJKMNP-TV-Z]{26})>|@online|@everyone").unwrap()); + +pub static RE_BLOCKS: Lazy = + Lazy::new(|| Regex::new(r"(?s)(?>, + /// Array of role ids mentioned in this message + pub role_mentions: Option>, /// Array of message ids this message is replying to #[serde(skip_serializing_if = "Option::is_none")] pub replies: Option>, @@ -373,6 +381,11 @@ auto_derived!( pub enum MessageFlags { /// Message will not send push / desktop notifications SuppressNotifications = 1, + /// Message will mention all users who can see the channel + MentionsEveryone = 2, + /// Message will mention all users who are online and can see the channel. + /// This cannot be true if MentionsEveryone is true + MentionsOnline = 3, } /// Optional fields on message diff --git a/crates/core/permissions/src/models/channel.rs b/crates/core/permissions/src/models/channel.rs index 252fb35a..9e916026 100644 --- a/crates/core/permissions/src/models/channel.rs +++ b/crates/core/permissions/src/models/channel.rs @@ -92,8 +92,14 @@ pub enum ChannelPermission { /// Listen to other users Listen = 1 << 36, + // * Channel permissions two electric boogaloo + /// Mention everyone and online members + MentionEveryone = 1 << 37, + /// Mention roles + MentionRoles = 1 << 38, + // * Misc. permissions - // % Bits 36 to 52: free area + // % Bits 38 to 52: free area // % Bits 53 to 64: do not use // * Grant all permissions diff --git a/crates/core/result/src/axum.rs b/crates/core/result/src/axum.rs index 68b88083..8750ef5f 100644 --- a/crates/core/result/src/axum.rs +++ b/crates/core/result/src/axum.rs @@ -1,5 +1,4 @@ use axum::{http::StatusCode, response::IntoResponse, Json}; -use rocket::http::Status; use crate::{Error, ErrorType}; @@ -52,6 +51,7 @@ impl IntoResponse for Error { ErrorType::ReachedMaximumBots => StatusCode::BAD_REQUEST, ErrorType::IsBot => StatusCode::BAD_REQUEST, + ErrorType::IsNotBot => StatusCode::BAD_REQUEST, ErrorType::BotIsPrivate => StatusCode::FORBIDDEN, ErrorType::CannotReportYourself => StatusCode::BAD_REQUEST, @@ -80,6 +80,9 @@ impl IntoResponse for Error { ErrorType::NotAVoiceChannel => StatusCode::BAD_REQUEST, ErrorType::AlreadyConnected => StatusCode::BAD_REQUEST, ErrorType::UnknownNode => StatusCode::BAD_REQUEST, + ErrorType::InvalidFlagValue => StatusCode::BAD_REQUEST, + ErrorType::FeatureDisabled { .. } => StatusCode::BAD_REQUEST, + ErrorType::ProxyError => StatusCode::BAD_REQUEST, ErrorType::FileTooSmall => StatusCode::UNPROCESSABLE_ENTITY, ErrorType::FileTooLarge { .. } => StatusCode::UNPROCESSABLE_ENTITY, diff --git a/crates/core/result/src/lib.rs b/crates/core/result/src/lib.rs index 2a302255..9fcfcd28 100644 --- a/crates/core/result/src/lib.rs +++ b/crates/core/result/src/lib.rs @@ -122,6 +122,7 @@ pub enum ErrorType { // ? Bot related errors ReachedMaximumBots, IsBot, + IsNotBot, BotIsPrivate, // ? User safety related errors @@ -149,6 +150,7 @@ pub enum ErrorType { InvalidCredentials, InvalidProperty, InvalidSession, + InvalidFlagValue, NotAuthenticated, DuplicateNonce, NotFound, @@ -175,6 +177,11 @@ pub enum ErrorType { // ? Legacy errors VosoUnavailable, + + // ? Feature flag disabled in the config + FeatureDisabled { + feature: String, + }, } #[macro_export] diff --git a/crates/core/result/src/rocket.rs b/crates/core/result/src/rocket.rs index 6e5b5578..6e95ec24 100644 --- a/crates/core/result/src/rocket.rs +++ b/crates/core/result/src/rocket.rs @@ -42,6 +42,7 @@ impl<'r> Responder<'r, 'static> for Error { ErrorType::NotInGroup => Status::NotFound, ErrorType::AlreadyPinned => Status::BadRequest, ErrorType::NotPinned => Status::BadRequest, + ErrorType::InvalidFlagValue => Status::BadRequest, ErrorType::UnknownServer => Status::NotFound, ErrorType::InvalidRole => Status::NotFound, @@ -57,6 +58,7 @@ impl<'r> Responder<'r, 'static> for Error { ErrorType::ReachedMaximumBots => Status::BadRequest, ErrorType::IsBot => Status::BadRequest, + ErrorType::IsNotBot => Status::BadRequest, ErrorType::BotIsPrivate => Status::Forbidden, ErrorType::CannotReportYourself => Status::BadRequest, @@ -84,6 +86,8 @@ impl<'r> Responder<'r, 'static> for Error { ErrorType::AlreadyConnected => Status::BadRequest, ErrorType::NotConnected => Status::BadRequest, ErrorType::UnknownNode => Status::BadRequest, + ErrorType::FeatureDisabled { .. } => Status::BadRequest, + ErrorType::ProxyError => Status::BadRequest, ErrorType::FileTooSmall => Status::UnprocessableEntity, ErrorType::FileTooLarge { .. } => Status::UnprocessableEntity, diff --git a/crates/daemons/pushd/Cargo.toml b/crates/daemons/pushd/Cargo.toml index dad79cf3..441fa87f 100644 --- a/crates/daemons/pushd/Cargo.toml +++ b/crates/daemons/pushd/Cargo.toml @@ -10,6 +10,9 @@ revolt-database = { version = "0.8.4", path = "../../core/database" } revolt-models = { version = "0.8.4", path = "../../core/models", features = [ "validator", ] } +revolt-presence = { version = "0.8.1", path = "../../core/presence", features = [ + "redis-is-patched", +] } amqprs = { version = "1.7.0" } fcm_v1 = "0.3.0" @@ -20,9 +23,10 @@ tokio = "1.39.2" async-trait = "0.1.81" ulid = "1.0.0" -authifier = "1.0.8" +authifier = "1.0.10" log = "0.4.11" +pretty_env_logger = "0.4.0" #serialization serde_json = "1" diff --git a/crates/daemons/pushd/Pushd Flowchart.graffle b/crates/daemons/pushd/Pushd Flowchart.graffle index 961d5ff6..d15942df 100644 Binary files a/crates/daemons/pushd/Pushd Flowchart.graffle and b/crates/daemons/pushd/Pushd Flowchart.graffle differ diff --git a/crates/daemons/pushd/src/consumers/inbound/ack.rs b/crates/daemons/pushd/src/consumers/inbound/ack.rs index b9fe0886..77dd5d44 100644 --- a/crates/daemons/pushd/src/consumers/inbound/ack.rs +++ b/crates/daemons/pushd/src/consumers/inbound/ack.rs @@ -71,8 +71,14 @@ impl AsyncConsumer for AckConsumer { #[allow(clippy::disallowed_methods)] let unreads = self.db.fetch_unread_mentions(&payload.user_id).await; + debug!("Processing unreads for {:}", &payload.user_id); + if let Ok(u) = &unreads { if u.is_empty() { + debug!( + "Discarding unread task (no mentions found) for {:}", + &payload.user_id + ); return; } } else { @@ -95,6 +101,10 @@ impl AsyncConsumer for AckConsumer { .collect(); if apple_sessions.is_empty() { + debug!( + "Discarding unread task (no apn sessions found) for {:}", + &payload.user_id + ); return; } diff --git a/crates/daemons/pushd/src/consumers/inbound/mass_mention.rs b/crates/daemons/pushd/src/consumers/inbound/mass_mention.rs new file mode 100644 index 00000000..a44dcb1e --- /dev/null +++ b/crates/daemons/pushd/src/consumers/inbound/mass_mention.rs @@ -0,0 +1,275 @@ +use std::{ + collections::{HashMap, HashSet}, + hash::RandomState, +}; + +use crate::consumers::inbound::internal::*; +use amqprs::{ + channel::{BasicPublishArguments, Channel}, + connection::Connection, + consumer::AsyncConsumer, + BasicProperties, Deliver, +}; +use async_trait::async_trait; +use revolt_database::{ + events::rabbit::*, util::bulk_permissions::BulkDatabasePermissionQuery, Database, Member, + MessageFlagsValue, +}; +use revolt_models::v0::{MessageFlags, PushNotification}; + +pub struct MassMessageConsumer { + #[allow(dead_code)] + db: Database, + authifier_db: authifier::Database, + conn: Option, + channel: Option, +} + +impl Channeled for MassMessageConsumer { + fn get_connection(&self) -> Option<&Connection> { + if self.conn.is_none() { + None + } else { + Some(self.conn.as_ref().unwrap()) + } + } + + fn get_channel(&self) -> Option<&Channel> { + if self.channel.is_none() { + None + } else { + Some(self.channel.as_ref().unwrap()) + } + } + + fn set_connection(&mut self, conn: Connection) { + self.conn = Some(conn); + } + + fn set_channel(&mut self, channel: Channel) { + self.channel = Some(channel) + } +} + +impl MassMessageConsumer { + pub fn new(db: Database, authifier_db: authifier::Database) -> MassMessageConsumer { + MassMessageConsumer { + db, + authifier_db, + conn: None, + channel: None, + } + } + + async fn fire_notification_for_users(&mut self, push: &PushNotification, users: &[String]) { + if let Ok(sessions) = self + .authifier_db + .find_sessions_with_subscription(users) + .await + { + let config = revolt_config::config().await; + for session in sessions { + if let Some(sub) = session.subscription { + let mut sendable = PayloadToService { + notification: PayloadKind::MessageNotification(push.clone()), + token: sub.auth, + user_id: session.user_id, + session_id: session.id, + extras: HashMap::new(), + }; + + let args: BasicPublishArguments; + + if sub.endpoint == "apn" { + args = BasicPublishArguments::new( + config.pushd.exchange.as_str(), + config.pushd.apn.queue.as_str(), + ) + .finish(); + } else if sub.endpoint == "fcm" { + args = BasicPublishArguments::new( + config.pushd.exchange.as_str(), + config.pushd.fcm.queue.as_str(), + ) + .finish(); + } else { + // web push (vapid) + args = BasicPublishArguments::new( + config.pushd.exchange.as_str(), + config.pushd.vapid.queue.as_str(), + ) + .finish(); + sendable.extras.insert("p265dh".to_string(), sub.p256dh); + sendable + .extras + .insert("endpoint".to_string(), sub.endpoint.clone()); + } + + let payload = serde_json::to_string(&sendable).unwrap(); + + publish_message(self, payload.into(), args).await; + } + } + } + } +} + +#[allow(unused_variables)] +#[async_trait] +impl AsyncConsumer for MassMessageConsumer { + /// This consumer handles adding mentions for all the users affected by a mass mention ping, and then sends out push notifications + async fn consume( + &mut self, + channel: &Channel, + deliver: Deliver, + basic_properties: BasicProperties, + content: Vec, + ) { + let config = revolt_config::config().await; + let content = String::from_utf8(content).unwrap(); + let payload: MassMessageSentPayload = serde_json::from_str(content.as_str()).unwrap(); + + debug!("Received mass message event"); + + // We should only ever receive clumped messages from a single channel, so it's safe to reuse this many times. + let mut query: Option> = None; + let query_db = self.db.clone(); + + for push in payload.notifications { + if query.is_none() { + query = Some( + BulkDatabasePermissionQuery::from_server_id(&query_db, &payload.server_id) + .await + .from_channel_id(push.channel.id().to_string()) // wrong channel model, so fetch the right one + .await, + ); + } + + let existing_mentions: HashSet = + if let Some(ref mentions) = push.message.mentions { + HashSet::from_iter(mentions.iter().cloned()) + } else { + HashSet::new() + }; + + // KNOWN QUIRK: if you mention @online and role(s), the offline members with the role(s) wont get pinged + if let Some(ref query) = query { + let flags = MessageFlagsValue(push.message.flags); + if flags.has(MessageFlags::MentionsEveryone) { + let mut db_query = self + .db + .fetch_all_members_chunked(&payload.server_id) + .await + .expect("Failed to fetch members from database"); + + let mut exhausted = false; + let ack_chnl = vec![push.channel.id().to_string()]; + loop { + let mut chunk: Vec = vec![]; + for _ in 0..config.pushd.mass_mention_chunk_size { + if let Some(member) = db_query.next().await { + chunk.push(member); + } else { + exhausted = true; + break; + } + } + + let userids: Vec = + chunk.iter().map(|member| member.id.user.clone()).collect(); + + debug!("Userids in chunk: {:?}", userids); + + if let Err(err) = self + .db + .add_mention_to_many_unreads(push.channel.id(), &userids, &ack_chnl) + .await + { + revolt_config::capture_error(&err); + } + + // ignore anyone in this list + let online_users = revolt_presence::filter_online(&userids).await; + let target_users: Vec = userids + .iter() + .filter(|id| { + !online_users.contains(*id) && !existing_mentions.contains(*id) + }) + .cloned() + .collect(); + + debug!( + "Userids after filter: {:?} (online: {:?}", + target_users, online_users + ); + + self.fire_notification_for_users(&push, &target_users).await; + + if exhausted { + break; + } + } + } else if let Some(roles) = &push.message.role_mentions { + // role mentions + let _role_members = self + .db + .fetch_all_members_with_roles_chunked(&payload.server_id, roles) + .await; + + debug!("role members: {:?}", _role_members); + + if _role_members.is_err() { + revolt_config::capture_error(&_role_members.err().unwrap()); + return; + } + + let mut role_members = _role_members.unwrap(); + let mut chunk = vec![]; + let mut exhausted = false; + + while !exhausted { + chunk.clear(); + + for _ in 0..config.pushd.mass_mention_chunk_size { + if let Some(member) = role_members.next().await { + chunk.push(member); + } else { + exhausted = true; + break; + } + } + + let mut q = query.clone().members(&chunk); + let viewing_members: Vec = q + .members_can_see_channel() + .await + .iter() + .filter_map(|(uid, viewable)| { + if *viewable && !existing_mentions.contains(uid) { + Some(uid.clone()) + } else { + None + } + }) + .collect(); + + debug!("viewing members: {:?}", viewing_members); + + let online = revolt_presence::filter_online(&viewing_members).await; + debug!("online: {:?}", online); + + let targets: Vec = viewing_members + .iter() + .filter(|m| !online.contains(*m)) + .cloned() + .collect(); + + debug!("targets: {:?}", targets); + + self.fire_notification_for_users(&push, &targets).await; + } + } + } + } + } +} diff --git a/crates/daemons/pushd/src/consumers/inbound/mod.rs b/crates/daemons/pushd/src/consumers/inbound/mod.rs index a340143d..9c359336 100644 --- a/crates/daemons/pushd/src/consumers/inbound/mod.rs +++ b/crates/daemons/pushd/src/consumers/inbound/mod.rs @@ -3,4 +3,5 @@ pub mod fr_accepted; pub mod fr_received; pub mod generic; mod internal; +pub mod mass_mention; pub mod message; diff --git a/crates/daemons/pushd/src/consumers/outbound/apn.rs b/crates/daemons/pushd/src/consumers/outbound/apn.rs index c7ac6c87..72382632 100644 --- a/crates/daemons/pushd/src/consumers/outbound/apn.rs +++ b/crates/daemons/pushd/src/consumers/outbound/apn.rs @@ -82,7 +82,7 @@ impl ApnsOutboundConsumer { } } - println!("Got badge count for APN: {}", mention_count); + debug!("Got badge count for APN: {}", mention_count); return Some(mention_count); } @@ -189,6 +189,10 @@ impl AsyncConsumer for ApnsOutboundConsumer { data: BTreeMap::new(), }; + debug!( + "Sending friend request received for user: {:}", + &payload.user_id + ); resp = self.client.send(apn_payload).await; } @@ -231,6 +235,10 @@ impl AsyncConsumer for ApnsOutboundConsumer { data: BTreeMap::new(), }; + debug!( + "Sending friend request accept for user: {:}", + &payload.user_id + ); resp = self.client.send(apn_payload).await; } PayloadKind::Generic(alert) => { @@ -260,6 +268,10 @@ impl AsyncConsumer for ApnsOutboundConsumer { data: BTreeMap::new(), }; + debug!( + "Sending generic notification for user: {:}", + &payload.user_id + ); resp = self.client.send(apn_payload).await; } @@ -295,6 +307,10 @@ impl AsyncConsumer for ApnsOutboundConsumer { channel_name: alert.channel.name().unwrap_or(&title), }; + debug!( + "Sending message notification for user: {:}", + &payload.user_id + ); resp = self.client.send(apn_payload).await; } PayloadKind::BadgeUpdate(badge) => { @@ -308,6 +324,7 @@ impl AsyncConsumer for ApnsOutboundConsumer { data: BTreeMap::new(), }; + debug!("Sending badge update for user: {:}", &payload.user_id); resp = self.client.send(apn_payload).await; } } @@ -322,6 +339,10 @@ impl AsyncConsumer for ApnsOutboundConsumer { }), .. }) => { + info!( + "Removing APNS subscription id {:} (user: {:}) due to invalid token", + &payload.session_id, &payload.user_id + ); if let Err(err) = self .db .remove_push_subscription_by_session_id(&payload.session_id) diff --git a/crates/daemons/pushd/src/main.rs b/crates/daemons/pushd/src/main.rs index c63b8d9a..1560b049 100644 --- a/crates/daemons/pushd/src/main.rs +++ b/crates/daemons/pushd/src/main.rs @@ -1,3 +1,6 @@ +#[macro_use] +extern crate log; + use amqprs::{ channel::{ BasicConsumeArguments, Channel, ExchangeDeclareArguments, QueueBindArguments, @@ -14,7 +17,7 @@ mod consumers; use consumers::{ inbound::{ ack::AckConsumer, fr_accepted::FRAcceptedConsumer, fr_received::FRReceivedConsumer, - generic::GenericConsumer, message::MessageConsumer, + generic::GenericConsumer, mass_mention::MassMessageConsumer, message::MessageConsumer, }, outbound::{apn::ApnsOutboundConsumer, fcm::FcmOutboundConsumer, vapid::VapidOutboundConsumer}, }; @@ -22,6 +25,7 @@ use consumers::{ #[tokio::main(flavor = "multi_thread", worker_threads = 2)] async fn main() { let config = config().await; + pretty_env_logger::init(); // Setup database let db = revolt_database::DatabaseInfo::Auto.connect().await.unwrap(); @@ -96,6 +100,17 @@ async fn main() { .await, ); + connections.push( + make_queue_and_consume( + &config, + &config.pushd.mass_mention_queue, + config.pushd.get_mass_mention_routing_key().as_str(), + None, + MassMessageConsumer::new(db.clone(), authifier.clone()), + ) + .await, + ); + if !config.pushd.apn.pkcs8.is_empty() { connections.push( make_queue_and_consume( @@ -223,11 +238,10 @@ where .manual_ack(false) .finish(); - channel.basic_consume(consumer, args).await.unwrap(); - log::info!( - "Consuming routing key {} as queue {}", - routing_key, - queue_name + let routing_key = channel.basic_consume(consumer, args).await.unwrap(); + info!( + "Consuming routing key {} as queue {}, tag {}", + routing_key, queue_name, routing_key ); (channel, connection) } diff --git a/crates/delta/Cargo.toml b/crates/delta/Cargo.toml index 0dc89257..10e85d9a 100644 --- a/crates/delta/Cargo.toml +++ b/crates/delta/Cargo.toml @@ -55,7 +55,7 @@ lettre = "0.10.0-alpha.4" rocket = { version = "0.5.1", default-features = false, features = ["json"] } rocket_cors = { git = "https://github.com/lawliet89/rocket_cors", rev = "072d90359b23e9b291df6b672c07c93de9c46011" } rocket_empty = { version = "0.1.1", features = ["schema"] } -rocket_authifier = { version = "1.0.9" } +rocket_authifier = { version = "1.0.10" } rocket_prometheus = "0.10.0-rc.3" # spec generation @@ -66,7 +66,7 @@ revolt_rocket_okapi = { version = "0.10.0", features = ["swagger"] } amqprs = { version = "1.7.0" } # core -authifier = "1.0.9" +authifier = "1.0.10" revolt-config = { path = "../core/config" } revolt-database = { path = "../core/database", features = [ "rocket-impl", diff --git a/crates/delta/src/routes/channels/message_send.rs b/crates/delta/src/routes/channels/message_send.rs index 83f7a272..86d33d79 100644 --- a/crates/delta/src/routes/channels/message_send.rs +++ b/crates/delta/src/routes/channels/message_send.rs @@ -117,10 +117,11 @@ mod test { use crate::{rocket, util::test::TestHarness}; use revolt_database::{ util::{idempotency::IdempotencyKey, reference::Reference}, - Channel, Member, Message, PartialChannel, PartialMember, Role, Server, + Channel, Member, Message, MessageFlagsValue, PartialChannel, PartialMember, Role, Server, }; - use revolt_models::v0::{self, DataCreateServerChannel}; + use revolt_models::v0::{self, DataCreateServerChannel, MessageFlags}; use revolt_permissions::{ChannelPermission, OverrideField}; + use revolt_result::ErrorType; #[rocket::async_test] async fn message_mention_constraints() { @@ -486,4 +487,193 @@ mod test { .await .expect_err("Created message with missing reply and none fail"); } + + #[rocket::async_test] + async fn mass_mentions_test() { + let harness = TestHarness::new().await; + let (_, _, user) = harness.new_user().await; + let (_, _, other_user) = harness.new_user().await; + let (server, _) = harness.new_server(&user).await; + let channel = harness.new_channel(&server).await; + let (role_id, mut role) = harness + .new_role( + &server, + 1, + Some(OverrideField { + a: (ChannelPermission::MentionEveryone as i64) + | (ChannelPermission::MentionRoles as i64), + d: 0, + }), + ) + .await; + let (mut other_member, _) = Member::create(&harness.db, &server, &other_user, None) + .await + .expect("Failed to add test member"); + + // Send a message with an everyone and role mention. + // Should fail + let bad_message_with_mentions = Message::create_from_api( + &harness.db, + Some(&harness.amqp), + channel.clone(), + v0::DataMessageSend { + content: Some(format!("Mentioning @everyone and role <%{}>", &role_id)), + nonce: None, + attachments: None, + replies: None, + embeds: None, + masquerade: None, + interactions: None, + flags: None, + }, + v0::MessageAuthor::User( + &other_user + .clone() + .into(&harness.db, Some(&other_user)) + .await, + ), + Some( + other_user + .clone() + .into(&harness.db, Some(&other_user)) + .await, + ), + Some(other_member.clone().into()), + other_user.limits().await, + IdempotencyKey::unchecked_from_string("1".to_string()), + false, + true, + ) + .await + .expect_err("Should not have created message with everyone and role pings"); + + assert!( + matches!( + bad_message_with_mentions.error_type, + ErrorType::MissingPermission { .. } + ), + "Intentional permissions error did not return MissingPermission" + ); + + // Send a mass mention inside a codeblock. + // Should be undetected and therefor pass + let message_with_codeblock = Message::create_from_api( + &harness.db, + Some(&harness.amqp), + channel.clone(), + v0::DataMessageSend { + content: Some(format!("Mentioning `@everyone` and role `<%{}>`", &role_id)), + nonce: None, + attachments: None, + replies: None, + embeds: None, + masquerade: None, + interactions: None, + flags: None, + }, + v0::MessageAuthor::User( + &other_user + .clone() + .into(&harness.db, Some(&other_user)) + .await, + ), + Some( + other_user + .clone() + .into(&harness.db, Some(&other_user)) + .await, + ), + Some(other_member.clone().into()), + other_user.limits().await, + IdempotencyKey::unchecked_from_string("1".to_string()), + false, + true, + ) + .await + .expect("Failed to create message with everyone and role pings in codeblocks"); + + assert!( + message_with_codeblock.flags.is_none() + || !MessageFlagsValue(message_with_codeblock.flags.unwrap()) + .has(MessageFlags::MentionsEveryone), + "Message flags mentions everyone when inside codeblock", + ); + + assert!( + message_with_codeblock.role_mentions.is_none(), + "Role mentions detected when inside codeblock" + ); + + other_member.roles.push(role_id.clone()); + harness + .db + .update_member( + &other_member.id, + &PartialMember { + avatar: None, + id: None, + joined_at: None, + nickname: None, + roles: Some(vec![role_id.clone()]), + timeout: None, + }, + vec![], + ) + .await + .expect("Failed to add role to user"); + + // Send a message with an everyone and role mention. + // Should succeed + let message_with_mentions = Message::create_from_api( + &harness.db, + Some(&harness.amqp), + channel.clone(), + v0::DataMessageSend { + content: Some(format!("Mentioning @everyone and role <%{}>", &role_id)), + nonce: None, + attachments: None, + replies: None, + embeds: None, + masquerade: None, + interactions: None, + flags: None, + }, + v0::MessageAuthor::User( + &other_user + .clone() + .into(&harness.db, Some(&other_user)) + .await, + ), + Some( + other_user + .clone() + .into(&harness.db, Some(&other_user)) + .await, + ), + Some(other_member.clone().into()), + other_user.limits().await, + IdempotencyKey::unchecked_from_string("1".to_string()), + false, + true, + ) + .await + .expect("Failed to create message with everyone and role pings"); + + assert!( + message_with_mentions.flags.is_some(), + "Message flags is None", + ); + + assert!( + MessageFlagsValue(message_with_mentions.flags.unwrap()) + .has(MessageFlags::MentionsEveryone), + "Message flags does not mention everyone. Flag value is {}", + message_with_mentions.flags.unwrap() + ); + + assert!( + message_with_mentions.role_mentions.is_some(), + "Message has no role mentions" + ); + } } diff --git a/crates/delta/src/util/test.rs b/crates/delta/src/util/test.rs index 88dcdd1a..88bb6f42 100644 --- a/crates/delta/src/util/test.rs +++ b/crates/delta/src/util/test.rs @@ -5,11 +5,12 @@ use authifier::{ use futures::StreamExt; use rand::Rng; use redis_kiss::redis::aio::PubSub; -use revolt_database::util::idempotency::IdempotencyKey; use revolt_database::{ events::client::EventV1, Channel, Database, Member, Message, Server, User, AMQP, }; +use revolt_database::{util::idempotency::IdempotencyKey, Role}; use revolt_models::v0; +use revolt_permissions::OverrideField; use rocket::http::Header; use rocket::local::asynchronous::{Client, LocalRequest, LocalResponse}; @@ -122,6 +123,28 @@ impl TestHarness { .expect("Failed to create test server") } + pub async fn new_role( + &self, + server: &Server, + rank: i64, + overrides: Option, + ) -> (String, Role) { + let role = Role { + name: TestHarness::rand_string(), + permissions: overrides.unwrap_or(OverrideField { a: 0, d: 0 }), + rank, + colour: None, + hoist: false, + }; + + let id = role + .create(&self.db, &server.id) + .await + .expect("Failed to create test role"); + + (id, role) + } + pub async fn new_channel(&self, server: &Server) -> Channel { Channel::create_server_channel( &self.db,