diff --git a/Cargo.lock b/Cargo.lock index be8edb59..da5066d7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,9 +13,9 @@ dependencies = [ [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aead" @@ -87,9 +87,12 @@ dependencies = [ [[package]] name = "aligned-vec" -version = "0.5.0" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" +checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" +dependencies = [ + "equator", +] [[package]] name = "allocator-api2" @@ -166,7 +169,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -311,7 +314,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -379,7 +382,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -396,7 +399,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -421,9 +424,9 @@ checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" [[package]] name = "atomic" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994" +checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" dependencies = [ "bytemuck", ] @@ -471,7 +474,7 @@ dependencies = [ "revolt_rocket_okapi", "rocket", "rust-argon2", - "schemars", + "schemars 0.8.22", "serde", "serde_json", "sha1", @@ -492,14 +495,14 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" dependencies = [ - "autocfg 1.4.0", + "autocfg 1.5.0", ] [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "av1-grain" @@ -517,18 +520,18 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98922d6a4cfbcb08820c69d8eeccc05bb1f29bfa06b4f5b1dbfe9a868bd7608e" +checksum = "19135c0c7a60bfee564dbe44ab5ce0557c6bf3884e5291a50be76a15640c4fbd" dependencies = [ "arrayvec", ] [[package]] name = "aws-config" -version = "1.6.3" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a18fd934af6ae7ca52410d4548b98eb895aab0f1ea417d168d85db1434a141" +checksum = "c18d005c70d2b9c0c1ea8876c039db0ec7fb71164d25c73ccea21bf41fd02171" dependencies = [ "aws-credential-types", "aws-runtime", @@ -591,9 +594,9 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.5.7" +version = "1.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c4063282c69991e57faab9e5cb21ae557e59f5b0fb285c196335243df8dc25c" +checksum = "4f6c68419d8ba16d9a7463671593c54f81ba58cab466e9b759418da606dcc2e2" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -616,9 +619,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.90.0" +version = "1.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5934beb9403c562bd129a1de1bd51ab67209c05ddf3a4a8c86714120181c860f" +checksum = "cc24d9d761bd464534d9e477a9f724c118ca2557a95444097cf6ce71f3229a72" dependencies = [ "aws-credential-types", "aws-runtime", @@ -650,9 +653,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.71.0" +version = "1.74.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a4fd09d6e863655d99cd2260f271c6d1030dc6bfad68e19e126d2e4c8ceb18" +checksum = "e0a69de9c1b9272da2872af60c7402683e7f45c06267735b4332deacb203239b" dependencies = [ "aws-credential-types", "aws-runtime", @@ -672,9 +675,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.72.0" +version = "1.75.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3224ab02ebb3074467a33d57caf6fcb487ca36f3697fdd381b0428dc72380696" +checksum = "f0b161d836fac72bdd5ac1a4cd1cdc38ab888c7af26cfd95f661be4409505e63" dependencies = [ "aws-credential-types", "aws-runtime", @@ -694,9 +697,9 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.72.0" +version = "1.76.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6933f189ed1255e78175fbd73fb200c0aae7240d220ed3346f567b0ddca3083" +checksum = "cb1cd79a3412751a341a28e2cd0d6fa4345241976da427b075a0c0cd5409f886" dependencies = [ "aws-credential-types", "aws-runtime", @@ -717,9 +720,9 @@ dependencies = [ [[package]] name = "aws-sigv4" -version = "1.3.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3734aecf9ff79aa401a6ca099d076535ab465ff76b46440cf567c8e70b65dc13" +checksum = "ddfb9021f581b71870a17eac25b52335b82211cdc092e02b6876b2bcefa61666" dependencies = [ "aws-credential-types", "aws-smithy-eventstream", @@ -756,9 +759,9 @@ dependencies = [ [[package]] name = "aws-smithy-checksums" -version = "0.63.3" +version = "0.63.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f77a921dbd2c78ebe70726799787c1d110a2245dd65e39b20923dfdfb2deee" +checksum = "244f00666380d35c1c76b90f7b88a11935d11b84076ac22a4c014ea0939627af" dependencies = [ "aws-smithy-http", "aws-smithy-types", @@ -776,9 +779,9 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.8" +version = "0.60.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c45d3dddac16c5c59d553ece225a88870cf81b7b813c9cc17b78cf4685eac7a" +checksum = "338a3642c399c0a5d157648426110e199ca7fd1c689cc395676b81aa563700c4" dependencies = [ "aws-smithy-types", "bytes 1.10.1", @@ -808,25 +811,26 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.0.2" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e44697a9bded898dcd0b1cb997430d949b87f4f8940d91023ae9062bf218250" +checksum = "f108f1ca850f3feef3009bdcc977be201bca9a91058864d9de0684e64514bee0" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", "aws-smithy-types", - "h2 0.4.10", + "h2 0.3.26", + "h2 0.4.11", "http 0.2.12", "http 1.3.1", "http-body 0.4.6", "hyper 0.14.32", "hyper 1.6.0", "hyper-rustls 0.24.2", - "hyper-rustls 0.27.6", + "hyper-rustls 0.27.7", "hyper-util", "pin-project-lite 0.2.16", "rustls 0.21.12", - "rustls 0.23.27", + "rustls 0.23.28", "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio 1.45.1", @@ -836,9 +840,9 @@ dependencies = [ [[package]] name = "aws-smithy-json" -version = "0.61.3" +version = "0.61.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92144e45819cae7dc62af23eac5a038a58aa544432d2102609654376a900bd07" +checksum = "a16e040799d29c17412943bdbf488fd75db04112d0c0d4b9290bacf5ae0014b9" dependencies = [ "aws-smithy-types", ] @@ -888,9 +892,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e5d9e3a80a18afa109391fb5ad09c3daf887b516c6fd805a157c6ea7994a57" +checksum = "bd8531b6d8882fd8f48f82a9754e682e29dd44cff27154af51fa3eb730f59efb" dependencies = [ "aws-smithy-async", "aws-smithy-types", @@ -905,9 +909,9 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.3.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40076bd09fadbc12d5e026ae080d0930defa606856186e31d83ccc6a255eeaf3" +checksum = "d498595448e43de7f4296b7b7a18a8a02c61ec9349128c80a368f7c3b4ab11a8" dependencies = [ "base64-simd", "bytes 1.10.1", @@ -931,9 +935,9 @@ dependencies = [ [[package]] name = "aws-smithy-xml" -version = "0.60.9" +version = "0.60.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab0b0166827aa700d3dc519f72f8b3a91c35d0b8d042dc5d643a91e6f80648fc" +checksum = "3db87b96cb1b16c024980f133968d52882ca0daaee3a086c6decc500f6c99728" dependencies = [ "xmlparser", ] @@ -1040,7 +1044,7 @@ checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -1072,7 +1076,7 @@ dependencies = [ "heck 0.5.0", "proc-macro-error", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", "ubyte", ] @@ -1139,9 +1143,9 @@ dependencies = [ [[package]] name = "base64ct" -version = "1.7.3" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "beef" @@ -1183,7 +1187,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.101", + "syn 2.0.104", "which", ] @@ -1280,7 +1284,7 @@ dependencies = [ "getrandom 0.2.16", "getrandom 0.3.3", "hex", - "indexmap 2.9.0", + "indexmap 2.10.0", "js-sys", "once_cell", "rand 0.9.1", @@ -1299,15 +1303,15 @@ checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytemuck" -version = "1.23.0" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" +checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" [[package]] name = "byteorder" @@ -1387,9 +1391,9 @@ checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" [[package]] name = "cc" -version = "1.2.25" +version = "1.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" +checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" dependencies = [ "jobserver", "libc", @@ -1428,9 +1432,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "chrono" @@ -1670,11 +1674,10 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc-fast" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add8d3a4c789d77eeb0f0e3c1035f73610d017f9047e87db94f89c02a56d8fef" +checksum = "6bf62af4cc77d8fe1c22dde4e721d87f2f54056139d8c412e1366b740305f56f" dependencies = [ - "cc", "crc", "digest", "libc", @@ -1742,9 +1745,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" @@ -1801,7 +1804,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -1821,9 +1824,9 @@ dependencies = [ [[package]] name = "curl" -version = "0.4.47" +version = "0.4.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9fb4d13a1be2b58f14d60adba57c9834b78c62fd86c3e76a148f732686e9265" +checksum = "9e2d5c8f48d9c0c23250e52b55e82a6ab4fdba6650c931f5a0a57a43abda812b" dependencies = [ "curl-sys", "libc", @@ -1831,14 +1834,14 @@ dependencies = [ "openssl-sys", "schannel", "socket2 0.5.10", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "curl-sys" -version = "0.4.80+curl-8.12.1" +version = "0.4.82+curl-8.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55f7df2eac63200c3ab25bde3b2268ef2ee56af3d238e76d61f01c3c49bff734" +checksum = "c4d63638b5ec65f1a4ae945287b3fd035be4554bbaf211901159c9a2a74fb5be" dependencies = [ "cc", "libc", @@ -1847,7 +1850,7 @@ dependencies = [ "openssl-sys", "pkg-config", "vcpkg", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1919,7 +1922,7 @@ dependencies = [ "proc-macro2", "quote 1.0.40", "strsim 0.11.1", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -1952,7 +1955,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2068,18 +2071,18 @@ checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "derive-where" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e73f2692d4bd3cac41dca28934a39894200c9fabf49586d77d0e5954af1d7902" +checksum = "510c292c8cf384b1a340b816a9a6cf2599eb8f566a44949024af88418000c50b" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2092,7 +2095,7 @@ dependencies = [ "proc-macro2", "quote 1.0.40", "rustc_version", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2125,7 +2128,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2148,7 +2151,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2325,7 +2328,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2345,7 +2348,7 @@ checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2361,6 +2364,26 @@ dependencies = [ "termcolor", ] +[[package]] +name = "equator" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" +dependencies = [ + "equator-macro", +] + +[[package]] +name = "equator-macro" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" +dependencies = [ + "proc-macro2", + "quote 1.0.40", + "syn 2.0.104", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -2378,12 +2401,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -2501,10 +2524,10 @@ version = "0.10.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" dependencies = [ - "atomic 0.6.0", + "atomic 0.6.1", "pear", "serde", - "toml 0.8.22", + "toml 0.8.23", "uncased", "version_check", ] @@ -2529,9 +2552,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", "miniz_oxide", @@ -2754,7 +2777,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2826,7 +2849,7 @@ dependencies = [ "libc", "log", "rustversion", - "windows 0.61.1", + "windows 0.61.3", ] [[package]] @@ -2851,9 +2874,9 @@ dependencies = [ [[package]] name = "getopts" -version = "0.2.21" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" +checksum = "cba6ae63eb948698e300f645f87c70f76630d505f23b8907cf1e193ee85048c1" dependencies = [ "unicode-width", ] @@ -2867,7 +2890,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -2887,14 +2910,14 @@ dependencies = [ [[package]] name = "getset" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3586f256131df87204eb733da72e3d3eb4f343c639f4b7be279ac7c48baeafe" +checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" dependencies = [ "proc-macro-error2", "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2909,9 +2932,9 @@ dependencies = [ [[package]] name = "gif" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" +checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b" dependencies = [ "color_quant", "weezl", @@ -2988,7 +3011,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.9.0", + "indexmap 2.10.0", "slab", "tokio 1.45.1", "tokio-util", @@ -2997,9 +3020,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" +checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" dependencies = [ "atomic-waker", "bytes 1.10.1", @@ -3007,7 +3030,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.9.0", + "indexmap 2.10.0", "slab", "tokio 1.45.1", "tokio-util", @@ -3065,9 +3088,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" dependencies = [ "allocator-api2", "equivalent", @@ -3076,11 +3099,11 @@ dependencies = [ [[package]] name = "headers" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322106e6bd0cba2d5ead589ddb8150a13d7c4217cf80d7c4f682ca994ccc6aa9" +checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "bytes 1.10.1", "headers-core", "http 1.3.1", @@ -3121,9 +3144,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -3249,7 +3272,7 @@ dependencies = [ "markup5ever", "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -3362,7 +3385,7 @@ dependencies = [ "bytes 1.10.1", "futures-channel", "futures-util", - "h2 0.4.10", + "h2 0.4.11", "http 1.3.1", "http-body 1.0.1", "httparse", @@ -3410,14 +3433,14 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.6" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a01595e11bdcec50946522c32dde3fc6914743000a68b93000965f2f02406d" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http 1.3.1", "hyper 1.6.0", "hyper-util", - "rustls 0.23.27", + "rustls 0.23.28", "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio 1.45.1", @@ -3456,9 +3479,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c293b6b3d21eca78250dc7dbebd6b9210ec5530e038cbfe0661b5c47ab06e8" +checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" dependencies = [ "base64 0.22.1", "bytes 1.10.1", @@ -3665,7 +3688,7 @@ dependencies = [ "color_quant", "exr", "gif", - "image-webp 0.2.1", + "image-webp 0.2.3", "num-traits", "png", "qoi", @@ -3689,9 +3712,9 @@ dependencies = [ [[package]] name = "image-webp" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b77d01e822461baa8409e156015a1d91735549f0f2c17691bd2d996bef238f7f" +checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" dependencies = [ "byteorder-lite", "quick-error 2.0.1", @@ -3721,19 +3744,19 @@ version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ - "autocfg 1.4.0", + "autocfg 1.5.0", "hashbrown 0.12.3", "serde", ] [[package]] name = "indexmap" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.15.3", + "hashbrown 0.15.4", "serde", ] @@ -3778,7 +3801,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -3815,7 +3838,7 @@ version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ - "hermit-abi 0.5.1", + "hermit-abi 0.5.2", "libc", "windows-sys 0.59.0", ] @@ -3856,7 +3879,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d4e5d712dd664b11e778d1cfc06c79ba2700d6bc1771e44fb7b6a4656b487d" dependencies = [ "generic-array 1.2.0", - "schemars", + "schemars 0.8.22", "serde", "time", ] @@ -3897,9 +3920,9 @@ dependencies = [ [[package]] name = "jpeg-decoder" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" +checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" [[package]] name = "js-sys" @@ -4190,9 +4213,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.172" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "libfuzzer-sys" @@ -4223,7 +4246,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.53.0", + "windows-targets 0.53.2", ] [[package]] @@ -4308,9 +4331,9 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "livekit-api" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fb2a1b706a08e27a951a9f2140746ff48be3d4e15ba3c80f9ef4c41ccd1d42" +checksum = "fc95de3f9a3aee87733789fb7a79643871eb05e5ae037d4876e70a6143c3d9e4" dependencies = [ "base64 0.21.7", "http 0.2.12", @@ -4332,9 +4355,9 @@ dependencies = [ [[package]] name = "livekit-protocol" -version = "0.3.10" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc3a6cc2da425e0a0dd7e97795fe14b9215336c10a5df7f4a98a2948a41c76d" +checksum = "45c90494efa508ec40228f870affec648826d23e1a9621a4430f67d187901eb4" dependencies = [ "futures-util", "livekit-runtime 0.4.0", @@ -4374,7 +4397,7 @@ version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ - "autocfg 1.4.0", + "autocfg 1.5.0", "scopeguard", ] @@ -4409,7 +4432,7 @@ dependencies = [ "quote 1.0.40", "regex-syntax 0.8.5", "rustc_version", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -4482,7 +4505,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.3", + "hashbrown 0.15.4", ] [[package]] @@ -4515,7 +4538,7 @@ dependencies = [ "macro_magic_core", "macro_magic_macros", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -4529,7 +4552,7 @@ dependencies = [ "macro_magic_core_macros", "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -4540,7 +4563,7 @@ checksum = "b02abfe41815b5bd98dbd4260173db2c116dda171dc0fe7838cb206333b83308" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -4551,7 +4574,7 @@ checksum = "73ea28ee64b88876bf45277ed9a5817c1817df061a74f2b988971a12570e5869" dependencies = [ "macro_magic_core", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -4617,9 +4640,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memmap2" @@ -4654,9 +4677,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", "simd-adler32", @@ -4669,7 +4692,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys 0.59.0", ] @@ -4727,9 +4750,9 @@ dependencies = [ [[package]] name = "mongodb" -version = "3.2.3" +version = "3.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdf4261933e5113914caec01c4bb16a7502bdaa9cf80fd87191765e7d9ff16b2" +checksum = "d0f8c69f13acf07eae386a2974f48ffd9187ea2aba8defbea9aa34e7e272c5f3" dependencies = [ "async-trait", "base64 0.13.1", @@ -4759,7 +4782,7 @@ dependencies = [ "serde", "serde_bytes", "serde_with", - "sha-1", + "sha1", "sha2", "socket2 0.5.10", "stringprep", @@ -4776,14 +4799,14 @@ dependencies = [ [[package]] name = "mongodb-internal-macros" -version = "3.2.3" +version = "3.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "619176c99deef0d50be51ce3193e9efd6a56ab0f4e6a38d5fd614880d148c7ae" +checksum = "b9202de265a3a8bbb43f9fe56db27c93137d4f9fb04c093f47e9c7de0c61ac7d" dependencies = [ "macro_magic", "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -4925,7 +4948,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -4943,7 +4966,7 @@ version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ - "autocfg 1.4.0", + "autocfg 1.5.0", "num-integer", "num-traits", ] @@ -4965,7 +4988,7 @@ version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "autocfg 1.4.0", + "autocfg 1.5.0", "libm", ] @@ -4975,7 +4998,7 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ - "hermit-abi 0.5.1", + "hermit-abi 0.5.2", "libc", ] @@ -5018,7 +5041,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -5074,7 +5097,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -5107,11 +5130,12 @@ dependencies = [ [[package]] name = "os_info" -version = "3.11.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fc863e2ca13dc2d5c34fb22ea4a588248ac14db929616ba65c45f21744b1e9" +checksum = "d0e1ac5fde8d43c34139135df8ea9ee9465394b2d8d20f032d38998f64afffc3" dependencies = [ "log", + "plist", "serde", "windows-sys 0.52.0", ] @@ -5270,7 +5294,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -5320,9 +5344,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" +checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" dependencies = [ "memchr", "thiserror 2.0.12", @@ -5331,9 +5355,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5" +checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" dependencies = [ "pest", "pest_generator", @@ -5341,24 +5365,23 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841" +checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "pest_meta" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0" +checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" dependencies = [ - "once_cell", "pest", "sha2", ] @@ -5370,7 +5393,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.9.0", + "indexmap 2.10.0", ] [[package]] @@ -5442,7 +5465,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -5486,7 +5509,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -5556,6 +5579,19 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "plist" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d77244ce2d584cd84f6a15f86195b8c9b2a0dfbfd817c09e0464244091a58ed" +dependencies = [ + "base64 0.22.1", + "indexmap 2.10.0", + "quick-xml", + "serde", + "time", +] + [[package]] name = "png" version = "0.17.16" @@ -5575,7 +5611,7 @@ version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ - "autocfg 1.4.0", + "autocfg 1.5.0", "bitflags 1.3.2", "cfg-if", "concurrent-queue", @@ -5593,7 +5629,7 @@ checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.5.1", + "hermit-abi 0.5.2", "pin-project-lite 0.2.16", "rustix 1.0.7", "tracing", @@ -5614,9 +5650,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "potential_utf" @@ -5660,12 +5696,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.33" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dee91521343f4c5c6a63edd65e54f31f5c92fe8978c40a4282f8372194c6a7d" +checksum = "061c1221631e079b26479d25bbf2275bfe5917ae8419cd7e34f13bfc2aa7539a" dependencies = [ "proc-macro2", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -5730,7 +5766,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -5750,28 +5786,28 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", "version_check", "yansi", ] [[package]] name = "profiling" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" +checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" dependencies = [ "profiling-procmacros", ] [[package]] name = "profiling-procmacros" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" +checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -5815,7 +5851,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.101", + "syn 2.0.104", "tempfile", ] @@ -5829,7 +5865,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -5868,6 +5904,15 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" +[[package]] +name = "quick-xml" +version = "0.37.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +dependencies = [ + "memchr", +] + [[package]] name = "quote" version = "0.3.15" @@ -5891,9 +5936,9 @@ checksum = "5a3866219251662ec3b26fc217e3e05bf9c4f84325234dfb96bf0bf840889e49" [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "radium" @@ -6104,9 +6149,9 @@ dependencies = [ [[package]] name = "ravif" -version = "0.11.12" +version = "0.11.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6a5f31fcf7500f9401fea858ea4ab5525c99f2322cfcee732c0e6c74208c0c6" +checksum = "5825c26fddd16ab9f515930d49028a630efec172e903483c94796cfe31893e6b" dependencies = [ "avif-serialize", "imgref", @@ -6199,9 +6244,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" +checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" dependencies = [ "bitflags 2.9.1", ] @@ -6223,7 +6268,7 @@ checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -6318,28 +6363,26 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.18" +version = "0.12.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e98ff6b0dbbe4d5a37318f433d4fc82babd21631f194d370409ceb2e40b2f0b5" +checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" dependencies = [ "base64 0.22.1", "bytes 1.10.1", "encoding_rs", "futures-core", - "h2 0.4.10", + "h2 0.4.11", "http 1.3.1", "http-body 1.0.1", "http-body-util", "hyper 1.6.0", - "hyper-rustls 0.27.6", + "hyper-rustls 0.27.7", "hyper-tls 0.6.0", "hyper-util", - "ipnet", "js-sys", "log", "mime", "native-tls", - "once_cell", "percent-encoding", "pin-project-lite 0.2.16", "rustls-pki-types", @@ -6350,7 +6393,7 @@ dependencies = [ "tokio 1.45.1", "tokio-native-tls", "tower", - "tower-http 0.6.4", + "tower-http 0.6.6", "tower-service", "url", "wasm-bindgen", @@ -6383,7 +6426,7 @@ dependencies = [ [[package]] name = "revolt-autumn" -version = "0.8.7" +version = "0.8.8" dependencies = [ "axum", "axum-macros", @@ -6420,7 +6463,7 @@ dependencies = [ [[package]] name = "revolt-bonfire" -version = "0.8.7" +version = "0.8.8" dependencies = [ "async-channel 2.3.1", "async-std", @@ -6450,7 +6493,7 @@ dependencies = [ [[package]] name = "revolt-config" -version = "0.8.7" +version = "0.8.8" dependencies = [ "async-std", "cached", @@ -6467,7 +6510,7 @@ dependencies = [ [[package]] name = "revolt-crond" -version = "0.8.7" +version = "0.8.8" dependencies = [ "log", "revolt-config", @@ -6479,7 +6522,7 @@ dependencies = [ [[package]] name = "revolt-database" -version = "0.8.7" +version = "0.8.8" dependencies = [ "amqprs", "async-lock 2.8.0", @@ -6520,7 +6563,7 @@ dependencies = [ "revolt_optional_struct", "revolt_rocket_okapi", "rocket", - "schemars", + "schemars 0.8.22", "serde", "serde_json", "ulid 1.2.1", @@ -6532,7 +6575,7 @@ dependencies = [ [[package]] name = "revolt-delta" -version = "0.8.7" +version = "0.8.8" dependencies = [ "amqprs", "async-channel 1.9.0", @@ -6570,7 +6613,7 @@ dependencies = [ "rocket_cors", "rocket_empty", "rocket_prometheus", - "schemars", + "schemars 0.8.22", "serde", "serde_json", "ulid 0.4.1", @@ -6581,7 +6624,7 @@ dependencies = [ [[package]] name = "revolt-files" -version = "0.8.7" +version = "0.8.8" dependencies = [ "aes-gcm", "aws-config", @@ -6604,7 +6647,7 @@ dependencies = [ [[package]] name = "revolt-january" -version = "0.8.7" +version = "0.8.8" dependencies = [ "async-recursion", "axum", @@ -6614,7 +6657,7 @@ dependencies = [ "mime", "moka", "regex", - "reqwest 0.12.18", + "reqwest 0.12.22", "revolt-config", "revolt-files", "revolt-models", @@ -6632,7 +6675,7 @@ dependencies = [ [[package]] name = "revolt-models" -version = "0.8.7" +version = "0.8.8" dependencies = [ "indexmap 1.9.3", "iso8601-timestamp", @@ -6643,7 +6686,7 @@ dependencies = [ "revolt-permissions", "revolt_optional_struct", "rocket", - "schemars", + "schemars 0.8.22", "serde", "utoipa", "validator 0.16.1", @@ -6651,14 +6694,14 @@ dependencies = [ [[package]] name = "revolt-parser" -version = "0.8.7" +version = "0.8.8" dependencies = [ "logos", ] [[package]] name = "revolt-permissions" -version = "0.8.7" +version = "0.8.8" dependencies = [ "async-std", "async-trait", @@ -6667,24 +6710,25 @@ dependencies = [ "num_enum 0.6.1", "once_cell", "revolt-result", - "schemars", + "schemars 0.8.22", "serde", ] [[package]] name = "revolt-presence" -version = "0.8.7" +version = "0.8.8" dependencies = [ "async-std", "log", "once_cell", "rand 0.8.5", "redis-kiss", + "revolt-config", ] [[package]] name = "revolt-pushd" -version = "0.8.7" +version = "0.8.8" dependencies = [ "amqprs", "anyhow", @@ -6712,14 +6756,14 @@ dependencies = [ [[package]] name = "revolt-result" -version = "0.8.7" +version = "0.8.8" dependencies = [ "axum", "log", "revolt_okapi", "revolt_rocket_okapi", "rocket", - "schemars", + "schemars 0.8.22", "serde", "serde_json", "utoipa", @@ -6788,7 +6832,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23bfdf7ae769c3042fe727f6e5c17363b02a64b4b33ad60c3e5f73b26df7835b" dependencies = [ "log", - "schemars", + "schemars 0.8.22", "serde", "serde_json", ] @@ -6814,7 +6858,7 @@ dependencies = [ "revolt_okapi", "revolt_rocket_okapi_codegen", "rocket", - "schemars", + "schemars 0.8.22", "serde", "serde_json", ] @@ -6912,7 +6956,7 @@ dependencies = [ "either", "figment", "futures", - "indexmap 2.9.0", + "indexmap 2.10.0", "log", "memchr", "multer", @@ -6948,7 +6992,7 @@ dependencies = [ "revolt_rocket_okapi", "rocket", "rocket_empty", - "schemars", + "schemars 0.8.22", "serde", ] @@ -6960,11 +7004,11 @@ checksum = "575d32d7ec1a9770108c879fc7c47815a80073f96ca07ff9525a94fcede1dd46" dependencies = [ "devise", "glob", - "indexmap 2.9.0", + "indexmap 2.10.0", "proc-macro2", "quote 1.0.40", "rocket_http", - "syn 2.0.101", + "syn 2.0.104", "unicode-xid 0.2.6", "version_check", ] @@ -7007,7 +7051,7 @@ dependencies = [ "futures", "http 0.2.12", "hyper 0.14.32", - "indexmap 2.9.0", + "indexmap 2.10.0", "log", "memchr", "pear", @@ -7095,9 +7139,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" [[package]] name = "rustc-hash" @@ -7178,9 +7222,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.27" +version = "0.23.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" +checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" dependencies = [ "aws-lc-rs", "once_cell", @@ -7326,6 +7370,30 @@ dependencies = [ "serde_json", ] +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1375ba8ef45a6f15d83fa8748f1079428295d403d6ea991d09ab100155fbc06d" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "schemars_derive" version = "0.8.22" @@ -7335,7 +7403,7 @@ dependencies = [ "proc-macro2", "quote 1.0.40", "serde_derive_internals", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -7675,7 +7743,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -7686,7 +7754,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -7695,7 +7763,7 @@ version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "itoa", "memchr", "ryu", @@ -7714,9 +7782,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ "serde", ] @@ -7735,15 +7803,17 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.12.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.9.0", + "indexmap 2.10.0", + "schemars 0.9.0", + "schemars 1.0.3", "serde", "serde_derive", "serde_json", @@ -7753,14 +7823,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.12.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" +checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" dependencies = [ "darling 0.20.11", "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -7899,12 +7969,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg 1.4.0", -] +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" [[package]] name = "slotmap" @@ -7928,9 +7995,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" @@ -8069,7 +8136,7 @@ dependencies = [ "proc-macro2", "quote 1.0.40", "rustversion", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -8112,9 +8179,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.101" +version = "2.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" dependencies = [ "proc-macro2", "quote 1.0.40", @@ -8165,7 +8232,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -8233,7 +8300,7 @@ dependencies = [ "cfg-expr", "heck 0.5.0", "pkg-config", - "toml 0.8.22", + "toml 0.8.23", "version-compare", ] @@ -8320,7 +8387,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -8331,17 +8398,16 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] @@ -8485,7 +8551,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -8525,7 +8591,7 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ - "rustls 0.23.27", + "rustls 0.23.28", "tokio 1.45.1", ] @@ -8565,21 +8631,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.22" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.26", + "toml_edit 0.22.27", ] [[package]] name = "toml_datetime" -version = "0.6.9" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ "serde", ] @@ -8590,30 +8656,30 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "toml_datetime", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.22.26" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "serde", "serde_spanned", "toml_datetime", "toml_write", - "winnow 0.7.10", + "winnow 0.7.11", ] [[package]] name = "toml_write" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "totp-lite" @@ -8661,9 +8727,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.4" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdb0c213ca27a9f57ab69ddb290fd80d970922355b83ae380b395d3986b8a2e" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ "bitflags 2.9.1", "bytes 1.10.1", @@ -8703,20 +8769,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", "valuable", @@ -8953,9 +9019,9 @@ checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" [[package]] name = "unicode-width" -version = "0.1.14" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" [[package]] name = "unicode-xid" @@ -9070,7 +9136,7 @@ version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5afb1a60e207dca502682537fefcfd9921e71d0b83e9576060f09abc6efab23" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "serde", "serde_json", "utoipa-gen", @@ -9086,7 +9152,7 @@ dependencies = [ "proc-macro2", "quote 1.0.40", "regex", - "syn 2.0.101", + "syn 2.0.104", "ulid 1.2.1", ] @@ -9116,9 +9182,9 @@ dependencies = [ [[package]] name = "v_frame" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2" dependencies = [ "aligned-vec", "num-traits", @@ -9253,9 +9319,9 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" @@ -9272,7 +9338,7 @@ version = "0.12.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" dependencies = [ - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", ] [[package]] @@ -9297,7 +9363,7 @@ dependencies = [ "log", "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", "wasm-bindgen-shared", ] @@ -9332,7 +9398,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -9410,14 +9476,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.0", + "webpki-roots 1.0.1", ] [[package]] name = "webpki-roots" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2853738d1cc4f2da3a225c18ec6c3721abb31961096e9dbf5ab35fa88b19cfdb" +checksum = "8782dd5a41a24eed3a4f40b606249b3e236ca61adf1f25ea4d45c73de122b502" dependencies = [ "rustls-pki-types", ] @@ -9488,9 +9554,9 @@ dependencies = [ [[package]] name = "windows" -version = "0.61.1" +version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5ee8f3d025738cb02bad7868bbb5f8a6327501e870bf51f1b455b0a2454a419" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ "windows-collections", "windows-core", @@ -9518,7 +9584,7 @@ dependencies = [ "windows-interface", "windows-link", "windows-result", - "windows-strings 0.4.2", + "windows-strings", ] [[package]] @@ -9540,7 +9606,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -9551,14 +9617,14 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "windows-link" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-numerics" @@ -9572,13 +9638,13 @@ dependencies = [ [[package]] name = "windows-registry" -version = "0.4.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ + "windows-link", "windows-result", - "windows-strings 0.3.1", - "windows-targets 0.53.0", + "windows-strings", ] [[package]] @@ -9590,15 +9656,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-strings" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" -dependencies = [ - "windows-link", -] - [[package]] name = "windows-strings" version = "0.4.2" @@ -9635,6 +9692,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.2", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -9668,9 +9734,9 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.0" +version = "0.53.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" dependencies = [ "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", @@ -9840,9 +9906,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" +checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" dependencies = [ "memchr", ] @@ -9931,7 +9997,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", "synstructure 0.13.2", ] @@ -9964,22 +10030,22 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -9999,7 +10065,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", "synstructure 0.13.2", ] @@ -10039,7 +10105,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote 1.0.40", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -10059,9 +10125,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028" +checksum = "7384255a918371b5af158218d131530f694de9ad3815ebdd0453a940485cb0fa" dependencies = [ "zune-core", ] diff --git a/Cargo.toml b/Cargo.toml index 19808e67..5c320e63 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,8 @@ members = [ [patch.crates-io] redis23 = { package = "redis", version = "0.23.3", git = "https://github.com/revoltchat/redis-rs", rev = "523b2937367e17bd0073722bf6e23d06042cb4e4" } +#authifier = { package = "authifier", version = "1.0.10", path = "../authifier/crates/authifier" } +#rocket_authifier = { package = "rocket_authifier", version = "1.0.10", path = "../authifier/crates/rocket_authifier" } # I'm 99% sure this is overloading the GitHub worker # hence builds have been failing since, let's just diff --git a/README.md b/README.md index 1973ee20..3dd25cf5 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,8 @@ If you'd like to change anything, create a `Revolt.overrides.toml` file and spec > And corresponding Revolt configuration: > > ```toml -> # Revolt.overrides.toml +> # Revolt.overrides.toml +> # and Revolt.test-overrides.toml > [database] > mongodb = "mongodb://127.0.0.1:14017" > redis = "redis://127.0.0.1:14079/" diff --git a/crates/bonfire/Cargo.toml b/crates/bonfire/Cargo.toml index 1f38becf..e447825d 100644 --- a/crates/bonfire/Cargo.toml +++ b/crates/bonfire/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-bonfire" -version = "0.8.7" +version = "0.8.8" license = "AGPL-3.0-or-later" edition = "2021" @@ -41,7 +41,7 @@ revolt-result = { path = "../core/result" } revolt-models = { path = "../core/models" } revolt-config = { path = "../core/config" } revolt-database = { path = "../core/database" } -revolt-permissions = { version = "0.8.7", path = "../core/permissions" } +revolt-permissions = { version = "0.8.8", path = "../core/permissions" } revolt-presence = { path = "../core/presence", features = ["redis-is-patched"] } # redis diff --git a/crates/bonfire/src/websocket.rs b/crates/bonfire/src/websocket.rs index dbebfdbd..913245e9 100644 --- a/crates/bonfire/src/websocket.rs +++ b/crates/bonfire/src/websocket.rs @@ -17,6 +17,7 @@ use redis_kiss::{PayloadType, REDIS_PAYLOAD_TYPE, REDIS_URI}; use revolt_config::report_internal_error; use revolt_database::{ events::{client::EventV1, server::ClientMessage}, + iso8601_timestamp::Timestamp, Database, User, UserHint, }; use revolt_presence::{create_session, delete_session}; @@ -100,6 +101,10 @@ pub async fn client(db: &'static Database, stream: TcpStream, addr: SocketAddr) info!("User {addr:?} authenticated as @{}", user.username); + db.update_session_last_seen(&session_id, Timestamp::now_utc()) + .await + .ok(); + // Create local state. let mut state = State::from(user, session_id); let user_id = state.cache.user_id.clone(); diff --git a/crates/core/config/Cargo.toml b/crates/core/config/Cargo.toml index 7254866f..04cf6fca 100644 --- a/crates/core/config/Cargo.toml +++ b/crates/core/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-config" -version = "0.8.7" +version = "0.8.8" edition = "2021" license = "MIT" authors = ["Paul Makles "] @@ -36,4 +36,4 @@ sentry = "0.31.5" sentry-anyhow = { version = "0.38.1", optional = true } # Core -revolt-result = { version = "0.8.7", path = "../result", optional = true } +revolt-result = { version = "0.8.8", path = "../result", optional = true } diff --git a/crates/core/config/src/lib.rs b/crates/core/config/src/lib.rs index f15f17fb..2371aa7e 100644 --- a/crates/core/config/src/lib.rs +++ b/crates/core/config/src/lib.rs @@ -60,6 +60,9 @@ static CONFIG_SEARCH_PATHS: [&str; 3] = [ "/Revolt.toml", ]; +/// Path to search for test overrides +static TEST_OVERRIDE_PATH: &str = "Revolt.test-overrides.toml"; + /// Configuration builder static CONFIG_BUILDER: Lazy> = Lazy::new(|| { RwLock::new({ @@ -73,6 +76,20 @@ static CONFIG_BUILDER: Lazy> = Lazy::new(|| { include_str!("../Revolt.test.toml"), FileFormat::Toml, )); + + // recursively search upwards for an overrides file (if there is one) + if let Ok(cwd) = std::env::current_dir() { + let mut path = Some(cwd.as_path()); + while let Some(current_path) = path { + let target_path = current_path.join(TEST_OVERRIDE_PATH); + if target_path.exists() { + builder = builder + .add_source(File::new(target_path.to_str().unwrap(), FileFormat::Toml)); + } + + path = current_path.parent(); + } + } } for path in CONFIG_SEARCH_PATHS { @@ -407,6 +424,11 @@ pub async fn read() -> Config { pub async fn config() -> Settings { let mut config = read().await.try_deserialize::().unwrap(); + // inject REDIS_URI for redis-kiss library + if std::env::var("REDIS_URL").is_err() { + std::env::set_var("REDIS_URI", config.database.redis.clone()); + } + // auto-detect production nodes if config.hosts.api.contains("https") && config.hosts.api.contains("revolt.chat") { config.production = true; @@ -425,12 +447,6 @@ pub async fn setup_logging(release: &'static str, dsn: String) -> Option"] @@ -24,19 +24,19 @@ default = ["mongodb", "async-std-runtime", "tasks"] [dependencies] # Core -revolt-config = { version = "0.8.7", path = "../config", features = [ +revolt-config = { version = "0.8.8", path = "../config", features = [ "report-macros", ] } -revolt-result = { version = "0.8.7", path = "../result" } -revolt-models = { version = "0.8.7", path = "../models", features = [ +revolt-result = { version = "0.8.8", path = "../result" } +revolt-models = { version = "0.8.8", path = "../models", features = [ "validator", ] } -revolt-presence = { version = "0.8.7", path = "../presence" } -revolt-permissions = { version = "0.8.7", path = "../permissions", features = [ +revolt-presence = { version = "0.8.8", path = "../presence" } +revolt-permissions = { version = "0.8.8", path = "../permissions", features = [ "serde", "bson", ] } -revolt-parser = { version = "0.8.7", path = "../parser" } +revolt-parser = { version = "0.8.8", path = "../parser" } # Utility log = "0.4" diff --git a/crates/core/database/fixtures/group_with_members.json b/crates/core/database/fixtures/group_with_members.json index a4544176..63cc9662 100644 --- a/crates/core/database/fixtures/group_with_members.json +++ b/crates/core/database/fixtures/group_with_members.json @@ -3,18 +3,21 @@ "_object_type": "User", "_id": "__ID:0__", "username": "Owner", + "last_acknowledged_policy_change": "2025-06-07T04:04:48+0000", "discriminator": "0001" }, { "_object_type": "User", "_id": "__ID:1__", "username": "Member", + "last_acknowledged_policy_change": "2025-06-07T04:04:48+0000", "discriminator": "0001" }, { "_object_type": "User", "_id": "__ID:2__", "username": "Member", + "last_acknowledged_policy_change": "2025-06-07T04:04:48+0000", "discriminator": "0002" }, { @@ -23,6 +26,9 @@ "channel_type": "Group", "name": "My Group", "owner": "__ID:0__", - "recipients": ["__ID:0__", "__ID:1__"] + "recipients": [ + "__ID:0__", + "__ID:1__" + ] } -] +] \ No newline at end of file diff --git a/crates/core/database/fixtures/server_with_roles.json b/crates/core/database/fixtures/server_with_roles.json index 065e21c3..0a76489d 100644 --- a/crates/core/database/fixtures/server_with_roles.json +++ b/crates/core/database/fixtures/server_with_roles.json @@ -3,18 +3,21 @@ "_object_type": "User", "_id": "__ID:0__", "username": "Owner", + "last_acknowledged_policy_change": "2025-06-07T04:04:48+0000", "discriminator": "0001" }, { "_object_type": "User", "_id": "__ID:1__", "username": "Moderator", + "last_acknowledged_policy_change": "2025-06-07T04:04:48+0000", "discriminator": "0001" }, { "_object_type": "User", "_id": "__ID:2__", "username": "User", + "last_acknowledged_policy_change": "2025-06-07T04:04:48+0000", "discriminator": "0001" }, { @@ -39,7 +42,9 @@ "_id": "__ID:4__", "owner": "__ID:0__", "name": "Server", - "channels": ["__ID:3__"], + "channels": [ + "__ID:3__" + ], "roles": { "__ID:5__": { "name": "Moderator", @@ -47,7 +52,7 @@ "a": 545270208, "d": 0 }, - "rank": 3 + "rank": 1 }, "__ID:6__": { "name": "Owner", @@ -66,7 +71,9 @@ "user": "__ID:0__", "server": "__ID:4__" }, - "roles": ["__ID:6__"], + "roles": [ + "__ID:6__" + ], "joined_at": 1698318340195 }, { @@ -75,7 +82,9 @@ "user": "__ID:1__", "server": "__ID:4__" }, - "roles": ["__ID:5__"], + "roles": [ + "__ID:5__" + ], "joined_at": 1698318340195 }, { @@ -86,4 +95,4 @@ }, "joined_at": 1698318340195 } -] +] \ No newline at end of file diff --git a/crates/core/database/src/events/client.rs b/crates/core/database/src/events/client.rs index 3937b3b3..9d630406 100644 --- a/crates/core/database/src/events/client.rs +++ b/crates/core/database/src/events/client.rs @@ -166,6 +166,9 @@ pub enum EventV1 { /// Server role deleted ServerRoleDelete { id: String, role_id: String }, + /// Server roles ranks updated + ServerRoleRanksUpdate { id: String, ranks: Vec }, + /// Update existing user UserUpdate { id: String, 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 72b03dbf..7e8c0268 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 @@ -1,4 +1,8 @@ -use std::{collections::HashSet, ops::BitXor, time::Duration}; +use std::{ + collections::{HashMap, HashSet}, + ops::BitXor, + time::Duration, +}; use crate::{ mongodb::{ @@ -22,7 +26,7 @@ struct MigrationInfo { revision: i32, } -pub const LATEST_REVISION: i32 = 43; // MUST BE +1 to last migration +pub const LATEST_REVISION: i32 = 44; // MUST BE +1 to last migration pub async fn migrate_database(db: &MongoDb) { let migrations = db.col::("migrations"); @@ -1201,6 +1205,63 @@ pub async fn run_migrations(db: &MongoDb, revision: i32) -> i32 { .expect("Failed to update voice channels"); }; + if revision <= 43 { + info!( + "Running migration [revision 43 / 05-06-2025]: convert role ranks to uniform numbers." + ); + + #[derive(Serialize, Deserialize, Clone)] + struct Role { + pub rank: i64, + } + + #[derive(Serialize, Deserialize, Clone)] + struct Server { + #[serde(rename = "_id")] + pub id: String, + #[serde(default = "HashMap::::new")] + pub roles: HashMap, + } + + let mut servers = db + .db() + .collection::("servers") + .find(doc! { + "roles": { + "$exists": true, + "$ne": [] + } + }) + .await + .unwrap() + .filter_map(|s| async { s.ok() }) + .boxed(); + + while let Some(server) = servers.next().await { + let mut ordered_roles = server.roles.clone().into_iter().collect::>(); + ordered_roles.sort_by(|(_, role_a), (_, role_b)| role_a.rank.cmp(&role_b.rank)); + let ordered_roles = ordered_roles + .into_iter() + .map(|(id, _)| id) + .collect::>(); + + let mut doc = doc! {}; + + for id in server.roles.keys() { + doc.insert( + format!("roles.{id}.rank"), + ordered_roles.iter().position(|x| id == x).unwrap() as i64, + ); + } + + db.db() + .collection::("servers") + .update_one(doc! { "_id": &server.id }, doc! { "$set": doc }) + .await + .unwrap(); + } + } + // Reminder to update LATEST_REVISION when adding new migrations. LATEST_REVISION.max(revision) } diff --git a/crates/core/database/src/models/servers/model.rs b/crates/core/database/src/models/servers/model.rs index 33cfa713..eea8f392 100644 --- a/crates/core/database/src/models/servers/model.rs +++ b/crates/core/database/src/models/servers/model.rs @@ -181,7 +181,7 @@ impl Server { } /// Update server data - pub async fn update<'a>( + pub async fn update( &mut self, db: &Database, partial: PartialServer, @@ -228,6 +228,13 @@ impl Server { } } + /// Ordered roles list + pub fn ordered_roles(&self) -> Vec<(String, Role)> { + let mut ordered_roles = self.roles.clone().into_iter().collect::>(); + ordered_roles.sort_by(|(_, role_a), (_, role_b)| role_a.rank.cmp(&role_b.rank)); + ordered_roles + } + /// Set role permission on a server pub async fn set_role_permission( &mut self, @@ -253,6 +260,37 @@ impl Server { Err(create_error!(NotFound)) } } + + /// Reorders the server's roles rankings + pub async fn set_role_ordering(&mut self, db: &Database, new_order: Vec) -> Result<()> { + // New order must always contain every role + debug_assert_eq!(self.roles.len(), new_order.len()); + + // Set the role's ranks to the positions in the vec + for (rank, id) in new_order.iter().enumerate() { + self.roles.get_mut(id).unwrap().rank = rank as i64; + } + + db.update_server( + &self.id, + &PartialServer { + roles: Some(self.roles.clone()), + ..Default::default() + }, + Vec::new(), + ) + .await?; + + // Publish bulk update event + EventV1::ServerRoleRanksUpdate { + id: self.id.clone(), + ranks: new_order, + } + .p(self.id.clone()) + .await; + + Ok(()) + } } impl Role { diff --git a/crates/core/database/src/models/users/mod.rs b/crates/core/database/src/models/users/mod.rs index 748a87c0..4e58da72 100644 --- a/crates/core/database/src/models/users/mod.rs +++ b/crates/core/database/src/models/users/mod.rs @@ -7,11 +7,5 @@ mod rocket; #[cfg(feature = "rocket-impl")] mod schema; -#[cfg(feature = "axum-impl")] -pub use self::axum::*; -#[cfg(feature = "rocket-impl")] -pub use self::rocket::*; -#[cfg(feature = "rocket-impl")] -pub use self::schema::*; pub use model::*; pub use ops::*; diff --git a/crates/core/database/src/models/users/ops.rs b/crates/core/database/src/models/users/ops.rs index fe6bb2ff..356a3f6c 100644 --- a/crates/core/database/src/models/users/ops.rs +++ b/crates/core/database/src/models/users/ops.rs @@ -1,4 +1,5 @@ use authifier::models::Session; +use iso8601_timestamp::Timestamp; use revolt_result::Result; use crate::{FieldsUser, PartialUser, RelationshipStatus, User}; @@ -61,4 +62,6 @@ pub trait AbstractUsers: Sync + Send { /// Remove push subscription for a session by session id (TODO: remove) async fn remove_push_subscription_by_session_id(&self, session_id: &str) -> Result<()>; + + async fn update_session_last_seen(&self, session_id: &str, when: Timestamp) -> Result<()>; } diff --git a/crates/core/database/src/models/users/ops/mongodb.rs b/crates/core/database/src/models/users/ops/mongodb.rs index 000034c5..d4292aeb 100644 --- a/crates/core/database/src/models/users/ops/mongodb.rs +++ b/crates/core/database/src/models/users/ops/mongodb.rs @@ -1,6 +1,7 @@ use ::mongodb::options::{Collation, CollationStrength, FindOneOptions, FindOptions}; use authifier::models::Session; use futures::StreamExt; +use iso8601_timestamp::Timestamp; use revolt_result::Result; use crate::DocumentId; @@ -317,7 +318,26 @@ impl AbstractUsers for MongoDb { ) .await .map(|_| ()) - .map_err(|_| create_database_error!("update_one", COL)) + .map_err(|_| create_database_error!("update_one", "sessions")) + } + + async fn update_session_last_seen(&self, session_id: &str, when: Timestamp) -> Result<()> { + let formatted: &str = &when.format(); + + self.col::("sessions") + .update_one( + doc! { + "_id": session_id + }, + doc! { + "$set": { + "last_seen": formatted + } + }, + ) + .await + .map(|_| ()) + .map_err(|_| create_database_error!("update_one", "sessions")) } } diff --git a/crates/core/database/src/models/users/ops/reference.rs b/crates/core/database/src/models/users/ops/reference.rs index 50349080..4817f97e 100644 --- a/crates/core/database/src/models/users/ops/reference.rs +++ b/crates/core/database/src/models/users/ops/reference.rs @@ -1,4 +1,5 @@ use authifier::models::Session; +use iso8601_timestamp::Timestamp; use revolt_result::Result; use crate::{FieldsUser, PartialUser, RelationshipStatus, User}; @@ -168,4 +169,8 @@ impl AbstractUsers for ReferenceDb { async fn remove_push_subscription_by_session_id(&self, _session_id: &str) -> Result<()> { todo!() } + + async fn update_session_last_seen(&self, _session_id: &str, _when: Timestamp) -> Result<()> { + todo!() + } } diff --git a/crates/core/database/src/tasks/authifier_relay.rs b/crates/core/database/src/tasks/authifier_relay.rs index 9dac7020..14bcb692 100644 --- a/crates/core/database/src/tasks/authifier_relay.rs +++ b/crates/core/database/src/tasks/authifier_relay.rs @@ -4,7 +4,7 @@ use once_cell::sync::Lazy; use crate::events::client::EventV1; -static Q: Lazy<(Sender, Receiver)> = Lazy::new(|| unbounded()); +static Q: Lazy<(Sender, Receiver)> = Lazy::new(unbounded); /// Get sender pub fn sender() -> Sender { diff --git a/crates/core/database/src/util/bridge/v0.rs b/crates/core/database/src/util/bridge/v0.rs index 6e658245..a4ab2044 100644 --- a/crates/core/database/src/util/bridge/v0.rs +++ b/crates/core/database/src/util/bridge/v0.rs @@ -15,8 +15,7 @@ impl crate::Bot { avatar: user.avatar.map(|x| x.id).unwrap_or_default(), description: user .profile - .map(|profile| profile.content) - .flatten() + .and_then(|profile| profile.content) .unwrap_or_default(), } } @@ -1135,7 +1134,7 @@ impl crate::User { } /// Convert user object into user model without presence information - pub async fn into_known_static<'a>(self, is_online: bool) -> User { + pub async fn into_known_static(self, is_online: bool) -> User { let badges = self.get_badges().await; User { diff --git a/crates/core/database/src/util/idempotency.rs b/crates/core/database/src/util/idempotency.rs index df68000d..769dc1dd 100644 --- a/crates/core/database/src/util/idempotency.rs +++ b/crates/core/database/src/util/idempotency.rs @@ -54,7 +54,7 @@ use revolt_rocket_okapi::{ use schemars::schema::{InstanceType, SchemaObject, SingleOrVec}; #[cfg(feature = "rocket-impl")] -impl<'r> OpenApiFromRequest<'r> for IdempotencyKey { +impl OpenApiFromRequest<'_> for IdempotencyKey { fn from_request_input( _gen: &mut OpenApiGenerator, _name: String, diff --git a/crates/core/database/src/util/permissions.rs b/crates/core/database/src/util/permissions.rs index f5414396..99200105 100644 --- a/crates/core/database/src/util/permissions.rs +++ b/crates/core/database/src/util/permissions.rs @@ -104,7 +104,7 @@ impl PermissionQuery for DatabasePermissionQuery<'_> { .unwrap_or_default(); self.cached_mutual_connection = Some(value); - matches!(value, true) + value } else { false } diff --git a/crates/core/files/Cargo.toml b/crates/core/files/Cargo.toml index 4dfadeed..7cc219f1 100644 --- a/crates/core/files/Cargo.toml +++ b/crates/core/files/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-files" -version = "0.8.7" +version = "0.8.8" edition = "2021" license = "AGPL-3.0-or-later" authors = ["Paul Makles "] @@ -20,10 +20,10 @@ typenum = "1.17.0" aws-config = "1.5.5" aws-sdk-s3 = { version = "1.46.0", features = ["behavior-version-latest"] } -revolt-config = { version = "0.8.7", path = "../config", features = [ +revolt-config = { version = "0.8.8", path = "../config", features = [ "report-macros", ] } -revolt-result = { version = "0.8.7", path = "../result" } +revolt-result = { version = "0.8.8", path = "../result" } # image processing jxl-oxide = "0.8.1" diff --git a/crates/core/models/Cargo.toml b/crates/core/models/Cargo.toml index 6c9dcf80..e232fd6c 100644 --- a/crates/core/models/Cargo.toml +++ b/crates/core/models/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-models" -version = "0.8.7" +version = "0.8.8" edition = "2021" license = "MIT" authors = ["Paul Makles "] @@ -20,8 +20,8 @@ default = ["serde", "partials", "rocket"] [dependencies] # Core -revolt-config = { version = "0.8.7", path = "../config" } -revolt-permissions = { version = "0.8.7", path = "../permissions" } +revolt-config = { version = "0.8.8", path = "../config" } +revolt-permissions = { version = "0.8.8", path = "../permissions" } # Utility regex = "1.11" diff --git a/crates/core/models/src/v0/channels.rs b/crates/core/models/src/v0/channels.rs index 5a70449b..39db5cb5 100644 --- a/crates/core/models/src/v0/channels.rs +++ b/crates/core/models/src/v0/channels.rs @@ -348,14 +348,14 @@ impl Channel { /// This returns a Result because the recipient name can't be determined here without a db call, /// which can't be done since this is models, which can't reference the database crate. /// - /// If it returns Err, you need to fetch the name from the db. - pub fn name(&self) -> Result<&str, ()> { + /// If it returns None, you need to fetch the name from the db. + pub fn name(&self) -> Option<&str> { match self { - Channel::DirectMessage { .. } => Err(()), - Channel::SavedMessages { .. } => Ok("Saved Messages"), + Channel::DirectMessage { .. } => None, + Channel::SavedMessages { .. } => Some("Saved Messages"), Channel::TextChannel { name, .. } | Channel::Group { name, .. } - | Channel::VoiceChannel { name, .. } => Ok(name), + | Channel::VoiceChannel { name, .. } => Some(name), } } } diff --git a/crates/core/models/src/v0/servers.rs b/crates/core/models/src/v0/servers.rs index ae5a50a2..4c7e1ee8 100644 --- a/crates/core/models/src/v0/servers.rs +++ b/crates/core/models/src/v0/servers.rs @@ -267,7 +267,7 @@ auto_derived!( pub hoist: Option, /// Ranking position /// - /// Smaller values take priority. + /// **Removed** - no effect, use the edit server role positions route pub rank: Option, /// Fields to remove from role object #[cfg_attr(feature = "validator", validate(length(min = 1)))] @@ -286,4 +286,9 @@ auto_derived!( /// Whether to not send a leave message pub leave_silently: Option, } + + /// New role positions + pub struct DataEditRoleRanks { + pub ranks: Vec, + } ); diff --git a/crates/core/parser/Cargo.toml b/crates/core/parser/Cargo.toml index 3c0a15b5..a162cee3 100644 --- a/crates/core/parser/Cargo.toml +++ b/crates/core/parser/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-parser" -version = "0.8.7" +version = "0.8.8" edition = "2021" license = "AGPL-3.0-or-later" description = "Revolt Backend: Message Parser" diff --git a/crates/core/permissions/Cargo.toml b/crates/core/permissions/Cargo.toml index c4eb7262..d5ee3216 100644 --- a/crates/core/permissions/Cargo.toml +++ b/crates/core/permissions/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-permissions" -version = "0.8.7" +version = "0.8.8" edition = "2021" license = "MIT" authors = ["Paul Makles "] @@ -21,7 +21,7 @@ async-std = { version = "1.8.0", features = ["attributes"] } [dependencies] # Core -revolt-result = { version = "0.8.7", path = "../result" } +revolt-result = { version = "0.8.8", path = "../result" } # Utility auto_ops = "0.3.0" diff --git a/crates/core/presence/Cargo.toml b/crates/core/presence/Cargo.toml index 7ecb776a..2e53c3e7 100644 --- a/crates/core/presence/Cargo.toml +++ b/crates/core/presence/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-presence" -version = "0.8.7" +version = "0.8.8" edition = "2021" license = "AGPL-3.0-or-later" authors = ["Paul Makles "] @@ -15,6 +15,9 @@ redis-is-patched = [] # Async async-std = { version = "1.8.0", features = ["attributes"] } +# Config for loading Redis URI +revolt-config = { version = "0.8.8", path = "../config" } + [dependencies] # Utility log = "0.4.17" diff --git a/crates/core/presence/src/lib.rs b/crates/core/presence/src/lib.rs index f0c9e6ac..4c5ffda5 100644 --- a/crates/core/presence/src/lib.rs +++ b/crates/core/presence/src/lib.rs @@ -197,6 +197,8 @@ mod tests { #[async_std::test] async fn it_works() { + revolt_config::config().await; + // Clear the region before we start the tests: clear_region(None).await; diff --git a/crates/core/result/Cargo.toml b/crates/core/result/Cargo.toml index 816f5baa..90ffd639 100644 --- a/crates/core/result/Cargo.toml +++ b/crates/core/result/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-result" -version = "0.8.7" +version = "0.8.8" edition = "2021" license = "MIT" authors = ["Paul Makles "] diff --git a/crates/daemons/crond/Cargo.toml b/crates/daemons/crond/Cargo.toml index 413a810e..2c55f2f7 100644 --- a/crates/daemons/crond/Cargo.toml +++ b/crates/daemons/crond/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-crond" -version = "0.8.7" +version = "0.8.8" license = "AGPL-3.0-or-later" authors = ["Paul Makles "] edition = "2021" @@ -16,7 +16,7 @@ log = "0.4" tokio = { version = "1" } # Core -revolt-database = { version = "0.8.7", path = "../../core/database" } -revolt-result = { version = "0.8.7", path = "../../core/result" } -revolt-config = { version = "0.8.7", path = "../../core/config" } -revolt-files = { version = "0.8.7", path = "../../core/files" } +revolt-database = { version = "0.8.8", path = "../../core/database" } +revolt-result = { version = "0.8.8", path = "../../core/result" } +revolt-config = { version = "0.8.8", path = "../../core/config" } +revolt-files = { version = "0.8.8", path = "../../core/files" } diff --git a/crates/daemons/pushd/Cargo.toml b/crates/daemons/pushd/Cargo.toml index 7800c4fd..50db680b 100644 --- a/crates/daemons/pushd/Cargo.toml +++ b/crates/daemons/pushd/Cargo.toml @@ -1,19 +1,19 @@ [package] name = "revolt-pushd" -version = "0.8.7" +version = "0.8.8" edition = "2021" license = "AGPL-3.0-or-later" [dependencies] -revolt-result = { version = "0.8.7", path = "../../core/result" } -revolt-config = { version = "0.8.7", path = "../../core/config", features = [ +revolt-result = { version = "0.8.8", path = "../../core/result" } +revolt-config = { version = "0.8.8", path = "../../core/config", features = [ "report-macros", ] } -revolt-database = { version = "0.8.7", path = "../../core/database" } -revolt-models = { version = "0.8.7", path = "../../core/models", features = [ +revolt-database = { version = "0.8.8", path = "../../core/database" } +revolt-models = { version = "0.8.8", path = "../../core/models", features = [ "validator", ] } -revolt-presence = { version = "0.8.7", path = "../../core/presence", features = [ +revolt-presence = { version = "0.8.8", path = "../../core/presence", features = [ "redis-is-patched", ] } diff --git a/crates/delta/Cargo.toml b/crates/delta/Cargo.toml index 9663c410..20844b95 100644 --- a/crates/delta/Cargo.toml +++ b/crates/delta/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-delta" -version = "0.8.7" +version = "0.8.8" license = "AGPL-3.0-or-later" authors = ["Paul Makles "] edition = "2018" diff --git a/crates/delta/fixtures/server_with_many_roles.json b/crates/delta/fixtures/server_with_many_roles.json new file mode 100644 index 00000000..49cfe276 --- /dev/null +++ b/crates/delta/fixtures/server_with_many_roles.json @@ -0,0 +1,114 @@ +[ + { + "_object_type": "User", + "_id": "__ID:0__", + "username": "Owner", + "last_acknowledged_policy_change": "2025-06-07T04:04:48+0000", + "discriminator": "0001" + }, + { + "_object_type": "User", + "_id": "__ID:1__", + "username": "Moderator", + "last_acknowledged_policy_change": "2025-06-07T04:04:48+0000", + "discriminator": "0001" + }, + { + "_object_type": "User", + "_id": "__ID:2__", + "username": "User", + "last_acknowledged_policy_change": "2025-06-07T04:04:48+0000", + "discriminator": "0001" + }, + { + "_object_type": "Channel", + "_id": "__ID:3__", + "channel_type": "TextChannel", + "name": "General", + "server": "__ID:4__", + "default_permissions": { + "a": 0, + "d": 1048576 + }, + "role_permissions": { + "__ID:5__": { + "a": 1048576, + "d": 0 + } + } + }, + { + "_object_type": "Server", + "_id": "__ID:4__", + "owner": "__ID:0__", + "name": "Server", + "channels": [ + "__ID:3__" + ], + "roles": { + "__ID:5__": { + "name": "Moderator", + "permissions": { + "a": 545270216, + "d": 0 + }, + "rank": 1 + }, + "__ID:6__": { + "name": "Owner", + "permissions": { + "a": 0, + "d": 0 + }, + "rank": 0 + }, + "__ID:7__": { + "name": "Lower Rank 1", + "permissions": { + "a": 0, + "d": 0 + }, + "rank": 2 + }, + "__ID:8__": { + "name": "Lower Rank 2", + "permissions": { + "a": 0, + "d": 0 + }, + "rank": 2 + } + }, + "default_permissions": 4000322560 + }, + { + "_object_type": "ServerMember", + "_id": { + "user": "__ID:0__", + "server": "__ID:4__" + }, + "roles": [ + "__ID:6__" + ], + "joined_at": 1698318340195 + }, + { + "_object_type": "ServerMember", + "_id": { + "user": "__ID:1__", + "server": "__ID:4__" + }, + "roles": [ + "__ID:5__" + ], + "joined_at": 1698318340195 + }, + { + "_object_type": "ServerMember", + "_id": { + "user": "__ID:2__", + "server": "__ID:4__" + }, + "joined_at": 1698318340195 + } +] \ No newline at end of file diff --git a/crates/delta/src/routes/bots/fetch_public.rs b/crates/delta/src/routes/bots/fetch_public.rs index 5363772c..6fa4f792 100644 --- a/crates/delta/src/routes/bots/fetch_public.rs +++ b/crates/delta/src/routes/bots/fetch_public.rs @@ -16,7 +16,7 @@ pub async fn fetch_public_bot( target: Reference, ) -> Result> { let bot = db.fetch_bot(&target.id).await?; - if !bot.public && user.map_or(true, |x| x.id != bot.owner) { + if !bot.public && user.is_none_or(|x| x.id != bot.owner) { return Err(create_error!(NotFound)); } diff --git a/crates/delta/src/routes/channels/message_send.rs b/crates/delta/src/routes/channels/message_send.rs index 4f8c625b..0db142bb 100644 --- a/crates/delta/src/routes/channels/message_send.rs +++ b/crates/delta/src/routes/channels/message_send.rs @@ -84,7 +84,8 @@ pub async fn message_send( // Create model user / members let model_user = user .clone() - .into_known_static(revolt_presence::is_online(&user.id).await).await; + .into_known_static(revolt_presence::is_online(&user.id).await) + .await; let model_member: Option = query .member_ref() @@ -495,7 +496,7 @@ mod test { 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 + let (role_id, _role) = harness .new_role( &server, 1, diff --git a/crates/delta/src/routes/policy/acknowledge_policy_changes.rs b/crates/delta/src/routes/policy/acknowledge_policy_changes.rs index 062dc32c..8b69efda 100644 --- a/crates/delta/src/routes/policy/acknowledge_policy_changes.rs +++ b/crates/delta/src/routes/policy/acknowledge_policy_changes.rs @@ -1,11 +1,7 @@ -use revolt_database::{events::client::EventV1, Database, Report, Snapshot, SnapshotContent, User}; -use revolt_models::v0::{ReportStatus, ReportedContent}; -use revolt_result::{create_error, Result}; -use serde::Deserialize; -use ulid::Ulid; -use validator::Validate; +use revolt_database::{Database, User}; +use revolt_result::Result; -use rocket::{serde::json::Json, State}; +use rocket::State; /// # Acknowledge Policy Changes /// diff --git a/crates/delta/src/routes/root.rs b/crates/delta/src/routes/root.rs index ffdbdee2..aa3293cd 100644 --- a/crates/delta/src/routes/root.rs +++ b/crates/delta/src/routes/root.rs @@ -153,7 +153,6 @@ pub async fn root() -> Result> { } #[cfg(test)] -#[cfg(feature = "FIXME: THIS TEST CAUSES cargo test TO SEG FAULT, I HAVE NO CLUE HOW")] mod test { use crate::rocket; use rocket::http::Status; diff --git a/crates/delta/src/routes/servers/mod.rs b/crates/delta/src/routes/servers/mod.rs index a7553625..066fd32a 100644 --- a/crates/delta/src/routes/servers/mod.rs +++ b/crates/delta/src/routes/servers/mod.rs @@ -18,6 +18,7 @@ mod roles_create; mod roles_delete; mod roles_edit; mod roles_fetch; +mod roles_edit_positions; mod server_ack; mod server_create; mod server_delete; @@ -47,6 +48,7 @@ pub fn routes() -> (Vec, OpenApi) { roles_delete::delete, permissions_set::set_role_permission, permissions_set_default::set_default_permissions, - emoji_list::list_emoji + emoji_list::list_emoji, + roles_edit_positions::edit_role_ranks ] } diff --git a/crates/delta/src/routes/servers/roles_edit.rs b/crates/delta/src/routes/servers/roles_edit.rs index 9d3f85a2..db0fca9d 100644 --- a/crates/delta/src/routes/servers/roles_edit.rs +++ b/crates/delta/src/routes/servers/roles_edit.rs @@ -13,7 +13,7 @@ use validator::Validate; /// /// Edit a role by its id. #[openapi(tag = "Server Permissions")] -#[patch("//roles/", data = "")] +#[patch("//roles/", data = "", rank = 1)] pub async fn edit( db: &State, voice_client: &State, @@ -47,22 +47,14 @@ pub async fn edit( name, colour, hoist, - rank, remove, + .. } = data; - // Prevent us from moving a role above other roles - if let Some(rank) = &rank { - if rank <= &member_rank { - return Err(create_error!(NotElevated)); - } - } - let partial = PartialRole { name, colour, hoist, - rank, ..Default::default() }; diff --git a/crates/delta/src/routes/servers/roles_edit_positions.rs b/crates/delta/src/routes/servers/roles_edit_positions.rs new file mode 100644 index 00000000..59614162 --- /dev/null +++ b/crates/delta/src/routes/servers/roles_edit_positions.rs @@ -0,0 +1,177 @@ +use revolt_database::{ + util::{permissions::DatabasePermissionQuery, reference::Reference}, + Database, User, +}; +use revolt_models::v0; +use revolt_permissions::{calculate_server_permissions, ChannelPermission}; +use revolt_result::{create_error, Result}; +use rocket::{serde::json::Json, State}; + +/// # Edits server roles ranks +/// +/// Edit's server role's ranks. +#[openapi(tag = "Server Permissions")] +#[patch("//roles/ranks", data = "")] +pub async fn edit_role_ranks( + db: &State, + user: User, + target: Reference, + data: Json, +) -> Result> { + let data = data.into_inner(); + + let mut server = target.as_server(db).await?; + let mut query = DatabasePermissionQuery::new(db, &user).server(&server); + calculate_server_permissions(&mut query) + .await + .throw_if_lacking_channel_permission(ChannelPermission::ManageRole)?; + + let existing_order = server + .ordered_roles() + .into_iter() + .map(|(id, _)| id) + .collect::>(); + + let new_order = data.ranks.clone().into_iter().collect::>(); + + // Verify all roles are in the new ordering + if data.ranks.len() != server.roles.len() + || !server.roles.iter().all(|(id, _)| data.ranks.contains(id)) + { + return Err(create_error!(InvalidOperation)); + } + + // Don't have to check what the user can't modify if they are the server owner + if server.owner != user.id { + let member_top_rank = query.get_member_rank(); + + if server + .roles + .iter() + // Find all roles above the member which we should not be able to reorder + .filter(|(_, role)| { + if let Some(top_rank) = member_top_rank { + role.rank <= top_rank + } else { + true + } + }) + // Check if user is trying to reorder roles they can't reorder (as found previously) + .any(|(id, _)| { + existing_order + .iter() + .position(|existing_id| id == existing_id) + != new_order.iter().position(|new_id| id == new_id) + }) + { + return Err(create_error!(NotElevated)); + } + } + + server.set_role_ordering(db, new_order).await?; + + Ok(Json(server.into())) +} + +#[cfg(test)] +mod test { + use revolt_database::fixture; + use revolt_models::v0; + use rocket::http::{ContentType, Header, Status}; + + use crate::util::test::TestHarness; + + #[rocket::async_test] + async fn edit_role_rankings() { + let harness = TestHarness::new().await; + + fixture!(harness.db, "server_with_many_roles", + owner user 0 + moderator user 1 + server server 4); + + // Moderator can re-order the roles below them + let (_, moderator_session) = harness.account_from_user(moderator.id).await; + let mut target_order: Vec = server + .ordered_roles() + .into_iter() + .map(|(id, _)| id) + .collect(); + + // Swap the two lower ranked roles + target_order.swap(2, 3); + + let response = harness + .client + .patch(format!("/servers/{}/roles/ranks", server.id)) + .header(ContentType::JSON) + .body( + json!(v0::DataEditRoleRanks { + ranks: target_order.clone() + }) + .to_string(), + ) + .header(Header::new( + "x-session-token", + moderator_session.token.to_string(), + )) + .dispatch() + .await; + + assert_eq!(response.status(), Status::Ok); + drop(response); + + // ... but not above them + let mut target_order: Vec = server + .ordered_roles() + .into_iter() + .map(|(id, _)| id) + .collect(); + + // Swap the two lower ranked roles + target_order.swap(0, 1); + + let response = harness + .client + .patch(format!("/servers/{}/roles/ranks", server.id)) + .header(ContentType::JSON) + .body( + json!(v0::DataEditRoleRanks { + ranks: target_order.clone() + }) + .to_string(), + ) + .header(Header::new( + "x-session-token", + moderator_session.token.to_string(), + )) + .dispatch() + .await; + + assert_eq!(response.status(), Status::Forbidden); + drop(response); + + // The owner can set any order they want + let (_, owner_session) = harness.account_from_user(owner.id).await; + + let response = harness + .client + .patch(format!("/servers/{}/roles/ranks", server.id)) + .header(ContentType::JSON) + .body( + json!(v0::DataEditRoleRanks { + ranks: target_order.clone() + }) + .to_string(), + ) + .header(Header::new( + "x-session-token", + owner_session.token.to_string(), + )) + .dispatch() + .await; + + assert_eq!(response.status(), Status::Ok); + drop(response); + } +} diff --git a/crates/delta/src/routes/webhooks/webhook_execute.rs b/crates/delta/src/routes/webhooks/webhook_execute.rs index e43ee934..4d64688d 100644 --- a/crates/delta/src/routes/webhooks/webhook_execute.rs +++ b/crates/delta/src/routes/webhooks/webhook_execute.rs @@ -36,11 +36,11 @@ pub async fn webhook_execute( let permissions: PermissionValue = webhook.permissions.into(); permissions.throw_if_lacking_channel_permission(ChannelPermission::SendMessage)?; - if data.attachments.as_ref().map_or(false, |v| !v.is_empty()) { + if data.attachments.as_ref().is_some_and(|v| !v.is_empty()) { permissions.throw_if_lacking_channel_permission(ChannelPermission::UploadFiles)?; } - if data.embeds.as_ref().map_or(false, |v| !v.is_empty()) { + if data.embeds.as_ref().is_some_and(|v| !v.is_empty()) { permissions.throw_if_lacking_channel_permission(ChannelPermission::SendEmbeds)?; } diff --git a/crates/delta/src/routes/webhooks/webhook_execute_github.rs b/crates/delta/src/routes/webhooks/webhook_execute_github.rs index ae7ff40c..cde16548 100644 --- a/crates/delta/src/routes/webhooks/webhook_execute_github.rs +++ b/crates/delta/src/routes/webhooks/webhook_execute_github.rs @@ -621,7 +621,7 @@ pub struct Event { #[derive(Debug, JsonSchema)] pub struct EventHeader<'r>(pub &'r str); -impl<'r> std::ops::Deref for EventHeader<'r> { +impl std::ops::Deref for EventHeader<'_> { type Target = str; fn deref(&self) -> &Self::Target { diff --git a/crates/delta/src/util/ratelimiter.rs b/crates/delta/src/util/ratelimiter.rs index 95952918..5527ee42 100644 --- a/crates/delta/src/util/ratelimiter.rs +++ b/crates/delta/src/util/ratelimiter.rs @@ -109,8 +109,6 @@ fn resolve_bucket<'r>(request: &'r rocket::Request<'_>) -> (&'r str, Option<&'r }; if let Some(segment) = segment { - let resource = resource; - let method = request.method(); match (segment, resource, method) { ("users", target, Method::Patch) => ("user_edit", target), @@ -254,7 +252,7 @@ impl<'r> FromRequest<'r> for Ratelimiter { } } -impl<'r> OpenApiFromRequest<'r> for Ratelimiter { +impl OpenApiFromRequest<'_> for Ratelimiter { fn from_request_input( _gen: &mut OpenApiGenerator, _name: String, diff --git a/crates/delta/src/util/test.rs b/crates/delta/src/util/test.rs index 31878400..b90a1a5c 100644 --- a/crates/delta/src/util/test.rs +++ b/crates/delta/src/util/test.rs @@ -1,5 +1,5 @@ use authifier::{ - models::{Account, Session}, + models::{Account, EmailVerification, Session}, Authifier, }; use futures::StreamExt; @@ -83,30 +83,41 @@ impl TestHarness { } pub async fn new_user(&self) -> (Account, Session, User) { - let account = Account::new( - &self.authifier, - format!("{}@revolt.chat", TestHarness::rand_string()), - "password".to_string(), - false, - ) - .await - .expect("`Account`"); + let user = User::create(&self.db, TestHarness::rand_string(), None, None) + .await + .expect("`User`"); + + let (account, session) = self.account_from_user(user.id.clone()).await; + + (account, session, user) + } + + pub async fn account_from_user(&self, id: String) -> (Account, Session) { + let account = Account { + id, + email: format!("{}@revolt.chat", TestHarness::rand_string()), + password: Default::default(), + email_normalised: Default::default(), + deletion: None, + disabled: false, + lockout: None, + mfa: Default::default(), + password_reset: None, + verification: EmailVerification::Verified, + }; + + self.authifier + .database + .save_account(&account) + .await + .expect("`Account`"); let session = account .create_session(&self.authifier, String::new()) .await .expect("`Session`"); - let user = User::create( - &self.db, - TestHarness::rand_string(), - account.id.to_string(), - None, - ) - .await - .expect("`User`"); - - (account, session, user) + (account, session) } pub async fn new_server(&self, user: &User) -> (Server, Vec) { @@ -199,10 +210,7 @@ impl TestHarness { (channel.clone(), member, message) } - pub async fn with_session<'c>( - session: Session, - request: LocalRequest<'c>, - ) -> LocalResponse<'c> { + pub async fn with_session(session: Session, request: LocalRequest<'_>) -> LocalResponse<'_> { request .header(Header::new("x-session-token", session.token.to_string())) .dispatch() diff --git a/crates/services/autumn/Cargo.toml b/crates/services/autumn/Cargo.toml index 36446c01..464da056 100644 --- a/crates/services/autumn/Cargo.toml +++ b/crates/services/autumn/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-autumn" -version = "0.8.7" +version = "0.8.8" edition = "2021" license = "AGPL-3.0-or-later" @@ -43,12 +43,12 @@ tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } # Core crates -revolt-files = { version = "0.8.7", path = "../../core/files" } -revolt-config = { version = "0.8.7", path = "../../core/config" } -revolt-database = { version = "0.8.7", path = "../../core/database", features = [ +revolt-files = { version = "0.8.8", path = "../../core/files" } +revolt-config = { version = "0.8.8", path = "../../core/config" } +revolt-database = { version = "0.8.8", path = "../../core/database", features = [ "axum-impl", ] } -revolt-result = { version = "0.8.7", path = "../../core/result", features = [ +revolt-result = { version = "0.8.8", path = "../../core/result", features = [ "utoipa", "axum", ] } diff --git a/crates/services/january/Cargo.toml b/crates/services/january/Cargo.toml index 3566d2a0..80b5e522 100644 --- a/crates/services/january/Cargo.toml +++ b/crates/services/january/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-january" -version = "0.8.7" +version = "0.8.8" edition = "2021" license = "AGPL-3.0-or-later" @@ -32,13 +32,13 @@ tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } # Core crates -revolt-config = { version = "0.8.7", path = "../../core/config" } -revolt-models = { version = "0.8.7", path = "../../core/models" } -revolt-result = { version = "0.8.7", path = "../../core/result", features = [ +revolt-config = { version = "0.8.8", path = "../../core/config" } +revolt-models = { version = "0.8.8", path = "../../core/models" } +revolt-result = { version = "0.8.8", path = "../../core/result", features = [ "utoipa", "axum", ] } -revolt-files = { version = "0.8.7", path = "../../core/files" } +revolt-files = { version = "0.8.8", path = "../../core/files" } # Axum / web server axum = { version = "0.7.5" } diff --git a/crates/services/january/src/website_embed.rs b/crates/services/january/src/website_embed.rs index d6ee85d1..49ac2846 100644 --- a/crates/services/january/src/website_embed.rs +++ b/crates/services/january/src/website_embed.rs @@ -327,7 +327,7 @@ pub async fn populate_special(original_url: String, metadata: &mut WebsiteMetada Special::Twitch { .. } => metadata.colour = Some("#7B68EE".to_string()), Special::Lightspeed { .. } => metadata.colour = Some("#7445D9".to_string()), Special::Spotify { .. } => metadata.colour = Some("#1ABC9C".to_string()), - Special::Soundcloud { .. } => metadata.colour = Some("#FF7F50".to_string()), + Special::Soundcloud => metadata.colour = Some("#FF7F50".to_string()), Special::AppleMusic { .. } => metadata.colour = Some("#FA233B".to_string()), _ => {} } diff --git a/justfile b/justfile index e7bd0f00..74c7082d 100644 --- a/justfile +++ b/justfile @@ -1,7 +1,7 @@ publish: cargo publish --package revolt-parser - cargo publish --package revolt-config cargo publish --package revolt-result + cargo publish --package revolt-config cargo publish --package revolt-files cargo publish --package revolt-permissions cargo publish --package revolt-models