diff --git a/Cargo.lock b/Cargo.lock index 78f138d..cd7a683 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -207,6 +207,23 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "async-graphql-axum" +version = "7.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c95b41ba3c0f4ecccd73bf7e7aa7be3c41ff054968e988317bd9133ed210a4a2" +dependencies = [ + "async-graphql", + "axum 0.8.3", + "bytes 1.10.1", + "futures-util", + "serde_json", + "tokio 1.44.2", + "tokio-stream", + "tokio-util", + "tower-service", +] + [[package]] name = "async-graphql-derive" version = "7.0.16" @@ -236,19 +253,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "async-graphql-rocket" -version = "7.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958be85f900a591a1c0c4d6b9b43b310a5c6cfb5de82cf164dddfeb9d5dfe411" -dependencies = [ - "async-graphql", - "rocket", - "serde", - "serde_json", - "tokio-util", -] - [[package]] name = "async-graphql-value" version = "7.0.16" @@ -303,21 +307,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "atomic" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" - -[[package]] -name = "atomic" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994" -dependencies = [ - "bytemuck", -] - [[package]] name = "atomic-waker" version = "1.1.2" @@ -362,14 +351,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", - "axum-core", + "axum-core 0.4.5", "bytes 1.10.1", "futures-util", "http 1.3.1", "http-body 1.0.1", "http-body-util", "itoa 1.0.15", - "matchit", + "matchit 0.7.3", "memchr", "mime", "percent-encoding", @@ -382,6 +371,43 @@ dependencies = [ "tower-service", ] +[[package]] +name = "axum" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de45108900e1f9b9242f7f2e254aa3e2c029c921c258fe9e6b4217eeebd54288" +dependencies = [ + "axum-core 0.5.2", + "base64 0.22.1", + "bytes 1.10.1", + "form_urlencoded", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.6.0", + "hyper-util", + "itoa 1.0.15", + "matchit 0.8.4", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sha1", + "sync_wrapper", + "tokio 1.44.2", + "tokio-tungstenite", + "tower 0.5.2", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "axum-core" version = "0.4.5" @@ -402,6 +428,26 @@ dependencies = [ "tower-service", ] +[[package]] +name = "axum-core" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" +dependencies = [ + "bytes 1.10.1", + "futures-core", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "backtrace" version = "0.3.74" @@ -447,12 +493,6 @@ version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" -[[package]] -name = "binascii" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "383d29d513d8764dcdc42ea295d979eb99c3c9f00607b3692cf68a431f7dca72" - [[package]] name = "bincode" version = "1.3.3" @@ -962,17 +1002,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" -[[package]] -name = "cookie" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" -dependencies = [ - "percent-encoding", - "time 0.3.41", - "version_check", -] - [[package]] name = "core-foundation" version = "0.9.4" @@ -1381,39 +1410,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "devise" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1d90b0c4c777a2cad215e3c7be59ac7c15adf45cf76317009b7d096d46f651d" -dependencies = [ - "devise_codegen", - "devise_core", -] - -[[package]] -name = "devise_codegen" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71b28680d8be17a570a2334922518be6adc3f58ecc880cbb404eaeb8624fd867" -dependencies = [ - "devise_core", - "quote", -] - -[[package]] -name = "devise_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b035a542cf7abf01f2e3c4d5a7acbaebfefe120ae4efc7bde3df98186e4b8af7" -dependencies = [ - "bitflags 2.9.0", - "proc-macro2", - "proc-macro2-diagnostics", - "quote", - "syn 2.0.100", -] - [[package]] name = "diff" version = "0.1.13" @@ -1635,20 +1631,6 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" -[[package]] -name = "figment" -version = "0.10.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" -dependencies = [ - "atomic 0.6.0", - "pear", - "serde", - "toml", - "uncased", - "version_check", -] - [[package]] name = "flate2" version = "1.1.1" @@ -1873,19 +1855,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "generator" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "windows", -] - [[package]] name = "generic-array" version = "0.12.4" @@ -2174,9 +2143,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" +checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633" dependencies = [ "atomic-waker", "bytes 1.10.1", @@ -2277,12 +2246,6 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" -[[package]] -name = "hermit-abi" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" - [[package]] name = "hex" version = "0.4.3" @@ -2543,7 +2506,7 @@ dependencies = [ "bytes 1.10.1", "futures-channel", "futures-util", - "h2 0.4.8", + "h2 0.4.9", "http 1.3.1", "http-body 1.0.1", "httparse", @@ -2889,12 +2852,6 @@ dependencies = [ "serde", ] -[[package]] -name = "inlinable_string" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb" - [[package]] name = "instant" version = "0.1.13" @@ -2922,17 +2879,6 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" -[[package]] -name = "is-terminal" -version = "0.4.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" -dependencies = [ - "hermit-abi 0.5.0", - "libc", - "windows-sys 0.59.0", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -3028,8 +2974,9 @@ dependencies = [ "ammonia", "anyhow", "async-graphql", - "async-graphql-rocket", + "async-graphql-axum", "async-trait", + "axum 0.8.3", "build-info", "build-info-build", "cacher", @@ -3048,8 +2995,6 @@ dependencies = [ "memmap", "regex", "reqwest", - "rocket", - "rocket_cors", "scraper", "serde", "serde_json", @@ -3057,6 +3002,7 @@ dependencies = [ "tantivy", "thiserror 2.0.12", "tokio 1.44.2", + "tower-http", "tracing", "url", "urlencoding", @@ -3232,21 +3178,6 @@ dependencies = [ "thiserror 2.0.12", ] -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if 1.0.0", - "generator", - "scoped-tls", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] - [[package]] name = "lru" version = "0.12.5" @@ -3345,6 +3276,12 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +[[package]] +name = "matchit" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" + [[package]] name = "maybe-uninit" version = "2.0.0" @@ -3550,8 +3487,6 @@ dependencies = [ "memchr", "mime", "spin", - "tokio 1.44.2", - "tokio-util", "version_check", ] @@ -3711,7 +3646,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi", "libc", ] @@ -3982,29 +3917,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "pear" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdeeaa00ce488657faba8ebf44ab9361f9365a97bd39ffb8a60663f57ff4b467" -dependencies = [ - "inlinable_string", - "pear_codegen", - "yansi", -] - -[[package]] -name = "pear_codegen" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bab5b985dc082b345f812b7df84e1bef27e7207b39e448439ba8bd69c93f147" -dependencies = [ - "proc-macro2", - "proc-macro2-diagnostics", - "quote", - "syn 2.0.100", -] - [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -4385,19 +4297,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "proc-macro2-diagnostics" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", - "version_check", - "yansi", -] - [[package]] name = "prost" version = "0.13.5" @@ -4721,26 +4620,6 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "ref-cast" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - [[package]] name = "regex" version = "1.11.1" @@ -4797,7 +4676,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.4.8", + "h2 0.4.9", "http 1.3.1", "http-body 1.0.1", "http-body-util", @@ -4849,105 +4728,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rocket" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a516907296a31df7dc04310e7043b61d71954d703b603cc6867a026d7e72d73f" -dependencies = [ - "async-stream", - "async-trait", - "atomic 0.5.3", - "binascii", - "bytes 1.10.1", - "either", - "figment", - "futures 0.3.31", - "indexmap 2.9.0", - "log", - "memchr", - "multer", - "num_cpus", - "parking_lot 0.12.3", - "pin-project-lite", - "rand 0.8.5", - "ref-cast", - "rocket_codegen", - "rocket_http", - "serde", - "serde_json", - "state", - "tempfile", - "time 0.3.41", - "tokio 1.44.2", - "tokio-stream", - "tokio-util", - "ubyte", - "version_check", - "yansi", -] - -[[package]] -name = "rocket_codegen" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "575d32d7ec1a9770108c879fc7c47815a80073f96ca07ff9525a94fcede1dd46" -dependencies = [ - "devise", - "glob", - "indexmap 2.9.0", - "proc-macro2", - "quote", - "rocket_http", - "syn 2.0.100", - "unicode-xid", - "version_check", -] - -[[package]] -name = "rocket_cors" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfac3a1df83f8d4fc96aa41dba3b86c786417b7fc0f52ec76295df2ba781aa69" -dependencies = [ - "http 0.2.12", - "log", - "regex", - "rocket", - "serde", - "serde_derive", - "unicase", - "unicase_serde", - "url", -] - -[[package]] -name = "rocket_http" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e274915a20ee3065f611c044bd63c40757396b6dbc057d6046aec27f14f882b9" -dependencies = [ - "cookie", - "either", - "futures 0.3.31", - "http 0.2.12", - "hyper 0.14.32", - "indexmap 2.9.0", - "log", - "memchr", - "pear", - "percent-encoding", - "pin-project-lite", - "ref-cast", - "serde", - "smallvec 1.15.0", - "stable-pattern", - "state", - "time 0.3.41", - "tokio 1.44.2", - "uncased", -] - [[package]] name = "rsa" version = "0.9.8" @@ -5305,12 +5085,6 @@ dependencies = [ "parking_lot 0.12.3", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -5529,11 +5303,12 @@ dependencies = [ ] [[package]] -name = "serde_spanned" -version = "0.6.8" +name = "serde_path_to_error" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" dependencies = [ + "itoa 1.0.15", "serde", ] @@ -5949,30 +5724,12 @@ dependencies = [ "url", ] -[[package]] -name = "stable-pattern" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4564168c00635f88eaed410d5efa8131afa8d8699a612c80c455a0ba05c21045" -dependencies = [ - "memchr", -] - [[package]] name = "stable_deref_trait" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" -[[package]] -name = "state" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b8c4a4445d81357df8b1a650d0d0d6fbbbfe99d064aa5e02f3e4022061476d8" -dependencies = [ - "loom", -] - [[package]] name = "static_assertions_next" version = "1.1.2" @@ -6689,6 +6446,18 @@ dependencies = [ "tokio-executor", ] +[[package]] +name = "tokio-tungstenite" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" +dependencies = [ + "futures-util", + "log", + "tokio 1.44.2", + "tungstenite", +] + [[package]] name = "tokio-udp" version = "0.1.6" @@ -6736,26 +6505,11 @@ dependencies = [ "tokio 1.44.2", ] -[[package]] -name = "toml" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - [[package]] name = "toml_datetime" version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" -dependencies = [ - "serde", -] [[package]] name = "toml_edit" @@ -6764,8 +6518,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap 2.9.0", - "serde", - "serde_spanned", "toml_datetime", "winnow", ] @@ -6778,10 +6530,10 @@ checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" dependencies = [ "async-stream", "async-trait", - "axum", + "axum 0.7.9", "base64 0.22.1", "bytes 1.10.1", - "h2 0.4.8", + "h2 0.4.9", "http 1.3.1", "http-body 1.0.1", "http-body-util", @@ -6859,6 +6611,23 @@ dependencies = [ "tokio 1.44.2", "tower-layer", "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" +dependencies = [ + "bitflags 2.9.0", + "bytes 1.10.1", + "http 1.3.1", + "http-body 1.0.1", + "pin-project-lite", + "tower-layer", + "tower-service", + "tracing", ] [[package]] @@ -6971,53 +6740,41 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "tungstenite" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" +dependencies = [ + "bytes 1.10.1", + "data-encoding", + "http 1.3.1", + "httparse", + "log", + "rand 0.9.0", + "sha1", + "thiserror 2.0.12", + "utf-8", +] + [[package]] name = "typenum" version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" -[[package]] -name = "ubyte" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f720def6ce1ee2fc44d40ac9ed6d3a59c361c80a75a7aa8e75bb9baed31cf2ea" -dependencies = [ - "serde", -] - [[package]] name = "ucd-trie" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" -[[package]] -name = "uncased" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" -dependencies = [ - "serde", - "version_check", -] - [[package]] name = "unicase" version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" -[[package]] -name = "unicase_serde" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ef53697679d874d69f3160af80bc28de12730a985d57bdf2b47456ccb8b11f1" -dependencies = [ - "serde", - "unicase", -] - [[package]] name = "unicode-bidi" version = "0.3.18" @@ -7400,15 +7157,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-core" version = "0.61.0" @@ -7775,9 +7523,6 @@ name = "yansi" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" -dependencies = [ - "is-terminal", -] [[package]] name = "yoke" diff --git a/server/Cargo.toml b/server/Cargo.toml index 579aeb9..f131767 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -15,8 +15,9 @@ version.workspace = true ammonia = "4.0.0" anyhow = "1.0.79" async-graphql = { version = "7", features = ["log"] } -async-graphql-rocket = "7" +async-graphql-axum = "7.0.15" async-trait = "0.1.81" +axum = "0.8.1" build-info = "0.0.40" cacher = { version = "0.2.0", registry = "xinu" } chrono = "0.4.39" @@ -24,6 +25,8 @@ clap = { version = "4.5.23", features = ["derive"] } css-inline = "0.14.0" futures = "0.3.31" html-escape = "0.2.13" +letterbox-notmuch = { version = "0.12.1", path = "../notmuch", registry = "xinu" } +letterbox-shared = { version = "0.12.1", path = "../shared", registry = "xinu" } linkify = "0.10.0" log = "0.4.17" lol_html = "2.0.0" @@ -32,8 +35,6 @@ maplit = "1.0.2" memmap = "0.7.0" regex = "1.11.1" reqwest = { version = "0.12.7", features = ["blocking"] } -rocket = { version = "0.5.0-rc.2", features = ["json"] } -rocket_cors = "0.6.0" scraper = "0.23.0" serde = { version = "1.0.147", features = ["derive"] } serde_json = "1.0.87" @@ -41,14 +42,13 @@ sqlx = { version = "0.8.2", features = ["postgres", "runtime-tokio", "time"] } tantivy = { version = "0.24.0", optional = true } thiserror = "2.0.0" tokio = "1.26.0" +tower-http = { version = "0.6.2", features = ["trace"] } tracing = "0.1.41" url = "2.5.2" urlencoding = "2.1.3" -#xtracing = { path = "../../xtracing" } #xtracing = { git = "http://git-private.h.xinu.tv/wathiede/xtracing.git" } +#xtracing = { path = "../../xtracing" } xtracing = { version = "0.3.0", registry = "xinu" } -letterbox-notmuch = { version = "0.12.1", path = "../notmuch", registry = "xinu" } -letterbox-shared = { version = "0.12.1", path = "../shared", registry = "xinu" } [build-dependencies] build-info-build = "0.0.40" diff --git a/server/Rocket.toml b/server/Rocket.toml index 8aaba95..deedd9f 100644 --- a/server/Rocket.toml +++ b/server/Rocket.toml @@ -5,7 +5,6 @@ newsreader_database_url = "postgres://newsreader@nixos-07.h.xinu.tv/newsreader" newsreader_tantivy_db_path = "../target/database/newsreader" [debug] -address = "0.0.0.0" port = 9345 # Uncomment to make it production like. #log_level = "critical" diff --git a/server/src/bin/letterbox-server.rs b/server/src/bin/letterbox-server.rs index e0a3999..dce9a9b 100644 --- a/server/src/bin/letterbox-server.rs +++ b/server/src/bin/letterbox-server.rs @@ -1,12 +1,15 @@ // Rocket generates a lot of warnings for handlers // TODO: figure out why #![allow(unreachable_patterns)] -#[macro_use] -extern crate rocket; use std::{error::Error, io::Cursor, str::FromStr}; -use async_graphql::{extensions, http::GraphiQLSource, EmptySubscription, Schema}; -use async_graphql_rocket::{GraphQLQuery, GraphQLRequest, GraphQLResponse}; +use async_graphql::{extensions, http::GraphiQLSource, Schema}; +use async_graphql_axum::{GraphQL, GraphQLSubscription}; +use axum::{ + response::{self, IntoResponse}, + routing::get, + Router, +}; use cacher::FilesystemCacher; use letterbox_notmuch::{Notmuch, NotmuchError, ThreadSet}; #[cfg(feature = "tantivy")] @@ -14,20 +17,14 @@ use letterbox_server::tantivy::TantivyConnection; use letterbox_server::{ config::Config, error::ServerError, - graphql::{Attachment, GraphqlSchema, Mutation, QueryRoot, Subscription}, + graphql::{Attachment, GraphqlSchema, MutationRoot, QueryRoot, SubscriptionRoot}, nm::{attachment_bytes, cid_attachment_bytes}, }; -use rocket::{ - fairing::AdHoc, - http::{ContentType, Header}, - request::Request, - response::{content, Debug, Responder}, - serde::json::Json, - Response, State, -}; -use rocket_cors::{AllowedHeaders, AllowedOrigins}; use sqlx::postgres::PgPool; +use tokio::net::TcpListener; +use tower_http::trace::TraceLayer; +/* #[get("/show//pretty")] async fn show_pretty( nm: &State, @@ -243,3 +240,41 @@ async fn main() -> Result<(), Box> { rkt.launch().await?; Ok(()) } +*/ + +async fn graphiql() -> impl IntoResponse { + response::Html( + GraphiQLSource::build() + .endpoint("/api/") + .subscription_endpoint("/api/ws") + .finish(), + ) +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + let _guard = xtracing::init(env!("CARGO_BIN_NAME"))?; + let schema = Schema::build(QueryRoot, MutationRoot, SubscriptionRoot) + //.data(Storage::default()) + .finish(); + + let app = Router::new() + .route( + "/api/", + get(graphiql).post_service(GraphQL::new(schema.clone())), + ) + .route_service("/api/ws", GraphQLSubscription::new(schema)) + .layer( + TraceLayer::new_for_http() + .on_request(tower_http::trace::DefaultOnRequest::new().level(tracing::Level::INFO)) + .on_response( + tower_http::trace::DefaultOnResponse::new().level(tracing::Level::INFO), + ) + .on_failure(tower_http::trace::DefaultOnFailure::new().level(tracing::Level::WARN)), + ); + + axum::serve(TcpListener::bind("0.0.0.0:9345").await.unwrap(), app) + .await + .unwrap(); + Ok(()) +} diff --git a/server/src/graphql.rs b/server/src/graphql.rs index ee603a0..21e73b3 100644 --- a/server/src/graphql.rs +++ b/server/src/graphql.rs @@ -3,7 +3,8 @@ use std::{fmt, str::FromStr}; use async_graphql::{ connection::{self, Connection, Edge, OpaqueCursor}, futures_util::{Stream, StreamExt}, - Context, Enum, Error, FieldResult, InputObject, Object, Schema, SimpleObject, Union, + Context, Enum, Error, FieldResult, InputObject, Object, Schema, SimpleObject, Subscription, + Union, }; use cacher::FilesystemCacher; use futures::stream; @@ -594,9 +595,9 @@ async fn tantivy_search( .collect()) } -pub struct Mutation; +pub struct MutationRoot; #[Object] -impl Mutation { +impl MutationRoot { #[instrument(skip_all, fields(query=query, unread=unread, rid=request_id()))] async fn set_read_status<'ctx>( &self, @@ -648,6 +649,7 @@ impl Mutation { tantivy.drop_and_load_index()?; tantivy.reindex_all(pool).await?; + println("hit"); Ok(true) } @@ -668,12 +670,12 @@ impl Mutation { } } -pub struct Subscription; -#[async_graphql::Subscription] -impl Subscription { +pub struct SubscriptionRoot; +#[Subscription] +impl SubscriptionRoot { async fn values(&self, ctx: &Context<'_>) -> Result, Error> { Ok(stream::iter(0..10)) } } -pub type GraphqlSchema = Schema; +pub type GraphqlSchema = Schema; diff --git a/web/Trunk.toml b/web/Trunk.toml index 88e253b..517fa5e 100644 --- a/web/Trunk.toml +++ b/web/Trunk.toml @@ -6,6 +6,10 @@ release = false address = "0.0.0.0" port = 6758 +[[proxy]] +ws = true +backend = "ws://localhost:9345/api/ws" + [[proxy]] backend = "http://localhost:9345/api/"