diff --git a/Cargo.lock b/Cargo.lock index d69ba39..458d6c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -36,7 +36,7 @@ dependencies = [ "cfg-if", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -50,9 +50,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -110,19 +110,20 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "3.0.6" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", + "once_cell", "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.93" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" +checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" [[package]] name = "arraydeque" @@ -155,25 +156,25 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] [[package]] name = "async-trait" -version = "0.1.83" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] [[package]] name = "async-utility" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a349201d80b4aa18d17a34a182bdd7f8ddf845e9e57d2ea130a12e10ef1e3a47" +checksum = "a34a3b57207a7a1007832416c3e4862378c8451b4e8e093e436f48c2d3d2c151" dependencies = [ "futures-util", "gloo-timers", @@ -183,18 +184,18 @@ dependencies = [ [[package]] name = "async-wsocket" -version = "0.10.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d50cb541e6d09e119e717c64c46ed33f49be7fa592fa805d56c11d6a7ff093c" +checksum = "197c8c4d501d615e193e548ff0225925306b1f413a0f27f0b0952367ff25e41c" dependencies = [ "async-utility", "futures", "futures-util", "js-sys", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tokio-socks", - "tokio-tungstenite 0.24.0", + "tokio-tungstenite 0.26.2", "url", "wasm-bindgen", "web-sys", @@ -226,12 +227,9 @@ dependencies = [ [[package]] name = "atomic-destructor" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d919cb60ba95c87ba42777e9e246c4e8d658057299b437b7512531ce0a09a23" -dependencies = [ - "tracing", -] +checksum = "ef49f5882e4b6afaac09ad239a4f8c70a24b8f2b0897edb1f706008efd109cf4" [[package]] name = "atomic-waker" @@ -258,7 +256,7 @@ dependencies = [ "futures-util", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.31", + "hyper 0.14.32", "itoa", "matchit", "memchr", @@ -268,7 +266,7 @@ dependencies = [ "rustversion", "serde", "sync_wrapper 0.1.2", - "tower", + "tower 0.4.13", "tower-layer", "tower-service", ] @@ -311,16 +309,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" -[[package]] -name = "base58ck" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f" -dependencies = [ - "bitcoin-internals 0.3.0", - "bitcoin_hashes 0.14.0", -] - [[package]] name = "base64" version = "0.21.7" @@ -362,62 +350,25 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "bitcoin" -version = "0.32.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6bc65742dea50536e35ad42492b234c27904a27f0abdcbce605015cb4ea026" -dependencies = [ - "base58ck", - "bech32", - "bitcoin-internals 0.3.0", - "bitcoin-io", - "bitcoin-units", - "bitcoin_hashes 0.14.0", - "hex-conservative 0.2.1", - "hex_lit", - "secp256k1", - "serde", -] - [[package]] name = "bitcoin-internals" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" -[[package]] -name = "bitcoin-internals" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bdbe14aa07b06e6cfeffc529a1f099e5fbe249524f8125358604df99a4bed2" -dependencies = [ - "serde", -] - [[package]] name = "bitcoin-io" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" -[[package]] -name = "bitcoin-units" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5285c8bcaa25876d07f37e3d30c303f2609179716e11d688f51e8f1fe70063e2" -dependencies = [ - "bitcoin-internals 0.3.0", - "serde", -] - [[package]] name = "bitcoin_hashes" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" dependencies = [ - "bitcoin-internals 0.2.0", + "bitcoin-internals", "hex-conservative 0.1.2", ] @@ -440,9 +391,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" dependencies = [ "serde", ] @@ -467,15 +418,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytemuck" -version = "1.20.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" [[package]] name = "byteorder" @@ -485,9 +436,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "cbc" @@ -500,9 +451,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.2" +version = "1.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc" +checksum = "c736e259eea577f443d5c86c304f9f4ae0295c43f3ba05c21f1d66b5f06001af" dependencies = [ "shlex", ] @@ -539,9 +490,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -575,9 +526,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.21" +version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767" dependencies = [ "clap_builder", "clap_derive", @@ -585,33 +536,33 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.21" +version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863" dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.1", ] [[package]] name = "clap_derive" -version = "4.5.18" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] [[package]] name = "clap_lex" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "colorchoice" @@ -630,20 +581,20 @@ dependencies = [ [[package]] name = "config" -version = "0.14.1" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68578f196d2a33ff61b27fae256c3164f65e36382648e30666dde05b8cc9dfdf" +checksum = "8cf9dc8d4ef88e27a8cb23e85cb116403dedd57f7971964dc4b18ccead548901" dependencies = [ "async-trait", "convert_case", "json5", - "nom", "pathdiff", "ron", "rust-ini", "serde", "serde_json", "toml", + "winnow", "yaml-rust2", ] @@ -668,7 +619,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom", + "getrandom 0.2.15", "once_cell", "tiny-keccak", ] @@ -711,9 +662,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -735,24 +686,24 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-bigint" @@ -761,7 +712,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", "subtle", "zeroize", ] @@ -773,15 +724,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", "typenum", ] [[package]] name = "darling" -version = "0.20.10" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" dependencies = [ "darling_core", "darling_macro", @@ -789,34 +740,34 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim", - "syn", + "strsim 0.10.0", + "syn 1.0.109", ] [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "der" @@ -836,7 +787,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", - "serde", ] [[package]] @@ -865,11 +815,11 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b035a542cf7abf01f2e3c4d5a7acbaebfefe120ae4efc7bde3df98186e4b8af7" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn", + "syn 2.0.98", ] [[package]] @@ -892,7 +842,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] [[package]] @@ -910,6 +860,12 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +[[package]] +name = "dyn-clone" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" + [[package]] name = "ecdsa" version = "0.16.9" @@ -926,9 +882,9 @@ dependencies = [ [[package]] name = "either" -version = "1.13.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d" dependencies = [ "serde", ] @@ -946,7 +902,7 @@ dependencies = [ "generic-array", "group", "pkcs8", - "rand_core", + "rand_core 0.6.4", "sec1", "subtle", "zeroize", @@ -992,9 +948,9 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" @@ -1019,9 +975,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ "concurrent-queue", "parking", @@ -1030,9 +986,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fedimint-tonic-lnd" @@ -1042,7 +998,7 @@ checksum = "df03ca33b5116de3051c1e233fe341e23b04c4913c7b16042497924559bc2a2e" dependencies = [ "hex", "http-body 0.4.6", - "hyper 0.14.31", + "hyper 0.14.32", "hyper-rustls 0.24.2", "prost", "rustls 0.21.12", @@ -1051,7 +1007,7 @@ dependencies = [ "tokio-stream", "tonic", "tonic-build", - "tower", + "tower 0.4.13", ] [[package]] @@ -1060,7 +1016,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -1103,9 +1059,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" [[package]] name = "foreign-types" @@ -1180,7 +1136,7 @@ checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" dependencies = [ "futures-core", "lock_api", - "parking_lot 0.12.3", + "parking_lot", ] [[package]] @@ -1251,10 +1207,22 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", +] + [[package]] name = "gimli" version = "0.31.1" @@ -1263,15 +1231,15 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "gloo-timers" -version = "0.2.6" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" dependencies = [ "futures-channel", "futures-core", @@ -1286,7 +1254,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -1302,7 +1270,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.6.0", + "indexmap 2.7.1", "slab", "tokio", "tokio-util", @@ -1311,17 +1279,17 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.1.0", - "indexmap 2.6.0", + "http 1.2.0", + "indexmap 2.7.1", "slab", "tokio", "tokio-util", @@ -1357,20 +1325,20 @@ dependencies = [ [[package]] name = "hashlink" -version = "0.8.4" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" dependencies = [ "hashbrown 0.14.5", ] [[package]] name = "hashlink" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.14.5", + "hashbrown 0.15.2", ] [[package]] @@ -1412,12 +1380,6 @@ dependencies = [ "arrayvec", ] -[[package]] -name = "hex_lit" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" - [[package]] name = "hkdf" version = "0.12.4" @@ -1438,11 +1400,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1469,9 +1431,9 @@ dependencies = [ [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -1496,7 +1458,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.1.0", + "http 1.2.0", ] [[package]] @@ -1507,16 +1469,16 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.9.5" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "httpdate" @@ -1532,9 +1494,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.31" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", @@ -1556,15 +1518,15 @@ dependencies = [ [[package]] name = "hyper" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.7", - "http 1.1.0", + "h2 0.4.8", + "http 1.2.0", "http-body 1.0.1", "httparse", "itoa", @@ -1582,7 +1544,7 @@ checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http 0.2.12", - "hyper 0.14.31", + "hyper 0.14.32", "rustls 0.21.12", "tokio", "tokio-rustls 0.24.1", @@ -1590,18 +1552,18 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.3" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", - "http 1.1.0", - "hyper 1.5.1", + "http 1.2.0", + "hyper 1.6.0", "hyper-util", - "rustls 0.23.19", + "rustls 0.23.23", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tower-service", ] @@ -1611,7 +1573,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper 0.14.31", + "hyper 0.14.32", "pin-project-lite", "tokio", "tokio-io-timeout", @@ -1625,7 +1587,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.5.1", + "hyper 1.6.0", "hyper-util", "native-tls", "tokio", @@ -1642,9 +1604,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", - "hyper 1.5.1", + "hyper 1.6.0", "pin-project-lite", "socket2", "tokio", @@ -1790,7 +1752,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] [[package]] @@ -1833,9 +1795,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.6.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -1850,9 +1812,9 @@ checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb" [[package]] name = "inout" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "block-padding", "generic-array", @@ -1872,28 +1834,25 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.10.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "ipnetwork" -version = "0.20.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" -dependencies = [ - "serde", -] +checksum = "cf370abdafd54d13e54a620e8c3e1145f28e46cc9d704bc6d94414559df41763" [[package]] name = "is-terminal" -version = "0.4.13" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +checksum = "e19b23d53f35ce9f56aebc7d1bb4e6ac1e9c0db7ac85c8d1760c04379edced37" dependencies = [ "hermit-abi 0.4.0", "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1919,10 +1878,11 @@ checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -1948,9 +1908,9 @@ dependencies = [ [[package]] name = "lettre" -version = "0.11.10" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0161e452348e399deb685ba05e55ee116cae9410f4f51fe42d597361444521d9" +checksum = "5d476fe7a4a798f392ce34947aa7d53d981127e37523c5251da3c927f7fa901f" dependencies = [ "async-trait", "base64 0.22.1", @@ -1976,9 +1936,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.167" +version = "0.2.170" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" +checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" [[package]] name = "libm" @@ -1992,16 +1952,15 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" dependencies = [ - "cc", "pkg-config", "vcpkg", ] [[package]] name = "libssh2-sys" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee" +checksum = "220e4f05ad4a218192533b300327f5150e809b54c4ec83b5a1d91833601811b9" dependencies = [ "cc", "libc", @@ -2013,9 +1972,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.20" +version = "1.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" +checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa" dependencies = [ "cc", "libc", @@ -2025,9 +1984,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "litemap" @@ -2053,10 +2012,12 @@ dependencies = [ "nostr", "nostr-sdk", "pretty_env_logger", - "rand", + "rand 0.9.0", "reqwest", "rocket", + "rocket_okapi", "rocket_ws", + "schemars", "serde", "serde_json", "ssh-key", @@ -2073,8 +2034,6 @@ dependencies = [ "anyhow", "async-trait", "chrono", - "serde", - "serde_with", "sqlx", "url", ] @@ -2091,9 +2050,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" [[package]] name = "loom" @@ -2110,15 +2069,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "lru" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" -dependencies = [ - "hashbrown 0.15.2", -] - [[package]] name = "matchers" version = "0.1.0" @@ -2156,30 +2106,23 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" dependencies = [ "adler2", ] [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi 0.3.9", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -2192,7 +2135,7 @@ dependencies = [ "bytes", "encoding_rs", "futures-util", - "http 1.1.0", + "http 1.2.0", "httparse", "memchr", "mime", @@ -2210,9 +2153,9 @@ checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" [[package]] name = "native-tls" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ "libc", "log", @@ -2233,40 +2176,36 @@ checksum = "e664971378a3987224f7a0e10059782035e89899ae403718ee07de85bec42afe" [[package]] name = "negentropy" -version = "0.4.3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a88da9dd148bbcdce323dd6ac47d369b4769d4a3b78c6c52389b9269f77932" +checksum = "f0efe882e02d206d8d279c20eb40e03baf7cb5136a1476dc084a324fbc3ec42d" [[package]] name = "nom" -version = "7.1.3" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" dependencies = [ "memchr", - "minimal-lexical", ] [[package]] name = "nostr" -version = "0.37.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aad4b767bbed24ac5eb4465bfb83bc1210522eb99d67cf4e547ec2ec7e47786" +checksum = "d90b55eff1f0747d9e423972179672e1aacac3d3ccee4c1281147eaa90d6491e" dependencies = [ - "async-trait", "base64 0.22.1", "bech32", "bip39", - "bitcoin", + "bitcoin_hashes 0.14.0", "cbc", "chacha20", "chacha20poly1305", - "getrandom", + "getrandom 0.2.15", "instant", - "negentropy 0.3.1", - "negentropy 0.4.3", - "once_cell", "scrypt", + "secp256k1", "serde", "serde_json", "unicode-normalization", @@ -2275,49 +2214,41 @@ dependencies = [ [[package]] name = "nostr-database" -version = "0.37.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23696338d51e45cd44e061823847f4b0d1d362eca80d5033facf9c184149f72f" +checksum = "ce07b47c77b8e5a856727885fe0ae47b9aa53d8d853a2190dd479b5a0d6e4f52" dependencies = [ - "async-trait", - "lru", "nostr", - "thiserror", "tokio", - "tracing", ] [[package]] name = "nostr-relay-pool" -version = "0.37.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15fcc6e3f0ca54d0fc779009bc5f2684cea9147be3b6aa68a7d301ea590f95f5" +checksum = "211ac5bbdda1a8eec0c21814a838da832038767a5d354fe2fcc1ca438cae56fd" dependencies = [ "async-utility", "async-wsocket", "atomic-destructor", "negentropy 0.3.1", - "negentropy 0.4.3", + "negentropy 0.5.0", "nostr", "nostr-database", - "thiserror", "tokio", - "tokio-stream", "tracing", ] [[package]] name = "nostr-sdk" -version = "0.37.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "491221fc89b1aa189a0de640127127d68b4e7c5c1d44371b04d9a6d10694b5af" +checksum = "5baca581deb810a88bb51c54d1d7980f4506a64a3e9a19270829b406e47adf31" dependencies = [ "async-utility", - "atomic-destructor", "nostr", "nostr-database", "nostr-relay-pool", - "thiserror", "tokio", "tracing", ] @@ -2344,7 +2275,7 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand", + "rand 0.8.5", "smallvec", "zeroize", ] @@ -2397,18 +2328,30 @@ dependencies = [ [[package]] name = "object" -version = "0.36.5" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] -name = "once_cell" -version = "1.20.2" +name = "okapi" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "9a64853d7ab065474e87696f7601cee817d200e86c42e04004e005cb3e20c3c5" +dependencies = [ + "log", + "schemars", + "serde", + "serde_json", +] + +[[package]] +name = "once_cell" +version = "1.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "opaque-debug" @@ -2418,11 +2361,11 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.68" +version = "0.10.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "cfg-if", "foreign-types", "libc", @@ -2439,20 +2382,20 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.104" +version = "0.9.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd" dependencies = [ "cc", "libc", @@ -2490,9 +2433,9 @@ dependencies = [ [[package]] name = "p384" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" dependencies = [ "ecdsa", "elliptic-curve", @@ -2510,7 +2453,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "primeorder", - "rand_core", + "rand_core 0.6.4", "sha2", ] @@ -2520,17 +2463,6 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - [[package]] name = "parking_lot" version = "0.12.3" @@ -2538,21 +2470,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", - "parking_lot_core 0.9.10", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", + "parking_lot_core", ] [[package]] @@ -2563,7 +2481,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.7", + "redox_syscall", "smallvec", "windows-targets 0.52.6", ] @@ -2575,16 +2493,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" dependencies = [ "base64ct", - "rand_core", + "rand_core 0.6.4", "subtle", ] -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - [[package]] name = "pathdiff" version = "0.2.3" @@ -2621,7 +2533,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn", + "syn 2.0.98", ] [[package]] @@ -2641,20 +2553,20 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" +checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", - "thiserror", + "thiserror 2.0.11", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" +checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" dependencies = [ "pest", "pest_generator", @@ -2662,22 +2574,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" +checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] [[package]] name = "pest_meta" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" +checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" dependencies = [ "once_cell", "pest", @@ -2691,34 +2603,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.6.0", + "indexmap 2.7.1", ] [[package]] name = "pin-project" -version = "1.1.7" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.7" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] [[package]] name = "pin-project-lite" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -2776,7 +2688,7 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -2791,12 +2703,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.25" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" dependencies = [ "proc-macro2", - "syn", + "syn 2.0.98", ] [[package]] @@ -2810,9 +2722,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] @@ -2825,7 +2737,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", "version_check", "yansi", ] @@ -2857,7 +2769,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn", + "syn 2.0.98", "tempfile", ] @@ -2871,7 +2783,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] [[package]] @@ -2885,18 +2797,18 @@ dependencies = [ [[package]] name = "psm" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" +checksum = "f58e5423e24c18cc840e1c98370b3993c6649cd1678b4d24318bcf0a083cbe88" dependencies = [ "cc", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -2914,8 +2826,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.2", + "zerocopy 0.8.20", ] [[package]] @@ -2925,7 +2848,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.2", ] [[package]] @@ -2934,25 +2867,26 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", +] + +[[package]] +name = "rand_core" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a509b1a2ffbe92afab0e55c8fd99dea1c280e8171bd2d88682bb20bc41cbc2c" +dependencies = [ + "getrandom 0.3.1", + "zerocopy 0.8.20", ] [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "82b568323e98e49e2a0899dcee453dd679fae22d69adf9b11dd508d1549b7e2f" dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" -dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", ] [[package]] @@ -2972,7 +2906,7 @@ checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] [[package]] @@ -3021,21 +2955,21 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.9" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64 0.22.1", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.4.7", - "http 1.1.0", + "h2 0.4.8", + "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", - "hyper-rustls 0.27.3", + "hyper 1.6.0", + "hyper-rustls 0.27.5", "hyper-tls", "hyper-util", "ipnet", @@ -3054,6 +2988,7 @@ dependencies = [ "system-configuration", "tokio", "tokio-native-tls", + "tower 0.5.2", "tower-service", "url", "wasm-bindgen", @@ -3074,15 +3009,14 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "da5349ae27d3887ca812fb375b45a4fbb36d8d12d2df394968cd86e35683fe73" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", - "spin", "untrusted", "windows-sys 0.52.0", ] @@ -3101,14 +3035,14 @@ dependencies = [ "either", "figment", "futures", - "indexmap 2.6.0", + "indexmap 2.7.1", "log", "memchr", "multer", "num_cpus", - "parking_lot 0.12.3", + "parking_lot", "pin-project-lite", - "rand", + "rand 0.8.5", "ref-cast", "rocket_codegen", "rocket_http", @@ -3133,11 +3067,11 @@ checksum = "575d32d7ec1a9770108c879fc7c47815a80073f96ca07ff9525a94fcede1dd46" dependencies = [ "devise", "glob", - "indexmap 2.6.0", + "indexmap 2.7.1", "proc-macro2", "quote", "rocket_http", - "syn", + "syn 2.0.98", "unicode-xid", "version_check", ] @@ -3152,8 +3086,8 @@ dependencies = [ "either", "futures", "http 0.2.12", - "hyper 0.14.31", - "indexmap 2.6.0", + "hyper 0.14.32", + "indexmap 2.7.1", "log", "memchr", "pear", @@ -3169,6 +3103,34 @@ dependencies = [ "uncased", ] +[[package]] +name = "rocket_okapi" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "074297bec35db2fc7ebb6ade6a955b5566de66f83d9af5b5602a350a71bdef43" +dependencies = [ + "log", + "okapi", + "rocket", + "rocket_okapi_codegen", + "schemars", + "serde", + "serde_json", +] + +[[package]] +name = "rocket_okapi_codegen" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de9519ac276544ae734c067b57745cc1a0dc9506f3a7625918e89babffd9b101" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "rocket_http", + "syn 1.0.109", +] + [[package]] name = "rocket_ws" version = "0.1.1" @@ -3186,7 +3148,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ "base64 0.21.7", - "bitflags 2.6.0", + "bitflags 2.8.0", "serde", "serde_derive", ] @@ -3204,7 +3166,7 @@ dependencies = [ "num-traits", "pkcs1", "pkcs8", - "rand_core", + "rand_core 0.6.4", "sha2", "signature", "spki", @@ -3214,12 +3176,13 @@ dependencies = [ [[package]] name = "rust-ini" -version = "0.20.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0698206bcb8882bf2a9ecb4c1e7785db57ff052297085a6efd4fe42302068a" +checksum = "4e310ef0e1b6eeb79169a1171daf9abcb87a2e17c03bee2c4bb100b55c75409f" dependencies = [ "cfg-if", "ordered-multimap", + "trim-in-place", ] [[package]] @@ -3230,15 +3193,15 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustix" -version = "0.38.41" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3255,9 +3218,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.19" +version = "0.23.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1" +checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" dependencies = [ "once_cell", "ring", @@ -3287,9 +3250,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" [[package]] name = "rustls-webpki" @@ -3314,15 +3277,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "salsa20" @@ -3342,6 +3305,32 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "chrono", + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.98", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -3396,8 +3385,7 @@ version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" dependencies = [ - "bitcoin_hashes 0.14.0", - "rand", + "rand 0.8.5", "secp256k1-sys", "serde", ] @@ -3417,7 +3405,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation", "core-foundation-sys", "libc", @@ -3426,9 +3414,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.12.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -3436,31 +3424,41 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.215" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] name = "serde_json" -version = "1.0.133" +version = "1.0.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6" dependencies = [ - "indexmap 2.6.0", "itoa", "memchr", "ryu", @@ -3488,36 +3486,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_with" -version = "3.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" -dependencies = [ - "base64 0.22.1", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.6.0", - "serde", - "serde_derive", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "sha1" version = "0.10.6" @@ -3571,7 +3539,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -3585,9 +3553,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" dependencies = [ "serde", ] @@ -3621,21 +3589,11 @@ dependencies = [ "der", ] -[[package]] -name = "sqlformat" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" -dependencies = [ - "nom", - "unicode_categories", -] - [[package]] name = "sqlx" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93334716a037193fac19df402f8571269c84a00852f6a7066b5d2616dcd64d3e" +checksum = "4410e73b3c0d8442c5f99b425d7a435b5ee0ae4167b3196771dd3f7a01be745f" dependencies = [ "sqlx-core", "sqlx-macros", @@ -3646,38 +3604,32 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d8060b456358185f7d50c55d9b5066ad956956fddec42ee2e8567134a8936e" +checksum = "6a007b6936676aa9ab40207cde35daab0a04b823be8ae004368c0793b96a61e0" dependencies = [ - "atoi", - "byteorder", "bytes", "chrono", "crc", "crossbeam-queue", "either", "event-listener", - "futures-channel", "futures-core", "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.14.5", - "hashlink 0.9.1", - "hex", - "indexmap 2.6.0", + "hashbrown 0.15.2", + "hashlink 0.10.0", + "indexmap 2.7.1", "log", "memchr", "once_cell", - "paste", "percent-encoding", "serde", "serde_json", "sha2", "smallvec", - "sqlformat", - "thiserror", + "thiserror 2.0.11", "tokio", "tokio-stream", "tracing", @@ -3686,22 +3638,22 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657" +checksum = "3112e2ad78643fef903618d78cf0aec1cb3134b019730edb039b69eaf531f310" dependencies = [ "proc-macro2", "quote", "sqlx-core", "sqlx-macros-core", - "syn", + "syn 2.0.98", ] [[package]] name = "sqlx-macros-core" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1804e8a7c7865599c9c79be146dc8a9fd8cc86935fa641d3ea58e5f0688abaa5" +checksum = "4e9f90acc5ab146a99bf5061a7eb4976b573f560bc898ef3bf8435448dd5e7ad" dependencies = [ "dotenvy", "either", @@ -3717,7 +3669,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn", + "syn 2.0.98", "tempfile", "tokio", "url", @@ -3725,13 +3677,13 @@ dependencies = [ [[package]] name = "sqlx-mysql" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64bb4714269afa44aef2755150a0fc19d756fb580a67db8885608cf02f47d06a" +checksum = "4560278f0e00ce64938540546f59f590d60beee33fffbd3b9cd47851e5fff233" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.6.0", + "bitflags 2.8.0", "byteorder", "bytes", "chrono", @@ -3753,7 +3705,7 @@ dependencies = [ "memchr", "once_cell", "percent-encoding", - "rand", + "rand 0.8.5", "rsa", "serde", "sha1", @@ -3761,20 +3713,20 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 2.0.11", "tracing", "whoami", ] [[package]] name = "sqlx-postgres" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa91a732d854c5d7726349bb4bb879bb9478993ceb764247660aee25f67c2f8" +checksum = "c5b98a57f363ed6764d5b3a12bfedf62f07aa16e1856a7ddc2a0bb190a959613" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.6.0", + "bitflags 2.8.0", "byteorder", "chrono", "crc", @@ -3782,7 +3734,6 @@ dependencies = [ "etcetera", "futures-channel", "futures-core", - "futures-io", "futures-util", "hex", "hkdf", @@ -3793,23 +3744,23 @@ dependencies = [ "md-5", "memchr", "once_cell", - "rand", + "rand 0.8.5", "serde", "serde_json", "sha2", "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 2.0.11", "tracing", "whoami", ] [[package]] name = "sqlx-sqlite" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5b2cf34a45953bfd3daaf3db0f7a7878ab9b7a6b91b422d24a7a9e4c857b680" +checksum = "f85ca71d3a5b24e64e1d08dd8fe36c6c95c339a896cc33068148906784620540" dependencies = [ "atoi", "chrono", @@ -3859,7 +3810,7 @@ dependencies = [ "p256", "p384", "p521", - "rand_core", + "rand_core 0.6.4", "rsa", "sec1", "sha2", @@ -3872,14 +3823,14 @@ dependencies = [ [[package]] name = "ssh2" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7fe461910559f6d5604c3731d00d2aafc4a83d1665922e280f42f9a168d5455" +checksum = "2f84d13b3b8a0d4e91a2629911e951db1bb8671512f5c09d7d4ba34500ba68c8" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.8.0", "libc", "libssh2-sys", - "parking_lot 0.11.2", + "parking_lot", ] [[package]] @@ -3899,9 +3850,9 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "stacker" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" +checksum = "d9156ebd5870ef293bfb43f91c7a74528d363ec0d424afe24160ed5a4343d08a" dependencies = [ "cc", "cfg-if", @@ -3930,6 +3881,12 @@ dependencies = [ "unicode-properties", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.1" @@ -3944,9 +3901,20 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.89" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -3976,7 +3944,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] [[package]] @@ -3985,7 +3953,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation", "system-configuration-sys", ] @@ -4002,12 +3970,13 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.14.0" +version = "3.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" dependencies = [ "cfg-if", "fastrand", + "getrandom 0.3.1", "once_cell", "rustix", "windows-sys 0.59.0", @@ -4028,7 +3997,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +dependencies = [ + "thiserror-impl 2.0.11", ] [[package]] @@ -4039,7 +4017,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] @@ -4054,9 +4043,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -4075,9 +4064,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", @@ -4104,9 +4093,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -4119,9 +4108,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.41.1" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", @@ -4146,13 +4135,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] [[package]] @@ -4177,12 +4166,11 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls 0.23.19", - "rustls-pki-types", + "rustls 0.23.23", "tokio", ] @@ -4194,15 +4182,15 @@ checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f" dependencies = [ "either", "futures-util", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -4225,25 +4213,25 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.24.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" +checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", - "rustls 0.23.19", + "rustls 0.23.23", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.0", - "tungstenite 0.24.0", + "tokio-rustls 0.26.1", + "tungstenite 0.26.2", "webpki-roots", ] [[package]] name = "tokio-util" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -4254,9 +4242,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -4275,11 +4263,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", @@ -4300,7 +4288,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.31", + "hyper 0.14.32", "hyper-timeout", "percent-encoding", "pin-project", @@ -4310,7 +4298,7 @@ dependencies = [ "tokio", "tokio-rustls 0.24.1", "tokio-stream", - "tower", + "tower 0.4.13", "tower-layer", "tower-service", "tracing", @@ -4326,7 +4314,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn", + "syn 2.0.98", ] [[package]] @@ -4340,7 +4328,7 @@ dependencies = [ "indexmap 1.9.3", "pin-project", "pin-project-lite", - "rand", + "rand 0.8.5", "slab", "tokio", "tokio-util", @@ -4349,6 +4337,21 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 1.0.2", + "tokio", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" @@ -4381,7 +4384,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] [[package]] @@ -4407,9 +4410,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", @@ -4423,6 +4426,12 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "trim-in-place" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "343e926fc669bc8cde4fa3129ab681c63671bae288b1f1081ceee6d9d37904fc" + [[package]] name = "try-lock" version = "0.2.5" @@ -4438,42 +4447,41 @@ dependencies = [ "byteorder", "bytes", "data-encoding", - "http 1.1.0", + "http 1.2.0", "httparse", "log", "native-tls", - "rand", + "rand 0.8.5", "sha1", - "thiserror", + "thiserror 1.0.69", "url", "utf-8", ] [[package]] name = "tungstenite" -version = "0.24.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" +checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" dependencies = [ - "byteorder", "bytes", "data-encoding", - "http 1.1.0", + "http 1.2.0", "httparse", "log", - "rand", - "rustls 0.23.19", + "rand 0.9.0", + "rustls 0.23.23", "rustls-pki-types", "sha1", - "thiserror", + "thiserror 2.0.11", "utf-8", ] [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "ubyte" @@ -4502,15 +4510,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" [[package]] name = "unicode-normalization" @@ -4539,12 +4547,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "unicode_categories" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" - [[package]] name = "universal-hash" version = "0.5.1" @@ -4605,9 +4607,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "vcpkg" @@ -4636,6 +4638,15 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasite" version = "0.1.0" @@ -4644,47 +4655,48 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.98", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.45" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4692,28 +4704,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "web-sys" -version = "0.3.72" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -4721,9 +4736,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.7" +version = "0.26.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ "rustls-pki-types", ] @@ -4734,7 +4749,7 @@ version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" dependencies = [ - "redox_syscall 0.5.7", + "redox_syscall", "wasite", ] @@ -4977,13 +4992,22 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.20" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + [[package]] name = "write16" version = "1.0.0" @@ -4998,13 +5022,13 @@ checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "yaml-rust2" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8902160c4e6f2fb145dbe9d6760a75e3c9522d8bf796ed7047c85919ac7115f8" +checksum = "2a1a1c0bc9823338a3bdf8c61f994f23ac004c6fa32c08cd152984499b445e8d" dependencies = [ "arraydeque", "encoding_rs", - "hashlink 0.8.4", + "hashlink 0.9.1", ] [[package]] @@ -5036,7 +5060,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", "synstructure", ] @@ -5047,7 +5071,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde3bb8c68a8f3f1ed4ac9221aad6b10cece3e60a8e2ea54a6a2dec806d0084c" +dependencies = [ + "zerocopy-derive 0.8.20", ] [[package]] @@ -5058,7 +5091,18 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eea57037071898bf96a6da35fd626f4f27e9cee3ead2a6c703cf09d472b2e700" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] @@ -5078,7 +5122,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", "synstructure", ] @@ -5107,5 +5151,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] diff --git a/Cargo.toml b/Cargo.toml index 83c6c0a..f8ca2c8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,20 +15,22 @@ nostr-dm = ["dep:nostr-sdk"] lnvps_db = { path = "lnvps_db" } tokio = { version = "1.37.0", features = ["rt", "rt-multi-thread", "macros"] } anyhow = "1.0.83" -config = { version = "0.14.0", features = ["yaml"] } +config = { version = "0.15.8", features = ["yaml"] } log = "0.4.21" pretty_env_logger = "0.5.0" serde = { version = "1.0.213", features = ["derive"] } -reqwest = { version = "0.12.8" } serde_json = "1.0.132" +reqwest = { version = "0.12.8" } rocket = { version = "0.5.1", features = ["json"] } +rocket_okapi = { version = "0.9.0", features = ["swagger", "rapidoc"] } +schemars = { version = "0.8.22", features = ["chrono"] } chrono = { version = "0.4.38", features = ["serde"] } -nostr = { version = "0.37.0", default-features = false, features = ["std"] } +nostr = { version = "0.39.0", default-features = false, features = ["std"] } base64 = { version = "0.22.1", features = ["alloc"] } urlencoding = "2.1.3" fedimint-tonic-lnd = { version = "0.2.0", default-features = false, features = ["invoicesrpc"] } -ipnetwork = "0.20.0" -rand = "0.8.5" +ipnetwork = "0.21.1" +rand = "0.9.0" clap = { version = "4.5.21", features = ["derive"] } ssh2 = "0.9.4" ssh-key = "0.6.7" @@ -38,5 +40,7 @@ tokio-tungstenite = { version = "^0.21", features = ["native-tls"] } native-tls = "0.2.12" #nostr-dm -nostr-sdk = { version = "0.37.0", optional = true, default-features = false, features = ["nip44", "nip59"] } +nostr-sdk = { version = "0.39.0", optional = true, default-features = false, features = ["nip44", "nip59"] } + + diff --git a/email.html b/email.html index 9a89bbe..dde1adb 100644 --- a/email.html +++ b/email.html @@ -42,7 +42,7 @@
LNVPS - logo + logo

%%_MESSAGE_%%

diff --git a/lnvps_db/Cargo.toml b/lnvps_db/Cargo.toml index 77669df..b9fb5f2 100644 --- a/lnvps_db/Cargo.toml +++ b/lnvps_db/Cargo.toml @@ -10,8 +10,6 @@ mysql = ["sqlx/mysql"] [dependencies] anyhow = "1.0.83" sqlx = { version = "0.8.2", features = ["chrono", "migrate", "runtime-tokio"] } -serde = { version = "1.0.213", features = ["derive"] } -serde_with = { version = "3.11.0", features = ["macros", "hex"] } chrono = { version = "0.4.38", features = ["serde"] } async-trait = "0.1.83" url = "2.5.4" \ No newline at end of file diff --git a/lnvps_db/src/hydrate.rs b/lnvps_db/src/hydrate.rs deleted file mode 100644 index 9b2278d..0000000 --- a/lnvps_db/src/hydrate.rs +++ /dev/null @@ -1,63 +0,0 @@ -use crate::{LNVpsDb, Vm, VmIpAssignment, VmTemplate}; -use anyhow::Result; -use async_trait::async_trait; -use std::ops::Deref; - -#[async_trait] -pub trait Hydrate { - /// Load parent resources - async fn hydrate_up(&mut self, db: &D) -> Result<()>; - - /// Load child resources - async fn hydrate_down(&mut self, db: &D) -> Result<()>; -} - -#[async_trait] -impl + Sync> Hydrate for Vm { - async fn hydrate_up(&mut self, db: &D) -> Result<()> { - let image = db.get_os_image(self.image_id).await?; - let template = db.get_vm_template(self.template_id).await?; - let ssh_key = db.get_user_ssh_key(self.ssh_key_id).await?; - - self.image = Some(image); - self.template = Some(template); - self.ssh_key = Some(ssh_key); - Ok(()) - } - - async fn hydrate_down(&mut self, db: &D) -> Result<()> { - //let payments = db.list_vm_payment(self.id).await?; - let ips = db.list_vm_ip_assignments(self.id).await?; - - //self.payments = Some(payments); - self.ip_assignments = Some(ips); - Ok(()) - } -} - -#[async_trait] -impl + Sync> Hydrate for VmTemplate { - async fn hydrate_up(&mut self, db: &D) -> Result<()> { - let cost_plan = db.get_cost_plan(self.cost_plan_id).await?; - let region = db.get_host_region(self.region_id).await?; - self.cost_plan = Some(cost_plan); - self.region = Some(region); - Ok(()) - } - - async fn hydrate_down(&mut self, db: &D) -> Result<()> { - todo!() - } -} - -#[async_trait] -impl + Sync> Hydrate for VmIpAssignment { - async fn hydrate_up(&mut self, db: &D) -> Result<()> { - self.ip_range = Some(db.get_ip_range(self.ip_range_id).await?); - Ok(()) - } - - async fn hydrate_down(&mut self, db: &D) -> Result<()> { - todo!() - } -} diff --git a/lnvps_db/src/lib.rs b/lnvps_db/src/lib.rs index 12b6906..5b0ccc0 100644 --- a/lnvps_db/src/lib.rs +++ b/lnvps_db/src/lib.rs @@ -1,7 +1,6 @@ use anyhow::Result; use async_trait::async_trait; -pub mod hydrate; mod model; #[cfg(feature = "mysql")] mod mysql; diff --git a/lnvps_db/src/model.rs b/lnvps_db/src/model.rs index fed855e..ea6922d 100644 --- a/lnvps_db/src/model.rs +++ b/lnvps_db/src/model.rs @@ -1,61 +1,49 @@ use anyhow::{anyhow, Result}; use chrono::{DateTime, Utc}; -use serde::{Deserialize, Serialize}; -use serde_with::serde_as; use sqlx::FromRow; use std::fmt::{Display, Formatter}; use std::path::PathBuf; use url::Url; -#[serde_as] -#[derive(Serialize, Deserialize, FromRow, Clone, Debug)] +#[derive(FromRow, Clone, Debug)] /// Users who buy VM's pub struct User { /// Unique ID of this user (database generated) pub id: u64, - /// The nostr public key for this user - #[serde_as(as = "serde_with::hex::Hex")] pub pubkey: Vec, - /// When this user first started using the service (first login) pub created: DateTime, - pub email: Option, pub contact_nip4: bool, pub contact_nip17: bool, pub contact_email: bool, } -#[derive(Serialize, Deserialize, FromRow, Clone, Debug, Default)] +#[derive(FromRow, Clone, Debug, Default)] pub struct UserSshKey { pub id: u64, pub name: String, pub user_id: u64, pub created: DateTime, - #[serde(skip_serializing)] pub key_data: String, - - #[sqlx(skip)] - #[serde(skip_serializing_if = "Option::is_none")] - pub vms: Option>, } -#[derive(Serialize, Deserialize, Clone, Debug, sqlx::Type)] +#[derive(Clone, Debug, sqlx::Type)] #[repr(u16)] /// The type of VM host pub enum VmHostKind { Proxmox = 0, } -#[derive(Serialize, Deserialize, FromRow, Clone, Debug)] +#[derive(FromRow, Clone, Debug)] pub struct VmHostRegion { pub id: u64, pub name: String, pub enabled: bool, } -#[derive(Serialize, Deserialize, FromRow, Clone, Debug)] +#[derive(FromRow, Clone, Debug)] /// A VM host pub struct VmHost { /// Unique id of this host @@ -78,7 +66,7 @@ pub struct VmHost { pub api_token: String, } -#[derive(Serialize, Deserialize, FromRow, Clone, Debug)] +#[derive(FromRow, Clone, Debug)] pub struct VmHostDisk { pub id: u64, pub host_id: u64, @@ -89,8 +77,7 @@ pub struct VmHostDisk { pub enabled: bool, } -#[derive(Serialize, Deserialize, Clone, Debug, sqlx::Type, Default)] -#[serde(rename_all = "lowercase")] +#[derive(Clone, Debug, sqlx::Type, Default)] #[repr(u16)] pub enum DiskType { #[default] @@ -98,8 +85,7 @@ pub enum DiskType { SSD = 1, } -#[derive(Serialize, Deserialize, Clone, Debug, sqlx::Type, Default)] -#[serde(rename_all = "lowercase")] +#[derive(Clone, Debug, sqlx::Type, Default)] #[repr(u16)] pub enum DiskInterface { #[default] @@ -108,7 +94,7 @@ pub enum DiskInterface { PCIe = 2, } -#[derive(Serialize, Deserialize, Clone, Debug, sqlx::Type, Default)] +#[derive(Clone, Debug, sqlx::Type, Default)] #[repr(u16)] pub enum OsDistribution { #[default] @@ -124,7 +110,7 @@ pub enum OsDistribution { /// OS Images are templates which are used as a basis for /// provisioning new vms -#[derive(Serialize, Deserialize, FromRow, Clone, Debug)] +#[derive(FromRow, Clone, Debug)] pub struct VmOsImage { pub id: u64, pub distribution: OsDistribution, @@ -132,8 +118,6 @@ pub struct VmOsImage { pub version: String, pub enabled: bool, pub release_date: DateTime, - - #[serde(skip_serializing)] /// URL location of cloud image pub url: String, } @@ -158,7 +142,7 @@ impl Display for VmOsImage { } } -#[derive(Serialize, Deserialize, FromRow, Clone, Debug)] +#[derive(FromRow, Clone, Debug)] pub struct IpRange { pub id: u64, pub cidr: String, @@ -167,8 +151,7 @@ pub struct IpRange { pub region_id: u64, } -#[derive(Serialize, Deserialize, Clone, Debug, sqlx::Type)] -#[serde(rename_all = "lowercase")] +#[derive(Clone, Debug, sqlx::Type)] #[repr(u16)] pub enum VmCostPlanIntervalType { Day = 0, @@ -176,7 +159,7 @@ pub enum VmCostPlanIntervalType { Year = 2, } -#[derive(Serialize, Deserialize, FromRow, Clone, Debug)] +#[derive(FromRow, Clone, Debug)] pub struct VmCostPlan { pub id: u64, pub name: String, @@ -189,13 +172,12 @@ pub struct VmCostPlan { /// Offers. /// These are the same as the offers visible to customers -#[derive(Serialize, Deserialize, FromRow, Clone, Debug, Default)] +#[derive(FromRow, Clone, Debug, Default)] pub struct VmTemplate { pub id: u64, pub name: String, pub enabled: bool, pub created: DateTime, - #[serde(skip_serializing_if = "Option::is_none")] pub expires: Option>, pub cpu: u16, pub memory: u64, @@ -204,16 +186,9 @@ pub struct VmTemplate { pub disk_interface: DiskInterface, pub cost_plan_id: u64, pub region_id: u64, - - #[sqlx(skip)] - #[serde(skip_serializing_if = "Option::is_none")] - pub cost_plan: Option, - #[sqlx(skip)] - #[serde(skip_serializing_if = "Option::is_none")] - pub region: Option, } -#[derive(Serialize, Deserialize, FromRow, Clone, Debug, Default)] +#[derive(FromRow, Clone, Debug, Default)] pub struct Vm { /// Unique VM ID (Same in proxmox) pub id: u64, @@ -237,35 +212,14 @@ pub struct Vm { pub mac_address: String, /// Is the VM deleted pub deleted: bool, - - #[sqlx(skip)] - #[serde(skip_serializing_if = "Option::is_none")] - pub image: Option, - #[sqlx(skip)] - #[serde(skip_serializing_if = "Option::is_none")] - pub template: Option, - #[sqlx(skip)] - #[serde(skip_serializing_if = "Option::is_none")] - pub ssh_key: Option, - - #[sqlx(skip)] - #[serde(skip_serializing_if = "Option::is_none")] - pub payments: Option>, - #[sqlx(skip)] - #[serde(skip_serializing_if = "Option::is_none")] - pub ip_assignments: Option>, } -#[derive(Serialize, Deserialize, FromRow, Clone, Debug, Default)] +#[derive(FromRow, Clone, Debug, Default)] pub struct VmIpAssignment { pub id: u64, pub vm_id: u64, pub ip_range_id: u64, pub ip: String, - - #[sqlx(skip)] - #[serde(skip_serializing_if = "Option::is_none")] - pub ip_range: Option, } impl Display for VmIpAssignment { @@ -274,11 +228,9 @@ impl Display for VmIpAssignment { } } -#[serde_as] -#[derive(Serialize, Deserialize, FromRow, Clone, Debug, Default)] +#[derive(FromRow, Clone, Debug, Default)] pub struct VmPayment { /// Payment hash - #[serde_as(as = "serde_with::hex::Hex")] pub id: Vec, pub vm_id: u64, pub created: DateTime, @@ -288,11 +240,7 @@ pub struct VmPayment { pub is_paid: bool, /// Exchange rate pub rate: f32, - /// Number of seconds this payment will add to vm expiry - #[serde(skip_serializing)] pub time_value: u64, - - #[serde(skip_serializing)] pub settle_index: Option, } diff --git a/src/api/mod.rs b/src/api/mod.rs new file mode 100644 index 0000000..feb9043 --- /dev/null +++ b/src/api/mod.rs @@ -0,0 +1,4 @@ +mod routes; +mod model; + +pub use routes::routes; \ No newline at end of file diff --git a/src/api/model.rs b/src/api/model.rs new file mode 100644 index 0000000..a1b9efe --- /dev/null +++ b/src/api/model.rs @@ -0,0 +1,277 @@ +use nostr::util::hex; +use crate::status::VmState; +use chrono::{DateTime, Utc}; +use lnvps_db::VmHostRegion; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, JsonSchema)] +pub struct ApiVmStatus { + /// Unique VM ID (Same in proxmox) + pub id: u64, + /// When the VM was created + pub created: DateTime, + /// When the VM expires + pub expires: DateTime, + /// Network MAC address + pub mac_address: String, + /// OS Image in use + pub image: ApiVmOsImage, + /// VM template + pub template: ApiVmTemplate, + /// SSH key attached to this VM + pub ssh_key: ApiUserSshKey, + /// IPs assigned to this VM + pub ip_assignments: Vec, + /// Current running state of the VM + pub status: VmState, +} + +#[derive(Serialize, Deserialize, JsonSchema)] +pub struct ApiUserSshKey { + pub id: u64, + pub name: String, + pub created: DateTime, +} + +impl From for ApiUserSshKey { + fn from(ssh_key: lnvps_db::UserSshKey) -> Self { + ApiUserSshKey { + id: ssh_key.id, + name: ssh_key.name, + created: ssh_key.created, + } + } +} + +#[derive(Serialize, Deserialize, JsonSchema)] +pub struct ApiVmIpAssignment { + pub id: u64, + pub ip: String, + pub range: String, +} + +impl ApiVmIpAssignment { + pub fn from(ip: lnvps_db::VmIpAssignment, range: &lnvps_db::IpRange) -> Self { + ApiVmIpAssignment { + id: ip.id, + ip: ip.ip, + range: range.cidr.clone(), + } + } +} + +#[derive(Serialize, Deserialize, JsonSchema)] +#[serde(rename_all = "lowercase")] +pub enum DiskType { + HDD = 0, + SSD = 1, +} + +impl From for DiskType { + fn from(value: lnvps_db::DiskType) -> Self { + match value { + lnvps_db::DiskType::HDD => Self::HDD, + lnvps_db::DiskType::SSD => Self::SSD, + } + } +} + +#[derive(Serialize, Deserialize, JsonSchema)] +#[serde(rename_all = "lowercase")] +pub enum DiskInterface { + SATA = 0, + SCSI = 1, + PCIe = 2, +} + +impl From for DiskInterface { + fn from(value: lnvps_db::DiskInterface) -> Self { + match value { + lnvps_db::DiskInterface::SATA => Self::SATA, + lnvps_db::DiskInterface::SCSI => Self::SCSI, + lnvps_db::DiskInterface::PCIe => Self::PCIe, + } + } +} + +#[derive(Serialize, Deserialize, JsonSchema)] +pub struct ApiVmTemplate { + pub id: u64, + pub name: String, + pub created: DateTime, + #[serde(skip_serializing_if = "Option::is_none")] + pub expires: Option>, + pub cpu: u16, + pub memory: u64, + pub disk_size: u64, + pub disk_type: DiskType, + pub disk_interface: DiskInterface, + pub cost_plan: ApiVmCostPlan, + pub region: ApiVmHostRegion, +} + +impl ApiVmTemplate { + pub fn from( + template: lnvps_db::VmTemplate, + cost_plan: lnvps_db::VmCostPlan, + region: VmHostRegion, + ) -> Self { + Self { + id: template.id, + name: template.name, + created: template.created, + expires: template.expires, + cpu: template.cpu, + memory: template.memory, + disk_size: template.disk_size, + disk_type: template.disk_type.into(), + disk_interface: template.disk_interface.into(), + cost_plan: ApiVmCostPlan { + id: cost_plan.id, + name: cost_plan.name, + amount: cost_plan.amount, + currency: cost_plan.currency, + interval_amount: cost_plan.interval_amount, + interval_type: cost_plan.interval_type.into(), + }, + region: ApiVmHostRegion { + id: region.id, + name: region.name, + }, + } + } +} +#[derive(Serialize, Deserialize, JsonSchema)] +#[serde(rename_all = "lowercase")] +pub enum ApiVmCostPlanIntervalType { + Day = 0, + Month = 1, + Year = 2, +} + +impl From for ApiVmCostPlanIntervalType { + fn from(value: lnvps_db::VmCostPlanIntervalType) -> Self { + match value { + lnvps_db::VmCostPlanIntervalType::Day => Self::Day, + lnvps_db::VmCostPlanIntervalType::Month => Self::Month, + lnvps_db::VmCostPlanIntervalType::Year => Self::Year, + } + } +} + +#[derive(Serialize, Deserialize, JsonSchema)] +pub struct ApiVmCostPlan { + pub id: u64, + pub name: String, + pub amount: u64, + pub currency: String, + pub interval_amount: u64, + pub interval_type: ApiVmCostPlanIntervalType, +} + +#[derive(Serialize, Deserialize, JsonSchema)] +pub struct ApiVmHostRegion { + pub id: u64, + pub name: String, +} + +#[derive(Serialize, Deserialize, JsonSchema)] +pub struct VMPatchRequest { + /// SSH key assigned to vm + pub ssh_key_id: Option, +} + +#[derive(Serialize, Deserialize, JsonSchema)] +pub struct AccountPatchRequest { + pub email: Option, + pub contact_nip17: bool, + pub contact_email: bool, +} + +#[derive(Serialize, Deserialize, JsonSchema)] +pub struct CreateVmRequest { + pub template_id: u64, + pub image_id: u64, + pub ssh_key_id: u64, +} + +#[derive(Serialize, Deserialize, JsonSchema)] +pub struct CreateSshKey { + pub name: String, + pub key_data: String, +} + +#[derive(Serialize, Deserialize, JsonSchema)] +pub enum ApiOsDistribution { + Ubuntu = 0, + Debian = 1, + CentOS = 2, + Fedora = 3, + FreeBSD = 4, + OpenSUSE = 5, + ArchLinux = 6, + RedHatEnterprise = 7, +} + +impl From for ApiOsDistribution { + fn from(value: lnvps_db::OsDistribution) -> Self { + match value { + lnvps_db::OsDistribution::Ubuntu => Self::Ubuntu, + lnvps_db::OsDistribution::Debian => Self::Debian, + lnvps_db::OsDistribution::CentOS => Self::CentOS, + lnvps_db::OsDistribution::Fedora => Self::Fedora, + lnvps_db::OsDistribution::FreeBSD => Self::FreeBSD, + lnvps_db::OsDistribution::OpenSUSE => Self::OpenSUSE, + lnvps_db::OsDistribution::ArchLinux => Self::ArchLinux, + lnvps_db::OsDistribution::RedHatEnterprise => Self::RedHatEnterprise, + } + } +} + +#[derive(Serialize, Deserialize, JsonSchema)] +pub struct ApiVmOsImage { + pub id: u64, + pub distribution: ApiOsDistribution, + pub flavour: String, + pub version: String, + pub release_date: DateTime, +} + +impl From for ApiVmOsImage { + fn from(image: lnvps_db::VmOsImage) -> Self { + ApiVmOsImage { + id: image.id, + distribution: image.distribution.into(), + flavour: image.flavour, + version: image.version, + release_date: image.release_date, + } + } +} + +#[derive(Serialize, Deserialize, JsonSchema)] +pub struct ApiVmPayment { + /// Payment hash hex + pub id: String, + pub vm_id: u64, + pub created: DateTime, + pub expires: DateTime, + pub amount: u64, + pub invoice: String, + pub is_paid: bool, +} + +impl From for ApiVmPayment { + fn from(value: lnvps_db::VmPayment) -> Self { + Self { + id: hex::encode(&value.id), + vm_id: value.vm_id, + created: value.created, + expires: value.expires, + amount: value.amount, + invoice: value.invoice, + is_paid: value.is_paid, + } + } +} diff --git a/src/api.rs b/src/api/routes.rs similarity index 68% rename from src/api.rs rename to src/api/routes.rs index 46a8e88..2b479ff 100644 --- a/src/api.rs +++ b/src/api/routes.rs @@ -1,23 +1,33 @@ +use crate::api::model::{ + AccountPatchRequest, ApiUserSshKey, ApiVmIpAssignment, ApiVmOsImage, ApiVmPayment, ApiVmStatus, + ApiVmTemplate, CreateSshKey, CreateVmRequest, VMPatchRequest, +}; use crate::nip98::Nip98Auth; use crate::provisioner::Provisioner; use crate::status::{VmState, VmStateCache}; use crate::worker::WorkJob; use anyhow::{bail, Result}; -use lnvps_db::hydrate::Hydrate; -use lnvps_db::{LNVpsDb, UserSshKey, Vm, VmOsImage, VmPayment, VmTemplate}; +use lnvps_db::{IpRange, LNVpsDb}; use log::{debug, error}; use nostr::util::hex; +use nostr_sdk::async_utility::futures_util::future::join_all; use rocket::futures::{Sink, SinkExt, StreamExt}; use rocket::serde::json::Json; -use rocket::{get, patch, post, routes, Responder, Route, State}; +use rocket::{get, patch, post, Responder, Route, State}; +use rocket_okapi::gen::OpenApiGenerator; +use rocket_okapi::okapi::openapi3::Responses; +use rocket_okapi::response::OpenApiResponderInner; +use rocket_okapi::{openapi, openapi_get_routes}; +use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use ssh_key::PublicKey; +use std::collections::{HashMap, HashSet}; use std::fmt::Display; use tokio::sync::mpsc::UnboundedSender; use ws::Message; pub fn routes() -> Vec { - routes![ + openapi_get_routes![ v1_get_account, v1_patch_account, v1_list_vms, @@ -32,14 +42,13 @@ pub fn routes() -> Vec { v1_start_vm, v1_stop_vm, v1_restart_vm, - v1_terminal_proxy, v1_patch_vm ] } type ApiResult = Result>, ApiError>; -#[derive(Serialize)] +#[derive(Serialize, Deserialize, JsonSchema)] struct ApiData { pub data: T, } @@ -53,7 +62,7 @@ impl ApiData { } } -#[derive(Responder)] +#[derive(Serialize, Deserialize, JsonSchema, Responder)] #[response(status = 500)] struct ApiError { pub error: String, @@ -67,25 +76,14 @@ impl From for ApiError { } } -#[derive(Serialize)] -struct ApiVmStatus { - #[serde(flatten)] - pub vm: Vm, - pub status: VmState, -} - -#[derive(Serialize, Deserialize)] -struct VMPatchRequest { - pub ssh_key_id: Option, -} - -#[derive(Serialize, Deserialize)] -struct AccountPatchRequest { - pub email: Option, - pub contact_nip17: bool, - pub contact_email: bool, +impl OpenApiResponderInner for ApiError { + fn responses(_gen: &mut OpenApiGenerator) -> rocket_okapi::Result { + Ok(Responses::default()) + } } +/// Update user account +#[openapi(tag = "Account")] #[patch("/api/v1/account", format = "json", data = "")] async fn v1_patch_account( auth: Nip98Auth, @@ -104,6 +102,8 @@ async fn v1_patch_account( ApiData::ok(()) } +/// Get user account detail +#[openapi(tag = "Account")] #[get("/api/v1/account")] async fn v1_get_account( auth: Nip98Auth, @@ -111,7 +111,7 @@ async fn v1_get_account( ) -> ApiResult { let pubkey = auth.event.pubkey.to_bytes(); let uid = db.upsert_user(&pubkey).await?; - let mut user = db.get_user(uid).await?; + let user = db.get_user(uid).await?; ApiData::ok(AccountPatchRequest { email: user.email, @@ -120,6 +120,49 @@ async fn v1_get_account( }) } +async fn vm_to_status( + db: &Box, + vm: lnvps_db::Vm, + state: Option, +) -> Result { + let image = db.get_os_image(vm.image_id).await?; + let template = db.get_vm_template(vm.template_id).await?; + let region = db.get_host_region(template.region_id).await?; + let cost_plan = db.get_cost_plan(template.cost_plan_id).await?; + let ssh_key = db.get_user_ssh_key(vm.ssh_key_id).await?; + let ips = db.list_vm_ip_assignments(vm.id).await?; + let ip_range_ids: HashSet = ips.iter().map(|i| i.ip_range_id).collect(); + let ip_ranges: Vec<_> = ip_range_ids.iter().map(|i| db.get_ip_range(*i)).collect(); + let ip_ranges: HashMap = join_all(ip_ranges) + .await + .into_iter() + .filter_map(Result::ok) + .map(|i| (i.id, i)) + .collect(); + + Ok(ApiVmStatus { + id: vm.id, + created: vm.created, + expires: vm.expires, + mac_address: vm.mac_address, + image: image.into(), + template: ApiVmTemplate::from(template, cost_plan, region), + ssh_key: ssh_key.into(), + status: state.unwrap_or_default(), + ip_assignments: ips + .into_iter() + .map(|i| { + let range = ip_ranges + .get(&i.ip_range_id) + .expect("ip range id not found"); + ApiVmIpAssignment::from(i, range) + }) + .collect(), + }) +} + +/// List VMs belonging to user +#[openapi(tag = "VM")] #[get("/api/v1/vm")] async fn v1_list_vms( auth: Nip98Auth, @@ -130,23 +173,16 @@ async fn v1_list_vms( let uid = db.upsert_user(&pubkey).await?; let vms = db.list_user_vms(uid).await?; let mut ret = vec![]; - for mut vm in vms { - vm.hydrate_up(db.inner()).await?; - vm.hydrate_down(db.inner()).await?; - if let Some(t) = &mut vm.template { - t.hydrate_up(db.inner()).await?; - } - - let state = vm_state.get_state(vm.id).await; - ret.push(ApiVmStatus { - vm, - status: state.unwrap_or_default(), - }); + for vm in vms { + let vm_id = vm.id; + ret.push(vm_to_status(db, vm, vm_state.get_state(vm_id).await).await?); } ApiData::ok(ret) } +/// Get status of a VM +#[openapi(tag = "VM")] #[get("/api/v1/vm/")] async fn v1_get_vm( auth: Nip98Auth, @@ -156,22 +192,15 @@ async fn v1_get_vm( ) -> ApiResult { let pubkey = auth.event.pubkey.to_bytes(); let uid = db.upsert_user(&pubkey).await?; - let mut vm = db.get_vm(id).await?; + let vm = db.get_vm(id).await?; if vm.user_id != uid { return ApiData::err("VM doesnt belong to you"); } - vm.hydrate_up(db.inner()).await?; - vm.hydrate_down(db.inner()).await?; - if let Some(t) = &mut vm.template { - t.hydrate_up(db.inner()).await?; - } - let state = vm_state.get_state(vm.id).await; - ApiData::ok(ApiVmStatus { - vm, - status: state.unwrap_or_default(), - }) + ApiData::ok(vm_to_status(db, vm, vm_state.get_state(id).await).await?) } +/// Update a VM config +#[openapi(tag = "VM")] #[patch("/api/v1/vm/", data = "", format = "json")] async fn v1_patch_vm( auth: Nip98Auth, @@ -201,39 +230,88 @@ async fn v1_patch_vm( ApiData::ok(()) } +/// List available VM OS images +#[openapi(tag = "Image")] #[get("/api/v1/image")] -async fn v1_list_vm_images(db: &State>) -> ApiResult> { - let vms = db.list_os_image().await?; - let vms: Vec = vms.into_iter().filter(|i| i.enabled).collect(); - ApiData::ok(vms) -} - -#[get("/api/v1/vm/templates")] -async fn v1_list_vm_templates(db: &State>) -> ApiResult> { - let mut vms = db.list_vm_templates().await?; - for vm in &mut vms { - vm.hydrate_up(db.inner()).await?; - } - let ret: Vec = vms.into_iter().filter(|v| v.enabled).collect(); +async fn v1_list_vm_images(db: &State>) -> ApiResult> { + let images = db.list_os_image().await?; + let ret = images + .into_iter() + .filter(|i| i.enabled) + .map(|i| i.into()) + .collect(); ApiData::ok(ret) } +/// List available VM templates (Offers) +#[openapi(tag = "Template")] +#[get("/api/v1/vm/templates")] +async fn v1_list_vm_templates(db: &State>) -> ApiResult> { + let templates = db.list_vm_templates().await?; + + let cost_plans: HashSet = templates.iter().map(|t| t.cost_plan_id).collect(); + let regions: HashSet = templates.iter().map(|t| t.region_id).collect(); + + let cost_plans: Vec<_> = cost_plans + .into_iter() + .map(|i| db.get_cost_plan(i)) + .collect(); + let regions: Vec<_> = regions.into_iter().map(|r| db.get_host_region(r)).collect(); + + let cost_plans: HashMap = join_all(cost_plans) + .await + .into_iter() + .filter_map(|c| { + let c = c.ok()?; + Some((c.id, c)) + }) + .collect(); + let regions: HashMap = join_all(regions) + .await + .into_iter() + .filter_map(|c| { + let c = c.ok()?; + Some((c.id, c)) + }) + .collect(); + + let ret = templates + .into_iter() + .filter(|v| v.enabled) + .filter_map(|i| { + let cp = cost_plans.get(&i.cost_plan_id)?; + let hr = regions.get(&i.region_id)?; + Some(ApiVmTemplate::from(i, cp.clone(), hr.clone())) + }) + .collect(); + ApiData::ok(ret) +} + +/// List user SSH keys +#[openapi(tag = "Account")] #[get("/api/v1/ssh-key")] async fn v1_list_ssh_keys( auth: Nip98Auth, db: &State>, -) -> ApiResult> { +) -> ApiResult> { let uid = db.upsert_user(&auth.event.pubkey.to_bytes()).await?; - let keys = db.list_user_ssh_key(uid).await?; - ApiData::ok(keys) + let ret = db + .list_user_ssh_key(uid) + .await? + .into_iter() + .map(|i| i.into()) + .collect(); + ApiData::ok(ret) } +/// Add new SSH key to account +#[openapi(tag = "Account")] #[post("/api/v1/ssh-key", data = "", format = "json")] async fn v1_add_ssh_key( auth: Nip98Auth, db: &State>, req: Json, -) -> ApiResult { +) -> ApiResult { let uid = db.upsert_user(&auth.event.pubkey.to_bytes()).await?; let pk: PublicKey = req.key_data.parse()?; @@ -242,7 +320,7 @@ async fn v1_add_ssh_key( } else { pk.comment() }; - let mut new_key = UserSshKey { + let mut new_key = lnvps_db::UserSshKey { name: key_name.to_string(), user_id: uid, key_data: pk.to_openssh()?, @@ -251,35 +329,42 @@ async fn v1_add_ssh_key( let key_id = db.insert_user_ssh_key(&new_key).await?; new_key.id = key_id; - ApiData::ok(new_key) + ApiData::ok(new_key.into()) } +/// Create a new VM order +/// +/// After order is created please use /api/v1/vm/{id}/renew to pay for VM, +/// VM's are initially created in "expired" state +/// +/// Unpaid VM orders will be deleted after 24hrs +#[openapi(tag = "VM")] #[post("/api/v1/vm", data = "", format = "json")] async fn v1_create_vm_order( auth: Nip98Auth, db: &State>, provisioner: &State>, req: Json, -) -> ApiResult { +) -> ApiResult { let pubkey = auth.event.pubkey.to_bytes(); let uid = db.upsert_user(&pubkey).await?; let req = req.0; - let mut rsp = provisioner + let rsp = provisioner .provision(uid, req.template_id, req.image_id, req.ssh_key_id) .await?; - rsp.hydrate_up(db.inner()).await?; - - ApiData::ok(rsp) + ApiData::ok(vm_to_status(db, rsp, None).await?) } +/// Renew(Extend) a VM +#[openapi(tag = "VM")] #[get("/api/v1/vm//renew")] async fn v1_renew_vm( auth: Nip98Auth, db: &State>, provisioner: &State>, id: u64, -) -> ApiResult { +) -> ApiResult { let pubkey = auth.event.pubkey.to_bytes(); let uid = db.upsert_user(&pubkey).await?; let vm = db.get_vm(id).await?; @@ -288,9 +373,11 @@ async fn v1_renew_vm( } let rsp = provisioner.renew(id).await?; - ApiData::ok(rsp) + ApiData::ok(rsp.into()) } +/// Start a VM +#[openapi(tag = "VM")] #[patch("/api/v1/vm//start")] async fn v1_start_vm( auth: Nip98Auth, @@ -311,6 +398,8 @@ async fn v1_start_vm( ApiData::ok(()) } +/// Stop a VM +#[openapi(tag = "VM")] #[patch("/api/v1/vm//stop")] async fn v1_stop_vm( auth: Nip98Auth, @@ -331,6 +420,8 @@ async fn v1_stop_vm( ApiData::ok(()) } +/// Restart a VM +#[openapi(tag = "VM")] #[patch("/api/v1/vm//restart")] async fn v1_restart_vm( auth: Nip98Auth, @@ -351,12 +442,14 @@ async fn v1_restart_vm( ApiData::ok(()) } +/// Get payment status (for polling) +#[openapi(tag = "Payment")] #[get("/api/v1/payment/")] async fn v1_get_payment( auth: Nip98Auth, db: &State>, id: &str, -) -> ApiResult { +) -> ApiResult { let pubkey = auth.event.pubkey.to_bytes(); let uid = db.upsert_user(&pubkey).await?; let id = if let Ok(i) = hex::decode(id) { @@ -370,7 +463,7 @@ async fn v1_get_payment( return ApiData::err("VM does not belong to you"); } - ApiData::ok(payment) + ApiData::ok(payment.into()) } #[get("/api/v1/console/?")] @@ -478,25 +571,3 @@ async fn v1_terminal_proxy( }) })) } - -#[derive(Deserialize)] -struct CreateVmRequest { - template_id: u64, - image_id: u64, - ssh_key_id: u64, -} - -impl From for VmTemplate { - fn from(val: CreateVmRequest) -> Self { - VmTemplate { - id: val.template_id, - ..Default::default() - } - } -} - -#[derive(Deserialize)] -struct CreateSshKey { - name: String, - key_data: String, -} diff --git a/src/bin/api.rs b/src/bin/api.rs index c2f60f5..7635850 100644 --- a/src/bin/api.rs +++ b/src/bin/api.rs @@ -14,6 +14,7 @@ use lnvps_db::{LNVpsDb, LNVpsDbMysql}; use log::error; use nostr::Keys; use nostr_sdk::Client; +use rocket_okapi::swagger_ui::{make_swagger_ui, SwaggerUIConfig}; use std::net::{IpAddr, SocketAddr}; use std::time::Duration; use tokio::time::sleep; @@ -156,6 +157,13 @@ async fn main() -> Result<(), Error> { .manage(exchange) .manage(sender) .mount("/", api::routes()) + .mount( + "/swagger", + make_swagger_ui(&SwaggerUIConfig { + url: "../openapi.json".to_owned(), + ..Default::default() + }), + ) .launch() .await { diff --git a/src/nip98.rs b/src/nip98.rs index e4230f5..c9959c1 100644 --- a/src/nip98.rs +++ b/src/nip98.rs @@ -7,6 +7,9 @@ use rocket::http::uri::{Absolute, Uri}; use rocket::http::Status; use rocket::request::{FromRequest, Outcome}; use rocket::{async_trait, Request}; +use rocket_okapi::gen::OpenApiGenerator; +use rocket_okapi::okapi::openapi3::{SecurityRequirement, SecurityScheme, SecuritySchemeData}; +use rocket_okapi::request::{OpenApiFromRequest, RequestHeaderInput}; pub struct Nip98Auth { pub event: Event, @@ -106,3 +109,27 @@ impl<'r> FromRequest<'r> for Nip98Auth { } } } + +impl OpenApiFromRequest<'_> for Nip98Auth { + fn from_request_input( + _gen: &mut OpenApiGenerator, + _name: String, + _required: bool, + ) -> rocket_okapi::Result { + let security_scheme = SecurityScheme { + description: Some("Requires an Bearer token to access".to_owned()), + data: SecuritySchemeData::Http { + scheme: "Nostr".to_owned(), + bearer_format: Some("base64-encoded-auth-event".to_owned()), + }, + extensions: Default::default(), + }; + let mut security_req = SecurityRequirement::new(); + security_req.insert("NostrAuth".to_owned(), Vec::new()); + Ok(RequestHeaderInput::Security( + "NostrAuth".to_owned(), + security_scheme, + security_req, + )) + } +} diff --git a/src/provisioner/lnvps.rs b/src/provisioner/lnvps.rs index ccb29bf..034e380 100644 --- a/src/provisioner/lnvps.rs +++ b/src/provisioner/lnvps.rs @@ -14,13 +14,13 @@ use fedimint_tonic_lnd::lnrpc::Invoice; use fedimint_tonic_lnd::tonic::async_trait; use fedimint_tonic_lnd::Client; use ipnetwork::IpNetwork; -use lnvps_db::hydrate::Hydrate; use lnvps_db::{DiskType, IpRange, LNVpsDb, Vm, VmCostPlanIntervalType, VmIpAssignment, VmPayment}; use log::{debug, info, warn}; use nostr::util::hex; use rand::random; use rand::seq::IteratorRandom; use reqwest::Url; +use rocket::futures::future::join_all; use rocket::futures::{SinkExt, StreamExt}; use std::collections::{HashMap, HashSet}; use std::net::IpAddr; @@ -81,10 +81,17 @@ impl LNVpsProvisioner { ips = self.allocate_ips(vm.id).await?; } - // load ranges - for ip in &mut ips { - ip.hydrate_up(&self.db).await?; - } + let ip_range_ids: HashSet = ips.iter().map(|i| i.ip_range_id).collect(); + let ip_ranges: Vec<_> = ip_range_ids + .iter() + .map(|i| self.db.get_ip_range(*i)) + .collect(); + let ip_ranges: HashMap = join_all(ip_ranges) + .await + .into_iter() + .filter_map(Result::ok) + .map(|i| (i.id, i)) + .collect(); let mut ip_config = ips .iter() @@ -92,11 +99,8 @@ impl LNVpsProvisioner { if let Ok(net) = ip.ip.parse::() { Some(match net { IpNetwork::V4(addr) => { - format!( - "ip={},gw={}", - addr, - ip.ip_range.as_ref().map(|r| &r.gateway).unwrap() - ) + let range = ip_ranges.get(&ip.ip_range_id)?; + format!("ip={},gw={}", addr, range.gateway) } IpNetwork::V6(addr) => format!("ip6={}", addr), }) @@ -122,11 +126,7 @@ impl LNVpsProvisioner { bail!("No host drive found!") }; - let template = if let Some(t) = &vm.template { - t - } else { - &self.db.get_vm_template(vm.template_id).await? - }; + let template = self.db.get_vm_template(vm.template_id).await?; Ok(VmConfig { cpu: Some(self.config.cpu.clone()), @@ -302,18 +302,18 @@ impl Provisioner for LNVpsProvisioner { } async fn allocate_ips(&self, vm_id: u64) -> Result> { - let mut vm = self.db.get_vm(vm_id).await?; + let vm = self.db.get_vm(vm_id).await?; + let template = self.db.get_vm_template(vm.template_id).await?; let ips = self.db.list_vm_ip_assignments(vm.id).await?; if !ips.is_empty() { bail!("IP resources are already assigned"); } - vm.hydrate_up(&self.db).await?; let ip_ranges = self.db.list_ip_range().await?; let ip_ranges: Vec = ip_ranges .into_iter() - .filter(|i| i.region_id == vm.template.as_ref().unwrap().region_id && i.enabled) + .filter(|i| i.region_id == template.region_id && i.enabled) .collect(); if ip_ranges.is_empty() { diff --git a/src/settings.rs b/src/settings.rs index f832a25..514f4ad 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -73,6 +73,7 @@ pub struct SmtpConfig { } #[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "lowercase")] pub enum ProvisionerConfig { Proxmox { /// Readonly mode, don't spawn any VM's @@ -147,7 +148,7 @@ impl RouterConfig { username, password, arp_interface, - } => MikrotikRouter::new(&url, &username, &password, &arp_interface), + } => MikrotikRouter::new(url, username, password, arp_interface), } } } diff --git a/src/status.rs b/src/status.rs index 897e6e1..acf49b0 100644 --- a/src/status.rs +++ b/src/status.rs @@ -2,9 +2,11 @@ use anyhow::Result; use serde::Serialize; use std::collections::HashMap; use std::sync::Arc; +use rocket::serde::Deserialize; +use schemars::JsonSchema; use tokio::sync::RwLock; -#[derive(Clone, Serialize, Default)] +#[derive(Clone, Serialize, Deserialize, Default, JsonSchema)] #[serde(rename_all = "lowercase")] pub enum VmRunningState { Running, @@ -14,7 +16,7 @@ pub enum VmRunningState { Deleting, } -#[derive(Clone, Serialize, Default)] +#[derive(Clone, Serialize, Deserialize, Default, JsonSchema)] pub struct VmState { pub timestamp: u64, pub state: VmRunningState, diff --git a/src/worker.rs b/src/worker.rs index 2cadb27..6a13a88 100644 --- a/src/worker.rs +++ b/src/worker.rs @@ -48,11 +48,11 @@ pub struct WorkerSettings { pub smtp: Option, } -impl Into for &Settings { - fn into(self) -> WorkerSettings { +impl From<&Settings> for WorkerSettings { + fn from(val: &Settings) -> Self { WorkerSettings { - delete_after: self.delete_after, - smtp: self.smtp.clone(), + delete_after: val.delete_after, + smtp: val.smtp.clone(), } } } @@ -206,7 +206,7 @@ impl Worker { if let Err(e) = self.handle_vm_info(vm).await { error!("{}", e); self.queue_admin_notification( - format!("Failed to check VM {}:\n{}", vm_id, e.to_string()), + format!("Failed to check VM {}:\n{}", vm_id, e), Some("Job Failed".to_string()), )? } @@ -331,7 +331,7 @@ impl Worker { "Failed to check VM {}:\n{:?}\n{}", vm_id, &job, - e.to_string() + e ), Some("Job Failed".to_string()), )? @@ -351,7 +351,7 @@ impl Worker { format!( "Failed to send notification:\n{:?}\n{}", &job, - e.to_string() + e ), Some("Job Failed".to_string()), )? @@ -361,7 +361,7 @@ impl Worker { if let Err(e) = self.check_vms().await { error!("Failed to check VMs: {}", e); self.queue_admin_notification( - format!("Failed to check VM's:\n{:?}\n{}", &job, e.to_string()), + format!("Failed to check VM's:\n{:?}\n{}", &job, e), Some("Job Failed".to_string()), )? }