tracks lexicons and how many times they appeared on the jetstream

refactor(server): drop atproto-jetstream, use tokio-websockets directly, improve ctrl_c and jetstream connection retries

ptr.pet 0e76b961 fddc6d5e

verified
+143 -1667
server/Cargo.lock
···
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
[[package]]
-
name = "aho-corasick"
-
version = "1.1.3"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
-
dependencies = [
-
"memchr",
-
]
-
-
[[package]]
-
name = "allocator-api2"
-
version = "0.2.21"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
-
-
[[package]]
name = "anyhow"
version = "1.0.98"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
]
[[package]]
-
name = "atomic-waker"
-
version = "1.1.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
-
-
[[package]]
-
name = "atproto-identity"
-
version = "0.9.7"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "85d7eea5300f8d380d7bf8e016644499cf3203cf7e22a1d414c2c8e8340aa5d8"
-
dependencies = [
-
"anyhow",
-
"async-trait",
-
"axum",
-
"ecdsa",
-
"elliptic-curve",
-
"hickory-resolver",
-
"http",
-
"k256",
-
"lru",
-
"multibase",
-
"p256",
-
"p384",
-
"rand 0.8.5",
-
"reqwest",
-
"serde",
-
"serde_ipld_dagcbor",
-
"serde_json",
-
"thiserror 2.0.12",
-
"tokio",
-
"tracing",
-
]
-
-
[[package]]
-
name = "atproto-jetstream"
-
version = "0.9.7"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "975a29eae86db5aa3acc768079c158437207df18bc1352f6aa848a9821895b10"
-
dependencies = [
-
"anyhow",
-
"async-trait",
-
"atproto-identity",
-
"futures",
-
"http",
-
"serde",
-
"serde_json",
-
"thiserror 2.0.12",
-
"tokio",
-
"tokio-util",
-
"tokio-websockets",
-
"tracing",
-
"tracing-subscriber",
-
"urlencoding",
-
"zstd",
-
]
-
-
[[package]]
name = "autocfg"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5"
dependencies = [
"axum-core",
-
"axum-macros",
-
"base64",
"bytes",
-
"form_urlencoded",
"futures-util",
"http",
"http-body",
···
"serde",
"serde_json",
"serde_path_to_error",
-
"serde_urlencoded",
-
"sha1",
"sync_wrapper",
"tokio",
-
"tokio-tungstenite",
"tower",
"tower-layer",
"tower-service",
···
]
[[package]]
-
name = "axum-macros"
+
name = "axum-tws"
version = "0.5.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "604fde5e028fea851ce1d8570bbdc034bec850d157f7569d10f347d06808c05c"
+
source = "git+https://github.com/90-008/axum-tws.git#34b89132c5331d6faae9b10912977f9dae5d53ff"
dependencies = [
-
"proc-macro2",
-
"quote",
-
"syn",
+
"axum-core",
+
"base64",
+
"bytes",
+
"futures-util",
+
"http",
+
"hyper",
+
"hyper-util",
+
"sha1",
+
"tokio",
+
"tokio-websockets",
]
[[package]]
···
]
[[package]]
-
name = "base-x"
-
version = "0.2.11"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270"
-
-
[[package]]
-
name = "base16ct"
-
version = "0.2.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
-
-
[[package]]
name = "base64"
version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
-
-
[[package]]
-
name = "base64ct"
-
version = "1.8.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba"
[[package]]
name = "bitflags"
···
checksum = "6236364b88b9b6d0bc181ba374cf1ab55ba3ef97a1cb6f8cddad48a273767fb5"
[[package]]
-
name = "cbor4ii"
-
version = "0.2.14"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "b544cf8c89359205f4f990d0e6f3828db42df85b5dac95d09157a250eb0749c4"
-
dependencies = [
-
"serde",
-
]
-
-
[[package]]
name = "cc"
version = "1.2.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7"
dependencies = [
-
"jobserver",
-
"libc",
"shlex",
]
[[package]]
+
name = "cesu8"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+
[[package]]
name = "cfg-if"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]]
-
name = "cid"
-
version = "0.11.1"
+
name = "combine"
+
version = "4.6.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a"
+
checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
dependencies = [
-
"core2",
-
"multibase",
-
"multihash",
-
"serde",
-
"serde_bytes",
-
"unsigned-varint",
+
"bytes",
+
"memchr",
]
[[package]]
···
checksum = "ea0095f6103c2a8b44acd6fd15960c801dafebf02e21940360833e0673f48ba7"
[[package]]
-
name = "const-oid"
-
version = "0.9.6"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
-
-
[[package]]
-
name = "core-foundation"
-
version = "0.9.4"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
-
dependencies = [
-
"core-foundation-sys",
-
"libc",
-
]
-
-
[[package]]
name = "core-foundation"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
-
name = "core2"
-
version = "0.4.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
-
dependencies = [
-
"memchr",
-
]
-
-
[[package]]
name = "cpufeatures"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
]
[[package]]
-
name = "critical-section"
-
version = "1.2.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
-
-
[[package]]
-
name = "crossbeam-channel"
-
version = "0.5.15"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
-
dependencies = [
-
"crossbeam-utils",
-
]
-
-
[[package]]
name = "crossbeam-epoch"
version = "0.9.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
-
name = "crypto-bigint"
-
version = "0.5.5"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
-
dependencies = [
-
"generic-array",
-
"rand_core 0.6.4",
-
"subtle",
-
"zeroize",
-
]
-
-
[[package]]
name = "crypto-common"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
]
[[package]]
-
name = "data-encoding"
-
version = "2.9.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
-
-
[[package]]
-
name = "data-encoding-macro"
-
version = "0.1.18"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d"
-
dependencies = [
-
"data-encoding",
-
"data-encoding-macro-internal",
-
]
-
-
[[package]]
-
name = "data-encoding-macro-internal"
-
version = "0.1.16"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976"
-
dependencies = [
-
"data-encoding",
-
"syn",
-
]
-
-
[[package]]
-
name = "der"
-
version = "0.7.10"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
-
dependencies = [
-
"const-oid",
-
"pem-rfc7468",
-
"zeroize",
-
]
-
-
[[package]]
name = "digest"
version = "0.10.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer",
-
"const-oid",
"crypto-common",
-
"subtle",
-
]
-
-
[[package]]
-
name = "displaydoc"
-
version = "0.2.5"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
-
dependencies = [
-
"proc-macro2",
-
"quote",
-
"syn",
]
[[package]]
···
checksum = "c0d05e1c0dbad51b52c38bda7adceef61b9efc2baf04acfe8726a8c4630a6f57"
[[package]]
-
name = "ecdsa"
-
version = "0.16.9"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
-
dependencies = [
-
"der",
-
"digest",
-
"elliptic-curve",
-
"rfc6979",
-
"signature",
-
"spki",
-
]
-
-
[[package]]
-
name = "elliptic-curve"
-
version = "0.13.8"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
-
dependencies = [
-
"base16ct",
-
"base64ct",
-
"crypto-bigint",
-
"digest",
-
"ff",
-
"generic-array",
-
"group",
-
"hkdf",
-
"pem-rfc7468",
-
"pkcs8",
-
"rand_core 0.6.4",
-
"sec1",
-
"serde_json",
-
"serdect",
-
"subtle",
-
"zeroize",
-
]
-
-
[[package]]
-
name = "encoding_rs"
-
version = "0.8.35"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
-
dependencies = [
-
"cfg-if",
-
]
-
-
[[package]]
-
name = "enum-as-inner"
-
version = "0.6.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc"
-
dependencies = [
-
"heck",
-
"proc-macro2",
-
"quote",
-
"syn",
-
]
-
-
[[package]]
name = "enum_dispatch"
version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
[[package]]
-
name = "ff"
-
version = "0.13.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393"
-
dependencies = [
-
"rand_core 0.6.4",
-
"subtle",
-
]
-
-
[[package]]
name = "fjall"
-
version = "2.11.1"
+
version = "2.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "f5cb653019268f6dc8de3b254b633a2d233a775054349b804b9cfbf18bbe3426"
+
checksum = "0b25ad44cd4360a0448a9b5a0a6f1c7a621101cca4578706d43c9a821418aebc"
dependencies = [
"byteorder",
"byteview",
···
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
-
name = "foldhash"
-
version = "0.1.5"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
-
-
[[package]]
-
name = "form_urlencoded"
-
version = "1.2.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
-
dependencies = [
-
"percent-encoding",
-
]
-
-
[[package]]
-
name = "futures"
-
version = "0.3.31"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
-
dependencies = [
-
"futures-channel",
-
"futures-core",
-
"futures-executor",
-
"futures-io",
-
"futures-sink",
-
"futures-task",
-
"futures-util",
-
]
-
-
[[package]]
name = "futures-channel"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
dependencies = [
"futures-core",
-
"futures-sink",
]
[[package]]
···
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
[[package]]
-
name = "futures-executor"
-
version = "0.3.31"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
-
dependencies = [
-
"futures-core",
-
"futures-task",
-
"futures-util",
-
]
-
-
[[package]]
-
name = "futures-io"
-
version = "0.3.31"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
-
-
[[package]]
name = "futures-macro"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
dependencies = [
-
"futures-channel",
"futures-core",
-
"futures-io",
"futures-macro",
"futures-sink",
"futures-task",
-
"memchr",
"pin-project-lite",
"pin-utils",
"slab",
]
[[package]]
-
name = "generator"
-
version = "0.8.5"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827"
-
dependencies = [
-
"cc",
-
"cfg-if",
-
"libc",
-
"log",
-
"rustversion",
-
"windows",
-
]
-
-
[[package]]
name = "generic-array"
version = "0.14.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
dependencies = [
"typenum",
"version_check",
-
"zeroize",
]
[[package]]
···
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
dependencies = [
"cfg-if",
-
"js-sys",
"libc",
"wasi 0.11.1+wasi-snapshot-preview1",
-
"wasm-bindgen",
]
[[package]]
···
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
dependencies = [
"cfg-if",
-
"js-sys",
"libc",
"r-efi",
"wasi 0.14.2+wasi-0.2.4",
-
"wasm-bindgen",
]
[[package]]
···
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
[[package]]
-
name = "group"
-
version = "0.13.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
-
dependencies = [
-
"ff",
-
"rand_core 0.6.4",
-
"subtle",
-
]
-
-
[[package]]
name = "guardian"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17e2ac29387b1aa07a1e448f7bb4f35b500787971e965b02842b900afa5c8f6f"
[[package]]
-
name = "h2"
-
version = "0.4.11"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785"
-
dependencies = [
-
"atomic-waker",
-
"bytes",
-
"fnv",
-
"futures-core",
-
"futures-sink",
-
"http",
-
"indexmap",
-
"slab",
-
"tokio",
-
"tokio-util",
-
"tracing",
-
]
-
-
[[package]]
name = "hashbrown"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
version = "0.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
-
dependencies = [
-
"allocator-api2",
-
"equivalent",
-
"foldhash",
-
]
-
-
[[package]]
-
name = "heck"
-
version = "0.5.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
-
-
[[package]]
-
name = "hickory-proto"
-
version = "0.25.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502"
-
dependencies = [
-
"async-trait",
-
"cfg-if",
-
"data-encoding",
-
"enum-as-inner",
-
"futures-channel",
-
"futures-io",
-
"futures-util",
-
"idna",
-
"ipnet",
-
"once_cell",
-
"rand 0.9.1",
-
"ring",
-
"thiserror 2.0.12",
-
"tinyvec",
-
"tokio",
-
"tracing",
-
"url",
-
]
-
-
[[package]]
-
name = "hickory-resolver"
-
version = "0.25.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a"
-
dependencies = [
-
"cfg-if",
-
"futures-util",
-
"hickory-proto",
-
"ipconfig",
-
"moka",
-
"once_cell",
-
"parking_lot",
-
"rand 0.9.1",
-
"resolv-conf",
-
"smallvec",
-
"thiserror 2.0.12",
-
"tokio",
-
"tracing",
-
]
-
-
[[package]]
-
name = "hkdf"
-
version = "0.12.4"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
-
dependencies = [
-
"hmac",
-
]
-
-
[[package]]
-
name = "hmac"
-
version = "0.12.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
-
dependencies = [
-
"digest",
-
]
[[package]]
name = "http"
···
"bytes",
"futures-channel",
"futures-util",
-
"h2",
"http",
"http-body",
"httparse",
···
"pin-project-lite",
"smallvec",
"tokio",
-
"want",
-
]
-
-
[[package]]
-
name = "hyper-rustls"
-
version = "0.27.7"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58"
-
dependencies = [
-
"http",
-
"hyper",
-
"hyper-util",
-
"rustls",
-
"rustls-pki-types",
-
"tokio",
-
"tokio-rustls",
-
"tower-service",
-
"webpki-roots",
]
[[package]]
name = "hyper-util"
-
version = "0.1.15"
+
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df"
+
checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e"
dependencies = [
-
"base64",
"bytes",
-
"futures-channel",
"futures-core",
-
"futures-util",
"http",
"http-body",
"hyper",
-
"ipnet",
-
"libc",
-
"percent-encoding",
"pin-project-lite",
-
"socket2",
-
"system-configuration",
"tokio",
"tower-service",
-
"tracing",
-
"windows-registry",
-
]
-
-
[[package]]
-
name = "icu_collections"
-
version = "2.0.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
-
dependencies = [
-
"displaydoc",
-
"potential_utf",
-
"yoke",
-
"zerofrom",
-
"zerovec",
-
]
-
-
[[package]]
-
name = "icu_locale_core"
-
version = "2.0.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
-
dependencies = [
-
"displaydoc",
-
"litemap",
-
"tinystr",
-
"writeable",
-
"zerovec",
-
]
-
-
[[package]]
-
name = "icu_normalizer"
-
version = "2.0.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
-
dependencies = [
-
"displaydoc",
-
"icu_collections",
-
"icu_normalizer_data",
-
"icu_properties",
-
"icu_provider",
-
"smallvec",
-
"zerovec",
-
]
-
-
[[package]]
-
name = "icu_normalizer_data"
-
version = "2.0.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
-
-
[[package]]
-
name = "icu_properties"
-
version = "2.0.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
-
dependencies = [
-
"displaydoc",
-
"icu_collections",
-
"icu_locale_core",
-
"icu_properties_data",
-
"icu_provider",
-
"potential_utf",
-
"zerotrie",
-
"zerovec",
-
]
-
-
[[package]]
-
name = "icu_properties_data"
-
version = "2.0.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
-
-
[[package]]
-
name = "icu_provider"
-
version = "2.0.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
-
dependencies = [
-
"displaydoc",
-
"icu_locale_core",
-
"stable_deref_trait",
-
"tinystr",
-
"writeable",
-
"yoke",
-
"zerofrom",
-
"zerotrie",
-
"zerovec",
-
]
-
-
[[package]]
-
name = "idna"
-
version = "1.0.3"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
-
dependencies = [
-
"idna_adapter",
-
"smallvec",
-
"utf8_iter",
-
]
-
-
[[package]]
-
name = "idna_adapter"
-
version = "1.2.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
-
dependencies = [
-
"icu_normalizer",
-
"icu_properties",
]
[[package]]
···
[[package]]
name = "io-uring"
-
version = "0.7.8"
+
version = "0.7.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013"
+
checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4"
dependencies = [
"bitflags",
"cfg-if",
···
]
[[package]]
-
name = "ipconfig"
-
version = "0.3.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
-
dependencies = [
-
"socket2",
-
"widestring",
-
"windows-sys 0.48.0",
-
"winreg",
-
]
-
-
[[package]]
-
name = "ipld-core"
-
version = "0.4.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "104718b1cc124d92a6d01ca9c9258a7df311405debb3408c445a36452f9bf8db"
-
dependencies = [
-
"cid",
-
"serde",
-
"serde_bytes",
-
]
-
-
[[package]]
-
name = "ipnet"
-
version = "2.11.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
-
-
[[package]]
-
name = "iri-string"
-
version = "0.7.8"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2"
-
dependencies = [
-
"memchr",
-
"serde",
-
]
-
-
[[package]]
name = "itoa"
version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
[[package]]
-
name = "jobserver"
-
version = "0.1.33"
+
name = "jni"
+
version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
+
checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
dependencies = [
-
"getrandom 0.3.3",
-
"libc",
+
"cesu8",
+
"cfg-if",
+
"combine",
+
"jni-sys",
+
"log",
+
"thiserror",
+
"walkdir",
+
"windows-sys 0.45.0",
]
[[package]]
+
name = "jni-sys"
+
version = "0.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+
[[package]]
name = "js-sys"
version = "0.3.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
]
[[package]]
-
name = "k256"
-
version = "0.13.4"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b"
-
dependencies = [
-
"cfg-if",
-
"ecdsa",
-
"elliptic-curve",
-
"once_cell",
-
"sha2",
-
"signature",
-
]
-
-
[[package]]
name = "lazy_static"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
[[package]]
-
name = "litemap"
-
version = "0.8.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
-
-
[[package]]
name = "lock_api"
version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
[[package]]
-
name = "loom"
-
version = "0.7.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca"
-
dependencies = [
-
"cfg-if",
-
"generator",
-
"scoped-tls",
-
"tracing",
-
"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.4",
-
]
-
-
[[package]]
-
name = "lru-slab"
-
version = "0.1.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
-
-
[[package]]
name = "lsm-tree"
-
version = "2.10.1"
+
version = "2.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "1d2bd4cdc451a8dcf11329190afb9b78eb8988bed07a3da29b8d73d2e0c731ff"
+
checksum = "55b6d7475a8dd22e749186968daacf8e2a77932b061b1bd263157987bbfc0c6c"
dependencies = [
"byteorder",
"crossbeam-skiplist",
···
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75761162ae2b0e580d7e7c390558127e5f01b4194debd6221fd8c207fc80e3f5"
-
-
[[package]]
-
name = "matchers"
-
version = "0.1.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
-
dependencies = [
-
"regex-automata 0.1.10",
-
]
[[package]]
name = "matchit"
···
]
[[package]]
-
name = "moka"
-
version = "0.12.10"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926"
-
dependencies = [
-
"crossbeam-channel",
-
"crossbeam-epoch",
-
"crossbeam-utils",
-
"loom",
-
"parking_lot",
-
"portable-atomic",
-
"rustc_version",
-
"smallvec",
-
"tagptr",
-
"thiserror 1.0.69",
-
"uuid",
-
]
-
-
[[package]]
-
name = "multibase"
-
version = "0.9.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404"
-
dependencies = [
-
"base-x",
-
"data-encoding",
-
"data-encoding-macro",
-
]
-
-
[[package]]
-
name = "multihash"
-
version = "0.19.3"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d"
-
dependencies = [
-
"core2",
-
"serde",
-
"unsigned-varint",
-
]
-
-
[[package]]
name = "munge"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
-
dependencies = [
-
"critical-section",
-
"portable-atomic",
-
]
[[package]]
name = "openssl-probe"
···
checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
[[package]]
-
name = "p256"
-
version = "0.13.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
-
dependencies = [
-
"ecdsa",
-
"elliptic-curve",
-
"primeorder",
-
"sha2",
-
]
-
-
[[package]]
-
name = "p384"
-
version = "0.13.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6"
-
dependencies = [
-
"ecdsa",
-
"elliptic-curve",
-
"primeorder",
-
"sha2",
-
]
-
-
[[package]]
name = "papaya"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
]
[[package]]
-
name = "pem-rfc7468"
-
version = "0.7.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
-
dependencies = [
-
"base64ct",
-
]
-
-
[[package]]
name = "percent-encoding"
version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
-
name = "pkcs8"
-
version = "0.10.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
-
dependencies = [
-
"der",
-
"spki",
-
]
-
-
[[package]]
-
name = "pkg-config"
-
version = "0.3.32"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
-
-
[[package]]
-
name = "portable-atomic"
-
version = "1.11.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
-
-
[[package]]
-
name = "potential_utf"
-
version = "0.1.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
-
dependencies = [
-
"zerovec",
-
]
-
-
[[package]]
-
name = "ppv-lite86"
-
version = "0.2.21"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
-
dependencies = [
-
"zerocopy",
-
]
-
-
[[package]]
-
name = "primeorder"
-
version = "0.13.6"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
-
dependencies = [
-
"elliptic-curve",
-
]
-
-
[[package]]
name = "proc-macro2"
version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
[[package]]
name = "quick_cache"
-
version = "0.6.14"
+
version = "0.6.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "6b450dad8382b1b95061d5ca1eb792081fb082adf48c678791fe917509596d5f"
+
checksum = "8565e62e02af316570d4b492f17af1481d6c07cea60f4e7edd71700da5052ba9"
dependencies = [
"equivalent",
"hashbrown 0.15.4",
]
[[package]]
-
name = "quinn"
-
version = "0.11.8"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8"
-
dependencies = [
-
"bytes",
-
"cfg_aliases",
-
"pin-project-lite",
-
"quinn-proto",
-
"quinn-udp",
-
"rustc-hash",
-
"rustls",
-
"socket2",
-
"thiserror 2.0.12",
-
"tokio",
-
"tracing",
-
"web-time",
-
]
-
-
[[package]]
-
name = "quinn-proto"
-
version = "0.11.12"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e"
-
dependencies = [
-
"bytes",
-
"getrandom 0.3.3",
-
"lru-slab",
-
"rand 0.9.1",
-
"ring",
-
"rustc-hash",
-
"rustls",
-
"rustls-pki-types",
-
"slab",
-
"thiserror 2.0.12",
-
"tinyvec",
-
"tracing",
-
"web-time",
-
]
-
-
[[package]]
-
name = "quinn-udp"
-
version = "0.5.13"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970"
-
dependencies = [
-
"cfg_aliases",
-
"libc",
-
"once_cell",
-
"socket2",
-
"tracing",
-
"windows-sys 0.59.0",
-
]
-
-
[[package]]
name = "quote"
version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
]
[[package]]
-
name = "rand"
-
version = "0.8.5"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
-
dependencies = [
-
"libc",
-
"rand_chacha 0.3.1",
-
"rand_core 0.6.4",
-
]
-
-
[[package]]
-
name = "rand"
-
version = "0.9.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97"
-
dependencies = [
-
"rand_chacha 0.9.0",
-
"rand_core 0.9.3",
-
]
-
-
[[package]]
-
name = "rand_chacha"
-
version = "0.3.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
-
dependencies = [
-
"ppv-lite86",
-
"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.3",
-
]
-
-
[[package]]
-
name = "rand_core"
-
version = "0.6.4"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
-
dependencies = [
-
"getrandom 0.2.16",
-
]
-
-
[[package]]
-
name = "rand_core"
-
version = "0.9.3"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
-
dependencies = [
-
"getrandom 0.3.3",
-
]
-
-
[[package]]
name = "redox_syscall"
-
version = "0.5.13"
+
version = "0.5.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6"
+
checksum = "7e8af0dde094006011e6a740d4879319439489813bd0bcdc7d821beaeeff48ec"
dependencies = [
"bitflags",
]
[[package]]
-
name = "regex"
-
version = "1.11.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
-
dependencies = [
-
"aho-corasick",
-
"memchr",
-
"regex-automata 0.4.9",
-
"regex-syntax 0.8.5",
-
]
-
-
[[package]]
-
name = "regex-automata"
-
version = "0.1.10"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
-
dependencies = [
-
"regex-syntax 0.6.29",
-
]
-
-
[[package]]
-
name = "regex-automata"
-
version = "0.4.9"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
-
dependencies = [
-
"aho-corasick",
-
"memchr",
-
"regex-syntax 0.8.5",
-
]
-
-
[[package]]
-
name = "regex-syntax"
-
version = "0.6.29"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
-
-
[[package]]
-
name = "regex-syntax"
-
version = "0.8.5"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
-
-
[[package]]
name = "rend"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
]
[[package]]
-
name = "reqwest"
-
version = "0.12.22"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531"
-
dependencies = [
-
"base64",
-
"bytes",
-
"encoding_rs",
-
"futures-core",
-
"h2",
-
"http",
-
"http-body",
-
"http-body-util",
-
"hyper",
-
"hyper-rustls",
-
"hyper-util",
-
"js-sys",
-
"log",
-
"mime",
-
"percent-encoding",
-
"pin-project-lite",
-
"quinn",
-
"rustls",
-
"rustls-pki-types",
-
"serde",
-
"serde_json",
-
"serde_urlencoded",
-
"sync_wrapper",
-
"tokio",
-
"tokio-rustls",
-
"tower",
-
"tower-http",
-
"tower-service",
-
"url",
-
"wasm-bindgen",
-
"wasm-bindgen-futures",
-
"web-sys",
-
"webpki-roots",
-
]
-
-
[[package]]
-
name = "resolv-conf"
-
version = "0.7.4"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3"
-
-
[[package]]
-
name = "rfc6979"
-
version = "0.4.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
-
dependencies = [
-
"hmac",
-
"subtle",
-
]
-
-
[[package]]
name = "ring"
version = "0.17.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
[[package]]
-
name = "rustc_version"
-
version = "0.4.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
-
dependencies = [
-
"semver",
-
]
-
-
[[package]]
name = "rustix"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1"
dependencies = [
+
"log",
"once_cell",
"ring",
"rustls-pki-types",
···
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79"
dependencies = [
-
"web-time",
"zeroize",
[[package]]
+
name = "rustls-platform-verifier"
+
version = "0.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "eda84358ed17f1f354cf4b1909ad346e6c7bc2513e8c40eb08e0157aa13a9070"
+
dependencies = [
+
"core-foundation",
+
"core-foundation-sys",
+
"jni",
+
"log",
+
"once_cell",
+
"rustls",
+
"rustls-native-certs",
+
"rustls-platform-verifier-android",
+
"rustls-webpki",
+
"security-framework",
+
"security-framework-sys",
+
"webpki-root-certs",
+
"windows-sys 0.52.0",
+
]
+
+
[[package]]
+
name = "rustls-platform-verifier-android"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
+
+
[[package]]
name = "rustls-webpki"
version = "0.103.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
[[package]]
+
name = "same-file"
+
version = "1.0.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+
dependencies = [
+
"winapi-util",
+
]
+
+
[[package]]
name = "schannel"
version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
[[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"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
-
name = "sec1"
-
version = "0.7.3"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
-
dependencies = [
-
"base16ct",
-
"der",
-
"generic-array",
-
"pkcs8",
-
"serdect",
-
"subtle",
-
"zeroize",
-
]
-
-
[[package]]
name = "security-framework"
version = "3.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316"
dependencies = [
"bitflags",
-
"core-foundation 0.10.1",
+
"core-foundation",
"core-foundation-sys",
"libc",
"security-framework-sys",
···
checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749"
[[package]]
-
name = "semver"
-
version = "1.0.26"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
-
-
[[package]]
name = "serde"
version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
[[package]]
-
name = "serde_bytes"
-
version = "0.11.17"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96"
-
dependencies = [
-
"serde",
-
]
-
-
[[package]]
name = "serde_derive"
version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
[[package]]
-
name = "serde_ipld_dagcbor"
-
version = "0.6.3"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "99600723cf53fb000a66175555098db7e75217c415bdd9a16a65d52a19dcc4fc"
-
dependencies = [
-
"cbor4ii",
-
"ipld-core",
-
"scopeguard",
-
"serde",
-
]
-
-
[[package]]
name = "serde_json"
version = "1.0.141"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
[[package]]
-
name = "serde_urlencoded"
-
version = "0.7.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
-
dependencies = [
-
"form_urlencoded",
-
"itoa",
-
"ryu",
-
"serde",
-
]
-
-
[[package]]
-
name = "serdect"
-
version = "0.2.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177"
-
dependencies = [
-
"base16ct",
-
"serde",
-
]
-
-
[[package]]
name = "server"
version = "0.1.0"
dependencies = [
"anyhow",
"async-trait",
-
"atproto-jetstream",
"axum",
+
"axum-tws",
"fjall",
+
"futures-util",
"papaya",
"rkyv",
+
"rustls",
"serde",
"serde_json",
"smol_str",
"tikv-jemallocator",
"tokio",
+
"tokio-util",
+
"tokio-websockets",
"tower-http",
"tracing",
"tracing-subscriber",
···
[[package]]
-
name = "sha2"
-
version = "0.10.9"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
-
dependencies = [
-
"cfg-if",
-
"cpufeatures",
-
"digest",
-
]
-
-
[[package]]
name = "sharded-slab"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
dependencies = [
"libc",
-
]
-
-
[[package]]
-
name = "signature"
-
version = "2.2.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
-
dependencies = [
-
"digest",
-
"rand_core 0.6.4",
[[package]]
···
[[package]]
-
name = "spki"
-
version = "0.7.3"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
-
dependencies = [
-
"base64ct",
-
"der",
-
]
-
-
[[package]]
-
name = "stable_deref_trait"
-
version = "1.2.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
-
-
[[package]]
name = "std-semaphore"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
-
dependencies = [
-
"futures-core",
-
]
-
-
[[package]]
-
name = "synstructure"
-
version = "0.13.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
-
dependencies = [
-
"proc-macro2",
-
"quote",
-
"syn",
-
]
-
-
[[package]]
-
name = "system-configuration"
-
version = "0.6.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
-
dependencies = [
-
"bitflags",
-
"core-foundation 0.9.4",
-
"system-configuration-sys",
-
]
-
-
[[package]]
-
name = "system-configuration-sys"
-
version = "0.6.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
-
dependencies = [
-
"core-foundation-sys",
-
"libc",
-
]
-
-
[[package]]
-
name = "tagptr"
-
version = "0.2.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417"
[[package]]
name = "tempfile"
···
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
dependencies = [
-
"thiserror-impl 1.0.69",
-
]
-
-
[[package]]
-
name = "thiserror"
-
version = "2.0.12"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
-
dependencies = [
-
"thiserror-impl 2.0.12",
+
"thiserror-impl",
[[package]]
···
[[package]]
-
name = "thiserror-impl"
-
version = "2.0.12"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
-
dependencies = [
-
"proc-macro2",
-
"quote",
-
"syn",
-
]
-
-
[[package]]
name = "thread_local"
version = "1.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
dependencies = [
"libc",
"tikv-jemalloc-sys",
-
]
-
-
[[package]]
-
name = "tinystr"
-
version = "0.8.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
-
dependencies = [
-
"displaydoc",
-
"zerovec",
[[package]]
···
dependencies = [
"rustls",
"tokio",
-
]
-
-
[[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",
-
"tungstenite",
[[package]]
···
"futures-sink",
"pin-project-lite",
"tokio",
+
"tracing",
[[package]]
name = "tokio-websockets"
-
version = "0.11.4"
+
version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "9fcaf159b4e7a376b05b5bfd77bfd38f3324f5fce751b4213bfc7eaa47affb4e"
+
checksum = "3f29ba084eb43becc9864ba514b4a64f5f65b82f9a6ffbafa5436c1c80605f03"
dependencies = [
"base64",
"bytes",
"futures-core",
"futures-sink",
+
"getrandom 0.3.3",
"http",
"httparse",
-
"rand 0.9.1",
"ring",
-
"rustls-native-certs",
"rustls-pki-types",
+
"rustls-platform-verifier",
"simdutf8",
"tokio",
"tokio-rustls",
···
"tokio",
"tower-layer",
"tower-service",
-
"tracing",
[[package]]
···
dependencies = [
"bitflags",
"bytes",
-
"futures-util",
"http",
"http-body",
-
"iri-string",
"pin-project-lite",
-
"tower",
"tower-layer",
"tower-service",
+
"tracing",
"uuid",
···
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
dependencies = [
-
"log",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
···
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
dependencies = [
-
"matchers",
"nu-ansi-term",
-
"once_cell",
-
"regex",
"sharded-slab",
"smallvec",
"thread_local",
-
"tracing",
"tracing-core",
"tracing-log",
[[package]]
-
name = "try-lock"
-
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",
-
"data-encoding",
-
"http",
-
"httparse",
-
"log",
-
"rand 0.9.1",
-
"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 = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
[[package]]
-
name = "unsigned-varint"
-
version = "0.8.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06"
-
-
[[package]]
name = "untrusted"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
[[package]]
-
name = "url"
-
version = "2.5.4"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
-
dependencies = [
-
"form_urlencoded",
-
"idna",
-
"percent-encoding",
-
]
-
-
[[package]]
-
name = "urlencoding"
-
version = "2.1.3"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
-
-
[[package]]
-
name = "utf-8"
-
version = "0.7.6"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
-
-
[[package]]
-
name = "utf8_iter"
-
version = "1.0.4"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
-
-
[[package]]
name = "uuid"
version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
-
name = "want"
-
version = "0.3.1"
+
name = "walkdir"
+
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
dependencies = [
-
"try-lock",
+
"same-file",
+
"winapi-util",
[[package]]
···
"quote",
"syn",
"wasm-bindgen-shared",
-
]
-
-
[[package]]
-
name = "wasm-bindgen-futures"
-
version = "0.4.50"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
-
dependencies = [
-
"cfg-if",
-
"js-sys",
-
"once_cell",
-
"wasm-bindgen",
-
"web-sys",
[[package]]
···
[[package]]
-
name = "web-sys"
-
version = "0.3.77"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
-
dependencies = [
-
"js-sys",
-
"wasm-bindgen",
-
]
-
-
[[package]]
-
name = "web-time"
-
version = "1.1.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
-
dependencies = [
-
"js-sys",
-
"wasm-bindgen",
-
]
-
-
[[package]]
-
name = "webpki-roots"
-
version = "1.0.2"
+
name = "webpki-root-certs"
+
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2"
+
checksum = "86138b15b2b7d561bc4469e77027b8dd005a43dc502e9031d1f5afc8ce1f280e"
dependencies = [
"rustls-pki-types",
[[package]]
-
name = "widestring"
-
version = "1.2.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d"
-
-
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
-
name = "winapi-x86_64-pc-windows-gnu"
-
version = "0.4.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-
-
[[package]]
-
name = "windows"
-
version = "0.61.3"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
-
dependencies = [
-
"windows-collections",
-
"windows-core",
-
"windows-future",
-
"windows-link",
-
"windows-numerics",
-
]
-
-
[[package]]
-
name = "windows-collections"
-
version = "0.2.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
-
dependencies = [
-
"windows-core",
-
]
-
-
[[package]]
-
name = "windows-core"
-
version = "0.61.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
-
dependencies = [
-
"windows-implement",
-
"windows-interface",
-
"windows-link",
-
"windows-result",
-
"windows-strings",
-
]
-
-
[[package]]
-
name = "windows-future"
-
version = "0.2.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
-
dependencies = [
-
"windows-core",
-
"windows-link",
-
"windows-threading",
-
]
-
-
[[package]]
-
name = "windows-implement"
-
version = "0.60.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
-
dependencies = [
-
"proc-macro2",
-
"quote",
-
"syn",
-
]
-
-
[[package]]
-
name = "windows-interface"
-
version = "0.59.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
-
dependencies = [
-
"proc-macro2",
-
"quote",
-
"syn",
-
]
-
-
[[package]]
-
name = "windows-link"
-
version = "0.1.3"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
-
-
[[package]]
-
name = "windows-numerics"
-
version = "0.2.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
-
dependencies = [
-
"windows-core",
-
"windows-link",
-
]
-
-
[[package]]
-
name = "windows-registry"
-
version = "0.5.3"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e"
-
dependencies = [
-
"windows-link",
-
"windows-result",
-
"windows-strings",
-
]
-
-
[[package]]
-
name = "windows-result"
-
version = "0.3.4"
+
name = "winapi-util"
+
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
+
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [
-
"windows-link",
+
"windows-sys 0.59.0",
[[package]]
-
name = "windows-strings"
-
version = "0.4.2"
+
name = "winapi-x86_64-pc-windows-gnu"
+
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
-
dependencies = [
-
"windows-link",
-
]
+
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-sys"
-
version = "0.48.0"
+
version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
dependencies = [
-
"windows-targets 0.48.5",
+
"windows-targets 0.42.2",
[[package]]
···
[[package]]
name = "windows-targets"
-
version = "0.48.5"
+
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
dependencies = [
-
"windows_aarch64_gnullvm 0.48.5",
-
"windows_aarch64_msvc 0.48.5",
-
"windows_i686_gnu 0.48.5",
-
"windows_i686_msvc 0.48.5",
-
"windows_x86_64_gnu 0.48.5",
-
"windows_x86_64_gnullvm 0.48.5",
-
"windows_x86_64_msvc 0.48.5",
+
"windows_aarch64_gnullvm 0.42.2",
+
"windows_aarch64_msvc 0.42.2",
+
"windows_i686_gnu 0.42.2",
+
"windows_i686_msvc 0.42.2",
+
"windows_x86_64_gnu 0.42.2",
+
"windows_x86_64_gnullvm 0.42.2",
+
"windows_x86_64_msvc 0.42.2",
[[package]]
···
[[package]]
-
name = "windows-threading"
-
version = "0.1.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
-
dependencies = [
-
"windows-link",
-
]
-
-
[[package]]
name = "windows_aarch64_gnullvm"
-
version = "0.48.5"
+
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
[[package]]
name = "windows_aarch64_gnullvm"
···
[[package]]
name = "windows_aarch64_msvc"
-
version = "0.48.5"
+
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
[[package]]
name = "windows_aarch64_msvc"
···
[[package]]
name = "windows_i686_gnu"
-
version = "0.48.5"
+
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
[[package]]
name = "windows_i686_gnu"
···
[[package]]
name = "windows_i686_msvc"
-
version = "0.48.5"
+
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
[[package]]
name = "windows_i686_msvc"
···
[[package]]
name = "windows_x86_64_gnu"
-
version = "0.48.5"
+
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
[[package]]
name = "windows_x86_64_gnu"
···
[[package]]
name = "windows_x86_64_gnullvm"
-
version = "0.48.5"
+
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
[[package]]
name = "windows_x86_64_gnullvm"
···
[[package]]
name = "windows_x86_64_msvc"
-
version = "0.48.5"
+
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
[[package]]
name = "windows_x86_64_msvc"
···
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
[[package]]
-
name = "winreg"
-
version = "0.50.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
-
dependencies = [
-
"cfg-if",
-
"windows-sys 0.48.0",
-
]
-
-
[[package]]
name = "wit-bindgen-rt"
version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
[[package]]
-
name = "writeable"
-
version = "0.6.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
-
-
[[package]]
name = "xxhash-rust"
version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3"
[[package]]
-
name = "yoke"
-
version = "0.8.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
-
dependencies = [
-
"serde",
-
"stable_deref_trait",
-
"yoke-derive",
-
"zerofrom",
-
]
-
-
[[package]]
-
name = "yoke-derive"
-
version = "0.8.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
-
dependencies = [
-
"proc-macro2",
-
"quote",
-
"syn",
-
"synstructure",
-
]
-
-
[[package]]
-
name = "zerocopy"
-
version = "0.8.26"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
-
dependencies = [
-
"zerocopy-derive",
-
]
-
-
[[package]]
-
name = "zerocopy-derive"
-
version = "0.8.26"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
-
dependencies = [
-
"proc-macro2",
-
"quote",
-
"syn",
-
]
-
-
[[package]]
-
name = "zerofrom"
-
version = "0.1.6"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
-
dependencies = [
-
"zerofrom-derive",
-
]
-
-
[[package]]
-
name = "zerofrom-derive"
-
version = "0.1.6"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
-
dependencies = [
-
"proc-macro2",
-
"quote",
-
"syn",
-
"synstructure",
-
]
-
-
[[package]]
name = "zeroize"
version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
-
-
[[package]]
-
name = "zerotrie"
-
version = "0.2.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
-
dependencies = [
-
"displaydoc",
-
"yoke",
-
"zerofrom",
-
]
-
-
[[package]]
-
name = "zerovec"
-
version = "0.11.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
-
dependencies = [
-
"yoke",
-
"zerofrom",
-
"zerovec-derive",
-
]
-
-
[[package]]
-
name = "zerovec-derive"
-
version = "0.11.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
-
dependencies = [
-
"proc-macro2",
-
"quote",
-
"syn",
-
]
-
-
[[package]]
-
name = "zstd"
-
version = "0.13.3"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a"
-
dependencies = [
-
"zstd-safe",
-
]
-
-
[[package]]
-
name = "zstd-safe"
-
version = "7.2.4"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d"
-
dependencies = [
-
"zstd-sys",
-
]
-
-
[[package]]
-
name = "zstd-sys"
-
version = "2.0.15+zstd.1.5.7"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237"
-
dependencies = [
-
"cc",
-
"pkg-config",
-
]
+8 -4
server/Cargo.toml
···
tracing-subscriber = "0.3"
tracing = "0.1"
tokio = { version = "1", features = ["full"] }
-
axum = { version = "0.8", features = ["json", "ws"] }
-
tower-http = {version = "0.6", features = ["request-id"]}
-
atproto-jetstream = "0.9"
+
tokio-util = { version = "0.7", features = ["tracing"] }
+
rustls = { version = "0.23", default-features = false, features = ["log", "ring", "std"] }
+
tokio-websockets = { version = "0.12", features = ["client", "rustls-platform-verifier", "getrandom", "ring"] }
+
futures-util = "0.3"
+
axum = { version = "0.8", default-features = false, features = ["http1", "tokio", "tracing", "json"] }
+
axum-tws = { git = "https://github.com/90-008/axum-tws.git" }
+
tower-http = {version = "0.6", features = ["request-id", "trace"]}
fjall = { version = "2", default-features = false, features = ["miniz", "lz4"] }
rkyv = {version = "0.8", features = ["unaligned"]}
smol_str = { version = "0.3", features = ["serde"] }
papaya = "0.2"
-
serde = "1"
+
serde = { version = "1", features = ["derive"] }
serde_json = "1.0.141"
[target.'cfg(not(target_env = "msvc"))'.dependencies]
+24 -27
server/src/api.rs
···
use std::{net::SocketAddr, sync::Arc};
-
use axum::{
-
Json, Router,
-
extract::{Request, State, WebSocketUpgrade, ws::Message},
-
middleware::Next,
-
response::Response,
-
routing::get,
-
};
+
use anyhow::anyhow;
+
use axum::{Json, Router, extract::State, response::Response, routing::get};
+
use axum_tws::{Message, WebSocketUpgrade};
use serde::Serialize;
use smol_str::SmolStr;
+
use tokio_util::sync::CancellationToken;
+
use tower_http::{
+
request_id::{MakeRequestUuid, PropagateRequestIdLayer, SetRequestIdLayer},
+
trace::TraceLayer,
+
};
-
use crate::{db::Db, error::AppResult};
+
use crate::{
+
db::Db,
+
error::{AppError, AppResult},
+
};
-
pub async fn serve(db: Arc<Db>) {
+
pub async fn serve(db: Arc<Db>, cancel_token: CancellationToken) -> AppResult<()> {
let app = Router::new()
.route("/events", get(events))
.route("/stream_events", get(stream_events))
-
.route_layer(axum::middleware::from_fn(log))
+
.route_layer(SetRequestIdLayer::x_request_id(MakeRequestUuid))
+
.route_layer(TraceLayer::new_for_http())
+
.route_layer(PropagateRequestIdLayer::x_request_id())
.with_state(db);
let addr = SocketAddr::from((
···
.and_then(|s| s.parse::<u16>().ok())
.unwrap_or(3713),
));
-
let listener = tokio::net::TcpListener::bind(addr).await.unwrap();
-
tracing::info!("starting serve on {addr}");
-
axum::serve(listener, app).await.unwrap();
-
}
+
let listener = tokio::net::TcpListener::bind(addr).await?;
-
async fn log(req: Request, next: Next) -> Response {
-
let method = req.method().clone();
-
let uri = req.uri().clone();
-
let resp = next.run(req).await;
-
if resp.status().is_server_error() {
-
tracing::error!("{method} {uri} ({})", resp.status());
-
} else {
-
tracing::info!("{method} {uri} ({})", resp.status());
+
tracing::info!("starting serve on {addr}");
+
tokio::select! {
+
res = axum::serve(listener, app) => res.map_err(AppError::from),
+
_ = cancel_token.cancelled() => Err(anyhow!("cancelled").into()),
}
-
resp
}
#[derive(Serialize)]
···
let mut listener = db.new_listener();
while let Ok((nsid, counts)) = listener.recv().await {
let res = socket
-
.send(Message::Binary(
-
serde_json::to_vec(&NsidCount {
+
.send(Message::text(
+
serde_json::to_string(&NsidCount {
nsid,
count: counts.count,
deleted_count: counts.deleted_count,
last_seen: counts.last_seen,
})
-
.unwrap()
-
.into(),
+
.unwrap(),
))
.await;
if let Err(err) = res {
server/src/bsky_zstd_dictionary

This is a binary file and will not be displayed.

+4 -2
server/src/db.rs
···
use std::{ops::Deref, path::Path};
-
use atproto_jetstream::JetstreamEvent;
use fjall::{Config, Keyspace, Partition, PartitionCreateOptions};
use rkyv::{Archive, Deserialize, Serialize, rancor::Error};
use smol_str::SmolStr;
use tokio::sync::broadcast;
-
use crate::error::{AppError, AppResult};
+
use crate::{
+
error::{AppError, AppResult},
+
jetstream::JetstreamEvent,
+
};
#[derive(Clone, Debug, Default, Archive, Deserialize, Serialize, PartialEq)]
#[rkyv(compare(PartialEq), derive(Debug))]
+8 -7
server/src/error.rs
···
-
use std::{error::Error, fmt::Display};
+
use std::fmt::Display;
use axum::{Json, http::StatusCode, response::IntoResponse};
use serde::Serialize;
#[derive(Debug)]
pub struct AppError {
-
inner: Box<dyn Error + Send + 'static>,
+
inner: anyhow::Error,
}
impl Display for AppError {
···
}
}
-
impl<E: Error + Send + 'static> From<E> for AppError {
-
fn from(value: E) -> Self {
-
Self {
-
inner: Box::new(value),
-
}
+
impl<E> From<E> for AppError
+
where
+
E: Into<anyhow::Error>,
+
{
+
fn from(err: E) -> Self {
+
Self { inner: err.into() }
}
}
+187
server/src/jetstream.rs
···
+
use std::time::Duration;
+
+
use anyhow::anyhow;
+
use futures_util::{SinkExt, StreamExt};
+
use serde::{Deserialize, Serialize};
+
use smol_str::SmolStr;
+
use tokio::net::TcpStream;
+
use tokio_util::sync::CancellationToken;
+
use tokio_websockets::{ClientBuilder, MaybeTlsStream, Message as WsMessage, WebSocketStream};
+
+
use crate::error::AppResult;
+
+
pub struct JetstreamClient {
+
stream: Option<WebSocketStream<MaybeTlsStream<TcpStream>>>,
+
tls_connector: tokio_websockets::Connector,
+
url: SmolStr,
+
}
+
+
impl JetstreamClient {
+
pub fn new(url: &str) -> AppResult<Self> {
+
Ok(Self {
+
stream: None,
+
tls_connector: tokio_websockets::Connector::new()?,
+
url: SmolStr::new(url),
+
})
+
}
+
+
pub async fn connect(&mut self) -> AppResult<()> {
+
let (stream, _) = ClientBuilder::new()
+
.connector(&self.tls_connector)
+
.uri(&self.url)?
+
.connect()
+
.await?;
+
self.stream = Some(stream);
+
tracing::info!("connected to jetstream ({})", self.url);
+
Ok(())
+
}
+
+
// automatically retries connection, only returning error if it fails many times
+
pub async fn read(&mut self, cancel_token: CancellationToken) -> AppResult<JetstreamEvent> {
+
let mut retry = false;
+
loop {
+
{
+
let Some(stream) = self.stream.as_mut() else {
+
return Err(anyhow!("not connected, call .connect() first").into());
+
};
+
tokio::select! {
+
res = stream.next() => match res {
+
Some(Ok(msg)) => {
+
if let Some(event) = msg
+
.as_text()
+
.and_then(|v| serde_json::from_str::<JetstreamEvent>(v).ok())
+
{
+
return Ok(event);
+
} else if msg.is_ping() {
+
let _ = stream.send(WsMessage::pong(msg.into_payload())).await;
+
} else {
+
return Err(anyhow!("unsupported message type").into());
+
}
+
}
+
Some(Err(err)) => {
+
tracing::error!("jetstream connection errored: {err}");
+
retry = true;
+
}
+
None => retry = true,
+
},
+
_ = cancel_token.cancelled() => {
+
return Err(anyhow!("cancelled").into());
+
}
+
}
+
}
+
// retry until connected
+
let mut backoff = Duration::from_secs(1);
+
while retry {
+
if backoff.as_secs() > 64 {
+
return Err(anyhow!("jetstream connection timed out").into());
+
}
+
tokio::select! {
+
res = self.connect() => if let Err(err) = res {
+
tracing::error!(
+
{ retry_in = %backoff.as_secs() },
+
"couldn't retry jetstream connection: {err}",
+
);
+
tokio::time::sleep(backoff).await;
+
backoff *= 2;
+
continue;
+
},
+
_ = cancel_token.cancelled() => {
+
return Err(anyhow!("cancelled").into());
+
}
+
}
+
+
retry = false;
+
}
+
}
+
}
+
}
+
+
#[derive(Debug, Clone, Serialize, Deserialize)]
+
#[serde(untagged)]
+
pub enum JetstreamEvent {
+
/// Repository commit event (create/update operations)
+
Commit {
+
/// DID of the repository that was updated
+
did: String,
+
/// Event timestamp in microseconds since Unix epoch
+
time_us: u64,
+
/// Event type identifier
+
kind: String,
+
+
#[serde(rename = "commit")]
+
/// Commit operation details
+
commit: JetstreamEventCommit,
+
},
+
+
/// Repository delete event
+
Delete {
+
/// DID of the repository that was updated
+
did: String,
+
/// Event timestamp in microseconds since Unix epoch
+
time_us: u64,
+
/// Event type identifier
+
kind: String,
+
+
#[serde(rename = "commit")]
+
/// Delete operation details
+
commit: JetstreamEventDelete,
+
},
+
+
/// Identity document update event
+
Identity {
+
/// DID whose identity was updated
+
did: String,
+
/// Event timestamp in microseconds since Unix epoch
+
time_us: u64,
+
/// Event type identifier
+
kind: String,
+
+
#[serde(rename = "identity")]
+
/// Identity document data
+
identity: serde_json::Value,
+
},
+
+
/// Account-related event
+
Account {
+
/// DID of the account
+
did: String,
+
/// Event timestamp in microseconds since Unix epoch
+
time_us: u64,
+
/// Event type identifier
+
kind: String,
+
+
#[serde(rename = "account")]
+
/// Account data
+
identity: serde_json::Value,
+
},
+
}
+
+
/// Repository commit operation details
+
#[derive(Debug, Clone, Serialize, Deserialize)]
+
pub struct JetstreamEventCommit {
+
/// Repository revision identifier
+
pub rev: String,
+
/// Operation type (create, update)
+
pub operation: String,
+
/// AT Protocol collection name
+
pub collection: String,
+
/// Record key within the collection
+
pub rkey: String,
+
/// Content identifier (CID) of the record
+
pub cid: String,
+
/// Record data as JSON
+
pub record: serde_json::Value,
+
}
+
+
/// Repository delete operation details
+
#[derive(Debug, Clone, Serialize, Deserialize)]
+
pub struct JetstreamEventDelete {
+
/// Repository revision identifier
+
pub rev: String,
+
/// Operation type (delete)
+
pub operation: String,
+
/// AT Protocol collection name
+
pub collection: String,
+
/// Record key that was deleted
+
pub rkey: String,
+
}
+61 -56
server/src/main.rs
···
use std::{ops::Deref, sync::Arc};
-
use atproto_jetstream::{CancellationToken, Consumer, EventHandler, JetstreamEvent};
use smol_str::ToSmolStr;
#[cfg(not(target_env = "msvc"))]
use tikv_jemallocator::Jemalloc;
-
use tokio::sync::mpsc::{Receiver, Sender};
+
use tokio_util::sync::CancellationToken;
use crate::{
api::serve,
db::{Db, EventRecord},
+
error::AppError,
+
jetstream::JetstreamClient,
};
mod api;
mod db;
mod error;
+
mod jetstream;
#[cfg(not(target_env = "msvc"))]
#[global_allocator]
static GLOBAL: Jemalloc = Jemalloc;
-
const BSKY_ZSTD_DICT: &[u8] = include_bytes!("./bsky_zstd_dictionary");
-
-
struct JetstreamHandler {
-
tx: Sender<EventRecord>,
-
}
-
-
impl JetstreamHandler {
-
fn new() -> (Self, Receiver<EventRecord>) {
-
let (tx, rx) = tokio::sync::mpsc::channel(1000);
-
(Self { tx }, rx)
-
}
-
}
-
-
#[async_trait::async_trait]
-
impl EventHandler for JetstreamHandler {
-
async fn handle_event(&self, event: JetstreamEvent) -> anyhow::Result<()> {
-
if let Some(e) = EventRecord::from_jetstream(event) {
-
self.tx.send(e).await?;
-
}
-
Ok(())
-
}
-
-
fn handler_id(&self) -> String {
-
"handler".to_string()
-
}
-
}
-
#[tokio::main]
async fn main() {
tracing_subscriber::fmt::fmt().compact().init();
···
let db = Arc::new(Db::new(".fjall_data").expect("couldnt create db"));
-
tokio::fs::write("./bsky_zstd_dictionary", BSKY_ZSTD_DICT)
-
.await
-
.expect("could not write bsky zstd dict");
+
rustls::crypto::ring::default_provider()
+
.install_default()
+
.expect("cant install rustls crypto provider");
-
let jetstream = Consumer::new(atproto_jetstream::ConsumerTaskConfig {
-
compression: true,
-
jetstream_hostname: "jetstream2.us-west.bsky.network".into(),
-
collections: Vec::new(),
-
dids: Vec::new(),
-
max_message_size_bytes: None,
-
cursor: None,
-
require_hello: true,
-
zstd_dictionary_location: "./bsky_zstd_dictionary".into(),
-
user_agent: "nsid-tracker/0.0.1".into(),
-
});
+
let mut jetstream =
+
match JetstreamClient::new("wss://jetstream2.us-west.bsky.network/subscribe") {
+
Ok(client) => client,
+
Err(err) => {
+
tracing::error!("can't create jetstream client: {err}");
+
return;
+
}
+
};
-
let (event_handler, mut event_rx) = JetstreamHandler::new();
+
let cancel_token = CancellationToken::new();
+
let (event_tx, mut event_rx) = tokio::sync::mpsc::channel(1000);
-
let cancel_token = CancellationToken::new();
-
tokio::spawn(async move {
-
jetstream
-
.register_handler(Arc::new(event_handler))
-
.await
-
.expect("cant register handler");
-
jetstream
-
.run_background(cancel_token.clone())
-
.await
-
.expect("cant run jetstream");
+
let consume_events = tokio::spawn({
+
let consume_cancel = cancel_token.child_token();
+
async move {
+
jetstream.connect().await?;
+
loop {
+
tokio::select! {
+
maybe_event = jetstream.read(consume_cancel.child_token()) => match maybe_event {
+
Ok(event) => {
+
let Some(record) = EventRecord::from_jetstream(event) else {
+
continue;
+
};
+
let _ = event_tx.send(record).await;
+
}
+
Err(err) => return Err(err),
+
},
+
_ = consume_cancel.cancelled() => break Ok(()),
+
}
+
}
+
}
});
-
std::thread::spawn({
+
let ingest_events = std::thread::spawn({
let db = db.clone();
move || {
tracing::info!("starting ingest events thread...");
···
}
});
-
serve(db).await;
+
tokio::select! {
+
res = serve(db, cancel_token.child_token()) => {
+
if let Err(e) = res {
+
tracing::error!("serve failed: {}", e);
+
}
+
}
+
res = consume_events => {
+
let err =
+
res
+
.map_err(AppError::from)
+
.and_then(std::convert::identity)
+
.expect_err("consume events cant return ok");
+
tracing::error!("consume events failed: {}", err);
+
},
+
_ = tokio::signal::ctrl_c() => {
+
tracing::info!("received ctrl+c!");
+
cancel_token.cancel();
+
}
+
}
+
+
tracing::info!("shutting down...");
+
ingest_events
+
.join()
+
.expect("failed to join ingest events thread");
}
fn migrate_to_miniz() {