From 6e97eb1899c711ca5a92208a4bd78f0b77c88efc Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 22 May 2025 15:22:43 -0700 Subject: [PATCH 1/7] Atproto, move atproto to separate lib. Start converting to workspaces --- Cargo.lock | 1156 ++++------------- Cargo.toml | 29 +- atproto/Cargo.toml | 8 + {src => atproto/src}/lexicons/mod.rs | 0 {src => atproto/src}/lexicons/my.rs | 0 {src => atproto/src}/lexicons/my/spoor.rs | 0 .../src}/lexicons/my/spoor/content.rs | 0 .../lexicons/my/spoor/content/external.rs | 0 .../src}/lexicons/my/spoor/content/media.rs | 0 .../src}/lexicons/my/spoor/content/title.rs | 0 {src => atproto/src}/lexicons/my/spoor/log.rs | 0 .../src}/lexicons/my/spoor/log/activity.rs | 0 .../src}/lexicons/my/spoor/log/session.rs | 0 {src => atproto/src}/lexicons/record.rs | 0 src/atproto.rs => atproto/src/lib.rs | 19 +- 15 files changed, 246 insertions(+), 966 deletions(-) create mode 100644 atproto/Cargo.toml rename {src => atproto/src}/lexicons/mod.rs (100%) rename {src => atproto/src}/lexicons/my.rs (100%) rename {src => atproto/src}/lexicons/my/spoor.rs (100%) rename {src => atproto/src}/lexicons/my/spoor/content.rs (100%) rename {src => atproto/src}/lexicons/my/spoor/content/external.rs (100%) rename {src => atproto/src}/lexicons/my/spoor/content/media.rs (100%) rename {src => atproto/src}/lexicons/my/spoor/content/title.rs (100%) rename {src => atproto/src}/lexicons/my/spoor/log.rs (100%) rename {src => atproto/src}/lexicons/my/spoor/log/activity.rs (100%) rename {src => atproto/src}/lexicons/my/spoor/log/session.rs (100%) rename {src => atproto/src}/lexicons/record.rs (100%) rename src/atproto.rs => atproto/src/lib.rs (90%) diff --git a/Cargo.lock b/Cargo.lock index 796c756..4f60d66 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,18 +17,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy 0.7.35", -] - [[package]] name = "aho-corasick" version = "1.1.3" @@ -60,10 +48,15 @@ dependencies = [ ] [[package]] -name = "anyhow" -version = "1.0.98" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +name = "api" +version = "0.1.0" +dependencies = [ + "axum", + "http", + "tokio", + "tracing", + "tracing-subscriber", +] [[package]] name = "async-lock" @@ -76,17 +69,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-trait" -version = "0.1.88" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "atoi" version = "2.0.0" @@ -96,16 +78,24 @@ dependencies = [ "num-traits", ] +[[package]] +name = "atproto" +version = "0.1.0" +dependencies = [ + "atrium-api", + "lazy-regex", +] + [[package]] name = "atrium-api" -version = "0.25.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d4eb9b4787aba546015c8ccda1d3924c157cee13d67848997fba74ac8144a07" +checksum = "7225f0ca3c78564b784828e3db3e92619cf6e786530c3468df73f49deebc0bd4" dependencies = [ "atrium-common", "atrium-xrpc", "chrono", - "http 1.3.1", + "http", "ipld-core", "langtag", "regex", @@ -118,9 +108,9 @@ dependencies = [ [[package]] name = "atrium-common" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba30d2f9e1a8b3db8fc97d0a5f91ee5a28f8acdddb771ad74c1b08eda357ca3d" +checksum = "9ed5610654043faa396a5a15afac0ac646d76aebe45aebd7cef4f8b96b0ab7f4" dependencies = [ "dashmap", "lru", @@ -131,23 +121,13 @@ dependencies = [ "web-time", ] -[[package]] -name = "atrium-lex" -version = "0.1.0" -source = "git+https://github.com/sugyan/atrium.git?rev=f162f815a04b5ecb0421b390d521c883c41d5f75#f162f815a04b5ecb0421b390d521c883c41d5f75" -dependencies = [ - "serde", - "serde_repr", - "serde_with", -] - [[package]] name = "atrium-xrpc" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a9e526cb2ed3e0a2ca78c3ce2a943d9041a68e067dadf42923b523771e07df" +checksum = "0216ad50ce34e9ff982e171c3659e65dedaa2ed5ac2994524debdc9a9647ffa8" dependencies = [ - "http 1.3.1", + "http", "serde", "serde_html_form", "serde_json", @@ -163,15 +143,15 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de45108900e1f9b9242f7f2e254aa3e2c029c921c258fe9e6b4217eeebd54288" +checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" dependencies = [ "axum-core", "bytes", "form_urlencoded", "futures-util", - "http 1.3.1", + "http", "http-body", "http-body-util", "hyper", @@ -203,7 +183,7 @@ checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" dependencies = [ "bytes", "futures-core", - "http 1.3.1", + "http", "http-body", "http-body-util", "mime", @@ -215,22 +195,11 @@ dependencies = [ "tracing", ] -[[package]] -name = "axum-macros" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604fde5e028fea851ce1d8570bbdc034bec850d157f7569d10f347d06808c05c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", "cfg-if", @@ -247,18 +216,6 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" @@ -273,9 +230,9 @@ checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" [[package]] name = "bitflags" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" dependencies = [ "serde", ] @@ -289,31 +246,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "bon" -version = "3.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced38439e7a86a4761f7f7d5ded5ff009135939ecb464a24452eaa4c1696af7d" -dependencies = [ - "bon-macros", - "rustversion", -] - -[[package]] -name = "bon-macros" -version = "3.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce61d2d3844c6b8d31b2353d9f66cf5e632b3e9549583fe3cac2f4f6136725e" -dependencies = [ - "darling", - "ident_case", - "prettyplease", - "proc-macro2", - "quote", - "rustversion", - "syn", -] - [[package]] name = "bumpalo" version = "3.17.0" @@ -334,12 +266,10 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.2.20" +version = "1.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04da6a0d40b948dfc4fa8f5bbf402b0fc1a64a28dbf7d12ffd683550f2c1b63a" +checksum = "5f4ac86a9e5bc1e2b3449ab9d7d3a6a405e3d1bb28d7b9be8614f55846ae3766" dependencies = [ - "jobserver", - "libc", "shlex", ] @@ -351,9 +281,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", @@ -393,16 +323,6 @@ 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-sys" version = "0.8.7" @@ -429,9 +349,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.2.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" dependencies = [ "crc-catalog", ] @@ -485,41 +405,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "darling" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" -dependencies = [ - "darling_core", - "quote", - "syn", -] - [[package]] name = "dashmap" version = "6.1.0" @@ -560,6 +445,14 @@ dependencies = [ "syn", ] +[[package]] +name = "db" +version = "0.1.0" +dependencies = [ + "sqlx", + "tokio", +] + [[package]] name = "der" version = "0.7.10" @@ -571,47 +464,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "deranged" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" -dependencies = [ - "powerfmt", - "serde", -] - -[[package]] -name = "derive_builder" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive_builder_macro" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" -dependencies = [ - "derive_builder_core", - "syn", -] - [[package]] name = "digest" version = "0.10.7" @@ -656,32 +508,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" -[[package]] -name = "errno" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "esquema-codegen" -version = "0.1.0" -source = "git+https://github.com/fatfingers23/esquema.git?branch=main#9ef00b9d631b746bd6396fb46ba255eb9360e43f" -dependencies = [ - "atrium-lex", - "heck 0.4.1", - "itertools", - "prettyplease", - "proc-macro2", - "quote", - "serde", - "serde_json", - "syn", -] - [[package]] name = "etcetera" version = "0.8.0" @@ -714,12 +540,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - [[package]] name = "flume" version = "0.11.1" @@ -728,7 +548,6 @@ checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ "futures-core", "futures-sink", - "nanorand", "spin", ] @@ -839,10 +658,11 @@ dependencies = [ [[package]] name = "generator" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" +checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" dependencies = [ + "cc", "cfg-if", "libc", "log", @@ -862,22 +682,20 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", "libc", @@ -891,12 +709,6 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - [[package]] name = "hashbrown" version = "0.14.5" @@ -905,9 +717,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" dependencies = [ "allocator-api2", "equivalent", @@ -920,15 +732,9 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.15.2", + "hashbrown 0.15.3", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" @@ -968,17 +774,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" version = "1.3.1" @@ -997,7 +792,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.3.1", + "http", ] [[package]] @@ -1008,7 +803,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.3.1", + "http", "http-body", "pin-project-lite", ] @@ -1034,7 +829,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.3.1", + "http", "http-body", "httparse", "httpdate", @@ -1046,13 +841,13 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" +checksum = "cf9f1e950e0d9d1d3c47184416723cf29c0d1f93bd8cccf37e4beb6b44f31710" dependencies = [ "bytes", "futures-util", - "http 1.3.1", + "http", "http-body", "hyper", "pin-project-lite", @@ -1072,7 +867,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.0", + "windows-core", ] [[package]] @@ -1086,21 +881,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -1109,31 +905,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -1141,73 +917,54 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "idna" version = "1.0.3" @@ -1221,25 +978,14 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", ] -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - [[package]] name = "indexmap" version = "2.9.0" @@ -1247,9 +993,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.15.3", ] +[[package]] +name = "ingestor" +version = "0.1.0" + [[package]] name = "ipld-core" version = "0.4.2" @@ -1261,31 +1011,12 @@ dependencies = [ "serde_bytes", ] -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - [[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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" -dependencies = [ - "getrandom 0.3.2", - "libc", -] - [[package]] name = "js-sys" version = "0.3.77" @@ -1339,15 +1070,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.171" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libm" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libsqlite3-sys" @@ -1359,17 +1090,11 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "linux-raw-sys" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" - [[package]] name = "litemap" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" @@ -1406,7 +1131,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.2", + "hashbrown 0.15.3", ] [[package]] @@ -1440,16 +1165,6 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "metrics" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dea7ac8057892855ec285c440160265225438c3c45072613c25a4b26e98ef5" -dependencies = [ - "ahash", - "portable-atomic", -] - [[package]] name = "mime" version = "0.3.17" @@ -1520,15 +1235,6 @@ dependencies = [ "unsigned-varint", ] -[[package]] -name = "nanorand" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" -dependencies = [ - "getrandom 0.2.15", -] - [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -1556,12 +1262,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - [[package]] name = "num-integer" version = "0.1.46" @@ -1607,12 +1307,6 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - [[package]] name = "overload" version = "0.1.1" @@ -1709,10 +1403,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] -name = "powerfmt" -version = "0.2.0" +name = "potential_utf" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] [[package]] name = "ppv-lite86" @@ -1720,24 +1417,14 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.24", -] - -[[package]] -name = "prettyplease" -version = "0.2.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" -dependencies = [ - "proc-macro2", - "syn", + "zerocopy", ] [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] @@ -1784,14 +1471,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] name = "redox_syscall" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" +checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ "bitflags", ] @@ -1828,15 +1515,6 @@ dependencies = [ "regex-syntax 0.8.5", ] -[[package]] -name = "regex-macro" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d306632607af6ec61c0b117971d57a96381b6317cf18ae419b5558048fe016e" -dependencies = [ - "regex", -] - [[package]] name = "regex-syntax" version = "0.6.29" @@ -1849,44 +1527,6 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.15", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "rocketman" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3aae946adbfdcf80cad8793e02d8eb94be06c925331aa56aeb446795893361" -dependencies = [ - "anyhow", - "async-trait", - "bon", - "derive_builder", - "flume", - "futures-util", - "metrics", - "rand", - "serde", - "serde_json", - "tokio", - "tokio-tungstenite", - "tracing", - "tracing-subscriber", - "url", - "zstd", -] - [[package]] name = "rsa" version = "0.9.8" @@ -1907,28 +1547,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rust" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "atrium-api", - "axum", - "axum-macros", - "esquema-codegen", - "http 1.3.1", - "lazy-regex", - "regex-macro", - "rocketman", - "serde", - "serde_json", - "sqlx", - "tokio", - "tracing", - "tracing-subscriber", -] - [[package]] name = "rustc-demangle" version = "0.1.24" @@ -1944,67 +1562,11 @@ dependencies = [ "semver", ] -[[package]] -name = "rustix" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.59.0", -] - -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki", - "sct", -] - -[[package]] -name = "rustls-native-certs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" -dependencies = [ - "openssl-probe", - "rustls-pemfile", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "ryu" @@ -2012,15 +1574,6 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" -[[package]] -name = "schannel" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" -dependencies = [ - "windows-sys 0.59.0", -] - [[package]] name = "scoped-tls" version = "1.0.1" @@ -2033,39 +1586,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "semver" version = "1.0.26" @@ -2108,7 +1628,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d2de91cf02bbc07cde38891769ccd5d4f073d22a40683aa4bc7a95781aaa2c4" dependencies = [ "form_urlencoded", - "indexmap 2.9.0", + "indexmap", "itoa", "ryu", "serde", @@ -2136,17 +1656,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_repr" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -2159,34 +1668,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_with" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" -dependencies = [ - "base64 0.13.1", - "chrono", - "hex", - "indexmap 1.9.3", - "serde", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "sha1" version = "0.10.6" @@ -2200,9 +1681,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -2283,9 +1764,9 @@ dependencies = [ [[package]] name = "sqlx" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c3a85280daca669cfd3bcb68a337882a8bc57ec882f72c5d13a430613a738e" +checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" dependencies = [ "sqlx-core", "sqlx-macros", @@ -2296,11 +1777,11 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f743f2a3cea30a58cd479013f75550e879009e3a02f616f18ca699335aa248c3" +checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "crc", "crossbeam-queue", @@ -2310,9 +1791,9 @@ dependencies = [ "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.15.2", + "hashbrown 0.15.3", "hashlink", - "indexmap 2.9.0", + "indexmap", "log", "memchr", "once_cell", @@ -2322,17 +1803,15 @@ dependencies = [ "sha2", "smallvec", "thiserror 2.0.12", - "tokio", - "tokio-stream", "tracing", "url", ] [[package]] name = "sqlx-macros" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4200e0fde19834956d4252347c12a083bdcb237d7a1a1446bffd8768417dce" +checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" dependencies = [ "proc-macro2", "quote", @@ -2343,13 +1822,13 @@ dependencies = [ [[package]] name = "sqlx-macros-core" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "882ceaa29cade31beca7129b6beeb05737f44f82dbe2a9806ecea5a7093d00b7" +checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" dependencies = [ "dotenvy", "either", - "heck 0.5.0", + "heck", "hex", "once_cell", "proc-macro2", @@ -2362,19 +1841,17 @@ dependencies = [ "sqlx-postgres", "sqlx-sqlite", "syn", - "tempfile", - "tokio", "url", ] [[package]] name = "sqlx-mysql" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0afdd3aa7a629683c2d750c2df343025545087081ab5942593a5288855b1b7a7" +checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", - "base64 0.22.1", + "base64", "bitflags", "byteorder", "bytes", @@ -2411,12 +1888,12 @@ dependencies = [ [[package]] name = "sqlx-postgres" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0bedbe1bbb5e2615ef347a5e9d8cd7680fb63e77d9dafc0f29be15e53f1ebe6" +checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", - "base64 0.22.1", + "base64", "bitflags", "byteorder", "crc", @@ -2448,9 +1925,9 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c26083e9a520e8eb87a06b12347679b142dc2ea29e6e409f805644a7a979a5bc" +checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" dependencies = [ "atoi", "flume", @@ -2487,12 +1964,6 @@ dependencies = [ "unicode-properties", ] -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - [[package]] name = "subtle" version = "2.6.1" @@ -2501,9 +1972,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.100" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", @@ -2518,9 +1989,9 @@ checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", @@ -2533,19 +2004,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" -[[package]] -name = "tempfile" -version = "3.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" -dependencies = [ - "fastrand", - "getrandom 0.3.2", - "once_cell", - "rustix", - "windows-sys 0.59.0", -] - [[package]] name = "thiserror" version = "1.0.69" @@ -2596,42 +2054,11 @@ dependencies = [ "once_cell", ] -[[package]] -name = "time" -version = "0.3.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" - -[[package]] -name = "time-macros" -version = "0.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" -dependencies = [ - "num-conv", - "time-core", -] - [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", @@ -2654,12 +2081,11 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.44.2" +version = "1.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" +checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" dependencies = [ "backtrace", - "bytes", "libc", "mio", "pin-project-lite", @@ -2679,43 +2105,6 @@ dependencies = [ "syn", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" -dependencies = [ - "futures-util", - "log", - "rustls", - "rustls-native-certs", - "tokio", - "tokio-rustls", - "tungstenite", - "webpki-roots", -] - [[package]] name = "tower" version = "0.5.2" @@ -2817,26 +2206,6 @@ dependencies = [ "syn", ] -[[package]] -name = "tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 0.2.12", - "httparse", - "log", - "rand", - "rustls", - "sha1", - "thiserror 1.0.69", - "url", - "utf-8", -] - [[package]] name = "typenum" version = "1.18.0" @@ -2876,12 +2245,6 @@ 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" @@ -2893,18 +2256,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -2917,7 +2268,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.3.3", ] [[package]] @@ -3027,12 +2378,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - [[package]] name = "whoami" version = "1.6.0" @@ -3067,49 +2412,48 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.58.0" +version = "0.61.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +checksum = "c5ee8f3d025738cb02bad7868bbb5f8a6327501e870bf51f1b455b0a2454a419" dependencies = [ - "windows-core 0.58.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-core" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" -dependencies = [ - "windows-implement 0.58.0", - "windows-interface 0.58.0", - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-core" -version = "0.61.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" -dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", + "windows-collections", + "windows-core", + "windows-future", "windows-link", - "windows-result 0.3.2", - "windows-strings 0.4.0", + "windows-numerics", ] [[package]] -name = "windows-implement" -version = "0.58.0" +name = "windows-collections" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ - "proc-macro2", - "quote", - "syn", + "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]] @@ -3123,17 +2467,6 @@ dependencies = [ "syn", ] -[[package]] -name = "windows-interface" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "windows-interface" version = "0.59.1" @@ -3152,38 +2485,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" [[package]] -name = "windows-result" +name = "windows-numerics" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ - "windows-targets 0.52.6", + "windows-core", + "windows-link", ] [[package]] name = "windows-result" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.1.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" -dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-strings" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ "windows-link", ] @@ -3246,6 +2570,15 @@ dependencies = [ "windows_x86_64_msvc 0.52.6", ] +[[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" @@ -3345,23 +2678,17 @@ dependencies = [ "bitflags", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -3371,9 +2698,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", @@ -3383,38 +2710,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" dependencies = [ - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" -dependencies = [ - "zerocopy-derive 0.8.24", + "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" dependencies = [ "proc-macro2", "quote", @@ -3449,10 +2756,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] -name = "zerovec" -version = "0.10.4" +name = "zerotrie" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +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", @@ -3461,39 +2779,11 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +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", -] diff --git a/Cargo.toml b/Cargo.toml index 0dfa374..d1d65a1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,26 +1,3 @@ -[package] -name = "rust" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -anyhow = "1.0.98" -async-trait = "0.1.88" -atrium-api = { version = "0.25.2", default-features = false } -axum = { version = "0.8.3", features = ["json"] } -axum-macros = "0.5.0" -http = "1.3.1" -lazy-regex = "3.4.1" -regex-macro = "0.3.0" -rocketman = "0.2.0" -serde = "1.0.219" -serde_json = "1.0.140" -sqlx = { version = "0.8.5", features = ["postgres", "runtime-tokio"] } -tokio = { version = "1.44.2", features = ["macros", "rt-multi-thread"] } -tracing = "0.1.41" -tracing-subscriber = "0.3.19" - -[build-dependencies] -esquema-codegen = { git = "https://github.com/fatfingers23/esquema.git", branch = "main" } +[workspace] +resolver = "3" +members = [ "api", "atproto","db", "ingestor"] diff --git a/atproto/Cargo.toml b/atproto/Cargo.toml new file mode 100644 index 0000000..1cdd783 --- /dev/null +++ b/atproto/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "atproto" +version = "0.1.0" +edition = "2024" + +[dependencies] +atrium-api = { version = "0.25.3", default-features = false } +lazy-regex = "3.4.1" diff --git a/src/lexicons/mod.rs b/atproto/src/lexicons/mod.rs similarity index 100% rename from src/lexicons/mod.rs rename to atproto/src/lexicons/mod.rs diff --git a/src/lexicons/my.rs b/atproto/src/lexicons/my.rs similarity index 100% rename from src/lexicons/my.rs rename to atproto/src/lexicons/my.rs diff --git a/src/lexicons/my/spoor.rs b/atproto/src/lexicons/my/spoor.rs similarity index 100% rename from src/lexicons/my/spoor.rs rename to atproto/src/lexicons/my/spoor.rs diff --git a/src/lexicons/my/spoor/content.rs b/atproto/src/lexicons/my/spoor/content.rs similarity index 100% rename from src/lexicons/my/spoor/content.rs rename to atproto/src/lexicons/my/spoor/content.rs diff --git a/src/lexicons/my/spoor/content/external.rs b/atproto/src/lexicons/my/spoor/content/external.rs similarity index 100% rename from src/lexicons/my/spoor/content/external.rs rename to atproto/src/lexicons/my/spoor/content/external.rs diff --git a/src/lexicons/my/spoor/content/media.rs b/atproto/src/lexicons/my/spoor/content/media.rs similarity index 100% rename from src/lexicons/my/spoor/content/media.rs rename to atproto/src/lexicons/my/spoor/content/media.rs diff --git a/src/lexicons/my/spoor/content/title.rs b/atproto/src/lexicons/my/spoor/content/title.rs similarity index 100% rename from src/lexicons/my/spoor/content/title.rs rename to atproto/src/lexicons/my/spoor/content/title.rs diff --git a/src/lexicons/my/spoor/log.rs b/atproto/src/lexicons/my/spoor/log.rs similarity index 100% rename from src/lexicons/my/spoor/log.rs rename to atproto/src/lexicons/my/spoor/log.rs diff --git a/src/lexicons/my/spoor/log/activity.rs b/atproto/src/lexicons/my/spoor/log/activity.rs similarity index 100% rename from src/lexicons/my/spoor/log/activity.rs rename to atproto/src/lexicons/my/spoor/log/activity.rs diff --git a/src/lexicons/my/spoor/log/session.rs b/atproto/src/lexicons/my/spoor/log/session.rs similarity index 100% rename from src/lexicons/my/spoor/log/session.rs rename to atproto/src/lexicons/my/spoor/log/session.rs diff --git a/src/lexicons/record.rs b/atproto/src/lexicons/record.rs similarity index 100% rename from src/lexicons/record.rs rename to atproto/src/lexicons/record.rs diff --git a/src/atproto.rs b/atproto/src/lib.rs similarity index 90% rename from src/atproto.rs rename to atproto/src/lib.rs index a58f8b6..21f8919 100644 --- a/src/atproto.rs +++ b/atproto/src/lib.rs @@ -10,6 +10,8 @@ pub use atrium_api::types::{ } }; +pub mod lexicons; + pub struct Uri { whole: String, // These fields could be useful in the future, @@ -19,12 +21,9 @@ pub struct Uri { // rkey: Option, } -impl Uri { - pub fn as_str(&self) -> &str { - self.whole.as_str() - } - - pub fn from_str(uri: String) -> Result { +impl FromStr for Uri { + type Err = &'static str; + fn from_str(uri: &str) -> Result { if uri.len() > 8000 { return Err("Uri too long") } @@ -33,7 +32,7 @@ impl Uri { whole, unchecked_authority, unchecked_collection, unchecked_rkey )) = regex_captures!( r"/^at:\/\/([\w\.\-_~:]+)(?:\/([\w\.\-_~:]+)(?:)\/([\w\.\-_~:]+))?$/i", - &uri, + uri, ) else { return Err("Invalid Uri"); }; @@ -53,3 +52,9 @@ impl Uri { } } +impl Uri { + pub fn as_str(&self) -> &str { + self.whole.as_str() + } +} + From 556b6b3db6c7daee02fe2f504b3ff681a6f60294 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 22 May 2025 15:43:36 -0700 Subject: [PATCH 2/7] Api, setup. Modified atproto to get here --- Cargo.lock | 7 +++++++ Cargo.toml | 8 ++++++++ api/Cargo.toml | 14 ++++++++++++++ {src => api/src}/main.rs | 28 +++++++++------------------- {src => api/src}/router.rs | 14 ++++++-------- {src => api/src}/router/xrpc.rs | 2 +- atproto/Cargo.toml | 4 ++++ 7 files changed, 49 insertions(+), 28 deletions(-) create mode 100644 api/Cargo.toml rename {src => api/src}/main.rs (73%) rename {src => api/src}/router.rs (91%) rename {src => api/src}/router/xrpc.rs (99%) diff --git a/Cargo.lock b/Cargo.lock index 4f60d66..7cc22a4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -51,8 +51,11 @@ dependencies = [ name = "api" version = "0.1.0" dependencies = [ + "atproto", "axum", "http", + "serde", + "serde_json", "tokio", "tracing", "tracing-subscriber", @@ -84,6 +87,10 @@ version = "0.1.0" dependencies = [ "atrium-api", "lazy-regex", + "serde", + "serde_json", + "tracing", + "tracing-subscriber", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index d1d65a1..908c860 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,3 +1,11 @@ [workspace] resolver = "3" members = [ "api", "atproto","db", "ingestor"] + +[workspace.dependencies] +atproto = { path = "./atproto" } +serde = "1.0.219" +serde_json = "1.0.140" +tokio = { version = "1.45.0", features = ["macros", "rt-multi-thread"] } +tracing = "0.1.41" +tracing-subscriber = "0.3.19" diff --git a/api/Cargo.toml b/api/Cargo.toml new file mode 100644 index 0000000..1fc049c --- /dev/null +++ b/api/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "api" +version = "0.1.0" +edition = "2024" + +[dependencies] +atproto.workspace = true +axum = { version = "0.8.3", features = ["json"] } +http = "1.3.1" +serde.workspace = true +serde_json.workspace = true +tokio.workspace = true +tracing-subscriber.workspace = true +tracing.workspace = true diff --git a/src/main.rs b/api/src/main.rs similarity index 73% rename from src/main.rs rename to api/src/main.rs index 399d3be..46e17ae 100644 --- a/src/main.rs +++ b/api/src/main.rs @@ -1,24 +1,17 @@ -use crate::{ - atproto::Nsid, - ingestor::start_ingestor, - router::{ - Router, - Endpoint, - xrpc::{ - QueryInput, - ProcedureInput, - Response, - error, - }, +use crate::router::{ + Router, + Endpoint, + xrpc::{ + QueryInput, + ProcedureInput, + Response, + error, }, }; +use atproto::Nsid; use http::status::StatusCode; -mod atproto; -mod ingestor; -mod lexicons; mod router; -// mod db; #[tokio::main] async fn main() { @@ -30,9 +23,6 @@ async fn main() { let post_nsid = Nsid::new(String::from("me.woach.post")).expect("me.woach.post is a valid nsid"); router = router.add_endpoint(Endpoint::new_xrpc_query(get_nsid, test)); router = router.add_endpoint(Endpoint::new_xrpc_procedure(post_nsid, test2)); - tokio::spawn(async move { - start_ingestor().await; - }); router.serve().await; } diff --git a/src/router.rs b/api/src/router.rs similarity index 91% rename from src/router.rs rename to api/src/router.rs index f6c1b1b..bfa3b17 100644 --- a/src/router.rs +++ b/api/src/router.rs @@ -1,12 +1,10 @@ -use crate::{ - atproto::Nsid, - router::xrpc::{ - XrpcEndpoint, - XrpcHandler, - QueryInput, - ProcedureInput, - } +use crate::router::xrpc::{ + XrpcEndpoint, + XrpcHandler, + QueryInput, + ProcedureInput, }; +use atproto::Nsid; use axum::Router as AxumRouter; use core::net::SocketAddr; use std::net::{IpAddr, Ipv4Addr}; diff --git a/src/router/xrpc.rs b/api/src/router/xrpc.rs similarity index 99% rename from src/router/xrpc.rs rename to api/src/router/xrpc.rs index 3f4c74d..500f331 100644 --- a/src/router/xrpc.rs +++ b/api/src/router/xrpc.rs @@ -1,9 +1,9 @@ -use crate::atproto::Nsid; use std::{ collections::HashMap, pin::Pin, future::Future, }; +use atproto::Nsid; use axum::{ extract::{ Json, diff --git a/atproto/Cargo.toml b/atproto/Cargo.toml index 1cdd783..7d56725 100644 --- a/atproto/Cargo.toml +++ b/atproto/Cargo.toml @@ -6,3 +6,7 @@ edition = "2024" [dependencies] atrium-api = { version = "0.25.3", default-features = false } lazy-regex = "3.4.1" +serde.workspace = true +serde_json.workspace = true +tracing-subscriber.workspace = true +tracing.workspace = true From cee9bf78efba5cd38e6635717d1d3c588b7c17db Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 27 May 2025 11:47:18 -0700 Subject: [PATCH 3/7] Db, refactor start --- db/Cargo.toml | 8 ++++++++ src/db.rs => db/src/connection.rs | 14 -------------- db/src/interfaces.rs | 15 +++++++++++++++ db/src/lib.rs | 1 + 4 files changed, 24 insertions(+), 14 deletions(-) create mode 100644 db/Cargo.toml rename src/db.rs => db/src/connection.rs (93%) create mode 100644 db/src/interfaces.rs create mode 100644 db/src/lib.rs diff --git a/db/Cargo.toml b/db/Cargo.toml new file mode 100644 index 0000000..ded38de --- /dev/null +++ b/db/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "db" +version = "0.1.0" +edition = "2024" + +[dependencies] +sqlx = { version = "0.8.6", features = ["postgres", "runtime-tokio"] } +tokio = "1.45.0" diff --git a/src/db.rs b/db/src/connection.rs similarity index 93% rename from src/db.rs rename to db/src/connection.rs index 78fb640..ba883cc 100644 --- a/src/db.rs +++ b/db/src/connection.rs @@ -1,7 +1,3 @@ -use crate::atproto::{ - Did, - Uri, -} use sqlx::{ query, Database, @@ -20,11 +16,6 @@ pub struct Db { pool: Pool } -pub struct User { - userdid: Did, - handle: Handle, -} - #[non_exhaustive] enum Role { Owner, @@ -40,11 +31,6 @@ impl ToString for Role { } } -struct Participant { - participantdid: Did, - role: Role, -} - pub struct Session { sessionuri: Uri, label: Option, diff --git a/db/src/interfaces.rs b/db/src/interfaces.rs new file mode 100644 index 0000000..d3629e1 --- /dev/null +++ b/db/src/interfaces.rs @@ -0,0 +1,15 @@ +use atproto::{ + Did, + Uri, +}; + +pub struct User { + userdid: Did, + handle: Handle, +} + +struct Participant { + participantdid: Did, + role: Role, +} + diff --git a/db/src/lib.rs b/db/src/lib.rs new file mode 100644 index 0000000..82e9c13 --- /dev/null +++ b/db/src/lib.rs @@ -0,0 +1 @@ +pub struct db; From 2f2e653d130a1ca690162bc96ea0a9343b088d24 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 27 May 2025 15:12:46 -0700 Subject: [PATCH 4/7] Ingestor, scaffolding --- ingestor/Cargo.toml | 15 +++++++++++++++ ingestor/src/collection.rs | 25 +++++++++++++++++++++++++ {src => ingestor/src}/ingestor.rs | 29 ++++------------------------- ingestor/src/main.rs | 8 ++++++++ 4 files changed, 52 insertions(+), 25 deletions(-) create mode 100644 ingestor/Cargo.toml create mode 100644 ingestor/src/collection.rs rename {src => ingestor/src}/ingestor.rs (70%) create mode 100644 ingestor/src/main.rs diff --git a/ingestor/Cargo.toml b/ingestor/Cargo.toml new file mode 100644 index 0000000..a177581 --- /dev/null +++ b/ingestor/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "ingestor" +version = "0.1.0" +edition = "2024" + +[dependencies] +anyhow = "1.0.98" +async-trait = "0.1.88" +atproto.workspace = true +rocketman = "0.2.0" +serde.workspace = true +serde_json.workspace = true +tokio.workspace = true +tracing-subscriber.workspace = true +tracing.workspace = true diff --git a/ingestor/src/collection.rs b/ingestor/src/collection.rs new file mode 100644 index 0000000..69128d3 --- /dev/null +++ b/ingestor/src/collection.rs @@ -0,0 +1,25 @@ +use rocketman::types::event::Event; +use anyhow::Result; + +enum Ingestor { + Jetstream(SpoorJetstream) +} + +struct SpoorJetstream; + +#[async_trait] +impl LexiconIngestor for SpoorJetstream { + async fn ingest(&self, message: Event) -> Result<()> { + info!("{:?}", message); + // if let Some(commit) = &message.commit { + // match commit.operation { + // Operation::Create | Operation::Update => {} + // Operation::Delete => {} + // } + // } else { + // return Err("Message has no commit"); + // } + Ok(()) + } +} + diff --git a/src/ingestor.rs b/ingestor/src/ingestor.rs similarity index 70% rename from src/ingestor.rs rename to ingestor/src/ingestor.rs index 1dc31cc..d25f102 100644 --- a/src/ingestor.rs +++ b/ingestor/src/ingestor.rs @@ -1,6 +1,8 @@ -use crate::lexicons::my::spoor::log::{Activity, Session}; +use atproto::{ + Collection, + lexicons::my::spoor::log::{Activity, Session}, +}; use async_trait::async_trait; -use atrium_api::types::Collection; use rocketman::{ options::JetstreamOptions, ingestion::LexiconIngestor, @@ -15,29 +17,6 @@ use std::{ sync::{Arc, Mutex}, }; use tracing::{error, info}; -use anyhow::Result; - -enum Ingestor { - Jetstream(SpoorJetstream) -} - -struct SpoorJetstream; - -#[async_trait] -impl LexiconIngestor for SpoorJetstream { - async fn ingest(&self, message: Event) -> Result<()> { - info!("{:?}", message); - // if let Some(commit) = &message.commit { - // match commit.operation { - // Operation::Create | Operation::Update => {} - // Operation::Delete => {} - // } - // } else { - // return Err("Message has no commit"); - // } - Ok(()) - } -} pub async fn start_ingestor() { info!("Starting ingestor"); diff --git a/ingestor/src/main.rs b/ingestor/src/main.rs new file mode 100644 index 0000000..4289770 --- /dev/null +++ b/ingestor/src/main.rs @@ -0,0 +1,8 @@ + +#[tokio::main] +async fn main() { + let subscriber = tracing_subscriber::FmtSubscriber::new(); + let _ = tracing::subscriber::set_global_default(subscriber); + + +} From 9adc67cf4d87f3b07b526e7eb3d13460b899a576 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 28 May 2025 09:42:32 -0700 Subject: [PATCH 5/7] Update Cargo.lock --- Cargo.lock | 474 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 462 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7cc22a4..dbe12ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,18 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -47,13 +59,19 @@ dependencies = [ "libc", ] +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + [[package]] name = "api" version = "0.1.0" dependencies = [ "atproto", "axum", - "http", + "http 1.3.1", "serde", "serde_json", "tokio", @@ -72,6 +90,17 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-trait" +version = "0.1.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "atoi" version = "2.0.0" @@ -102,7 +131,7 @@ dependencies = [ "atrium-common", "atrium-xrpc", "chrono", - "http", + "http 1.3.1", "ipld-core", "langtag", "regex", @@ -134,7 +163,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0216ad50ce34e9ff982e171c3659e65dedaa2ed5ac2994524debdc9a9647ffa8" dependencies = [ - "http", + "http 1.3.1", "serde", "serde_html_form", "serde_json", @@ -158,7 +187,7 @@ dependencies = [ "bytes", "form_urlencoded", "futures-util", - "http", + "http 1.3.1", "http-body", "http-body-util", "hyper", @@ -190,7 +219,7 @@ checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" dependencies = [ "bytes", "futures-core", - "http", + "http 1.3.1", "http-body", "http-body-util", "mime", @@ -223,6 +252,12 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64" version = "0.22.1" @@ -253,6 +288,31 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bon" +version = "3.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced38439e7a86a4761f7f7d5ded5ff009135939ecb464a24452eaa4c1696af7d" +dependencies = [ + "bon-macros", + "rustversion", +] + +[[package]] +name = "bon-macros" +version = "3.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce61d2d3844c6b8d31b2353d9f66cf5e632b3e9549583fe3cac2f4f6136725e" +dependencies = [ + "darling", + "ident_case", + "prettyplease", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + [[package]] name = "bumpalo" version = "3.17.0" @@ -277,6 +337,8 @@ version = "1.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f4ac86a9e5bc1e2b3449ab9d7d3a6a405e3d1bb28d7b9be8614f55846ae3766" dependencies = [ + "jobserver", + "libc", "shlex", ] @@ -330,6 +392,16 @@ 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-sys" version = "0.8.7" @@ -412,6 +484,41 @@ dependencies = [ "typenum", ] +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core", + "quote", + "syn", +] + [[package]] name = "dashmap" version = "6.1.0" @@ -471,6 +578,37 @@ dependencies = [ "zeroize", ] +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +dependencies = [ + "derive_builder_core", + "syn", +] + [[package]] name = "digest" version = "0.10.7" @@ -555,6 +693,7 @@ checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ "futures-core", "futures-sink", + "nanorand", "spin", ] @@ -694,8 +833,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -781,6 +922,17 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http" version = "1.3.1" @@ -799,7 +951,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http", + "http 1.3.1", ] [[package]] @@ -810,7 +962,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http", + "http 1.3.1", "http-body", "pin-project-lite", ] @@ -836,7 +988,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http", + "http 1.3.1", "http-body", "httparse", "httpdate", @@ -854,7 +1006,7 @@ checksum = "cf9f1e950e0d9d1d3c47184416723cf29c0d1f93bd8cccf37e4beb6b44f31710" dependencies = [ "bytes", "futures-util", - "http", + "http 1.3.1", "http-body", "hyper", "pin-project-lite", @@ -972,6 +1124,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "1.0.3" @@ -1006,6 +1164,17 @@ dependencies = [ [[package]] name = "ingestor" version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "atproto", + "rocketman", + "serde", + "serde_json", + "tokio", + "tracing", + "tracing-subscriber", +] [[package]] name = "ipld-core" @@ -1024,6 +1193,16 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "jobserver" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +dependencies = [ + "getrandom 0.3.3", + "libc", +] + [[package]] name = "js-sys" version = "0.3.77" @@ -1172,6 +1351,16 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +[[package]] +name = "metrics" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dea7ac8057892855ec285c440160265225438c3c45072613c25a4b26e98ef5" +dependencies = [ + "ahash", + "portable-atomic", +] + [[package]] name = "mime" version = "0.3.17" @@ -1242,6 +1431,15 @@ dependencies = [ "unsigned-varint", ] +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom 0.2.16", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -1314,6 +1512,12 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + [[package]] name = "overload" version = "0.1.1" @@ -1427,6 +1631,16 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "prettyplease" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro2" version = "1.0.95" @@ -1534,6 +1748,44 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rocketman" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3aae946adbfdcf80cad8793e02d8eb94be06c925331aa56aeb446795893361" +dependencies = [ + "anyhow", + "async-trait", + "bon", + "derive_builder", + "flume", + "futures-util", + "metrics", + "rand", + "serde", + "serde_json", + "tokio", + "tokio-tungstenite", + "tracing", + "tracing-subscriber", + "url", + "zstd", +] + [[package]] name = "rsa" version = "0.9.8" @@ -1569,6 +1821,49 @@ dependencies = [ "semver", ] +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.21" @@ -1581,6 +1876,15 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -1593,6 +1897,39 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "semver" version = "1.0.26" @@ -1788,7 +2125,7 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "crc", "crossbeam-queue", @@ -1810,6 +2147,8 @@ dependencies = [ "sha2", "smallvec", "thiserror 2.0.12", + "tokio", + "tokio-stream", "tracing", "url", ] @@ -1848,6 +2187,7 @@ dependencies = [ "sqlx-postgres", "sqlx-sqlite", "syn", + "tokio", "url", ] @@ -1858,7 +2198,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", - "base64", + "base64 0.22.1", "bitflags", "byteorder", "bytes", @@ -1900,7 +2240,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", - "base64", + "base64 0.22.1", "bitflags", "byteorder", "crc", @@ -1971,6 +2311,12 @@ dependencies = [ "unicode-properties", ] +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "subtle" version = "2.6.1" @@ -2093,6 +2439,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" dependencies = [ "backtrace", + "bytes", "libc", "mio", "pin-project-lite", @@ -2112,6 +2459,43 @@ dependencies = [ "syn", ] +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls", + "rustls-native-certs", + "tokio", + "tokio-rustls", + "tungstenite", + "webpki-roots", +] + [[package]] name = "tower" version = "0.5.2" @@ -2213,6 +2597,26 @@ dependencies = [ "syn", ] +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 0.2.12", + "httparse", + "log", + "rand", + "rustls", + "sha1", + "thiserror 1.0.69", + "url", + "utf-8", +] + [[package]] name = "typenum" version = "1.18.0" @@ -2252,6 +2656,12 @@ 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" @@ -2263,6 +2673,12 @@ dependencies = [ "percent-encoding", ] +[[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" @@ -2385,6 +2801,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + [[package]] name = "whoami" version = "1.6.0" @@ -2794,3 +3216,31 @@ dependencies = [ "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", +] From 6d607563483a94590f10a996e4a2675774af6a96 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 5 Jun 2025 14:00:07 -0700 Subject: [PATCH 6/7] Collections refactor, unused in ingestor Ingestor refactor complete baby~ Just make sure everything works fix naming convention --- ingestor/src/collection.rs | 25 ------ ingestor/src/collections.rs | 85 +++++++++++++++++++ .../src/collections/app_bsky_feed_post.rs | 26 ++++++ .../src/collections/my_spoor_log_activity.rs | 30 +++++++ .../src/collections/my_spoor_log_session.rs | 30 +++++++ ingestor/src/ingestor.rs | 67 +++++++-------- ingestor/src/main.rs | 15 +++- 7 files changed, 218 insertions(+), 60 deletions(-) delete mode 100644 ingestor/src/collection.rs create mode 100644 ingestor/src/collections.rs create mode 100644 ingestor/src/collections/app_bsky_feed_post.rs create mode 100644 ingestor/src/collections/my_spoor_log_activity.rs create mode 100644 ingestor/src/collections/my_spoor_log_session.rs diff --git a/ingestor/src/collection.rs b/ingestor/src/collection.rs deleted file mode 100644 index 69128d3..0000000 --- a/ingestor/src/collection.rs +++ /dev/null @@ -1,25 +0,0 @@ -use rocketman::types::event::Event; -use anyhow::Result; - -enum Ingestor { - Jetstream(SpoorJetstream) -} - -struct SpoorJetstream; - -#[async_trait] -impl LexiconIngestor for SpoorJetstream { - async fn ingest(&self, message: Event) -> Result<()> { - info!("{:?}", message); - // if let Some(commit) = &message.commit { - // match commit.operation { - // Operation::Create | Operation::Update => {} - // Operation::Delete => {} - // } - // } else { - // return Err("Message has no commit"); - // } - Ok(()) - } -} - diff --git a/ingestor/src/collections.rs b/ingestor/src/collections.rs new file mode 100644 index 0000000..3b9cd5d --- /dev/null +++ b/ingestor/src/collections.rs @@ -0,0 +1,85 @@ +use rocketman::ingestion::LexiconIngestor; + +macro_rules! create_commit_collection { + ($collection:ident, $nsid:expr, + change => $change_fn:expr, + delete => $delete_fn:expr $(,)? + ) => ( + create_commit_collection!( + $collection, $nsid, + create => $change_fn, + update => $change_fn, + delete => $delete_fn, + ); + ); + ($collection:ident, $nsid:expr, + create => $create_fn:expr, + update => $update_fn:expr, + delete => $delete_fn:expr $(,)? + ) => ( + pub struct $collection; + struct Ingestor; + + impl $crate::collections::Collection for $collection { + fn new() -> Self { Self } + + fn get_nsid(&self) -> String { + $nsid + } + + fn get_ingestor( + &self + ) -> Box { + Box::new(Ingestor::new()) + } + } + + impl Ingestor { + pub fn new() -> Self { Self } + + pub async fn handle_commit( + &self, + message: rocketman::types::event::Event + ) -> anyhow::Result<()> { + use rocketman::types::event::Operation; + + let state = $crate::collections::CommitIngestorState { }; + + if let Some(commit) = &message.commit { + match commit.operation { + Operation::Create => ($create_fn)(state, message).await?, + Operation::Update => ($update_fn)(state, message).await?, + Operation::Delete => ($delete_fn)(state, message).await?, + } + } else { + return Err(anyhow::anyhow!("Message has no commit")); + } + Ok(()) + } + } + + #[async_trait::async_trait] + impl rocketman::ingestion::LexiconIngestor for Ingestor { + async fn ingest( + &self, + message: rocketman::types::event::Event + ) -> anyhow::Result<()> { + self.handle_commit(message).await + } + } + ); +} + +pub mod my_spoor_log_session; +pub use my_spoor_log_session::MySpoorLogSession; +pub mod my_spoor_log_activity; +pub use my_spoor_log_activity::MySpoorLogActivity; + +struct CommitIngestorState; + +pub trait Collection { + fn new() -> Self; + fn get_nsid(&self) -> String; + fn get_ingestor(&self) -> Box; +} + diff --git a/ingestor/src/collections/app_bsky_feed_post.rs b/ingestor/src/collections/app_bsky_feed_post.rs new file mode 100644 index 0000000..d57bb1d --- /dev/null +++ b/ingestor/src/collections/app_bsky_feed_post.rs @@ -0,0 +1,26 @@ +use crate::collections::CommitIngestorState; +use rocketman::types::event::Event; +use serde_json::Value; +use anyhow::Result; +use tracing::info; + +async fn handle_change( + _state: CommitIngestorState, + message: Event +) -> Result<()> { + info!("{:?}", message); + Ok(()) +} + +async fn handle_delete( + _state: CommitIngestorState, + message: Event +) -> Result<()> { + info!("{:?}", message); + Ok(()) +} + +create_commit_collection!(AppBskyFeedPost, "app.bsky.feed.post".to_string(), + change => handle_change, + delete => handle_delete, +); diff --git a/ingestor/src/collections/my_spoor_log_activity.rs b/ingestor/src/collections/my_spoor_log_activity.rs new file mode 100644 index 0000000..b664220 --- /dev/null +++ b/ingestor/src/collections/my_spoor_log_activity.rs @@ -0,0 +1,30 @@ +use crate::collections::CommitIngestorState; +use atproto::{ + Collection as AtprotoCollection, + lexicons::my::spoor::log::Activity, +}; +use rocketman::types::event::Event; +use serde_json::Value; +use anyhow::Result; +use tracing::info; + +async fn handle_change( + _state: CommitIngestorState, + message: Event +) -> Result<()> { + info!("{:?}", message); + Ok(()) +} + +async fn handle_delete( + _state: CommitIngestorState, + message: Event +) -> Result<()> { + info!("{:?}", message); + Ok(()) +} + +create_commit_collection!(MySpoorLogActivity, Activity::NSID.to_string(), + change => handle_change, + delete => handle_delete, +); diff --git a/ingestor/src/collections/my_spoor_log_session.rs b/ingestor/src/collections/my_spoor_log_session.rs new file mode 100644 index 0000000..c90e7de --- /dev/null +++ b/ingestor/src/collections/my_spoor_log_session.rs @@ -0,0 +1,30 @@ +use crate::collections::CommitIngestorState; +use atproto::{ + Collection as AtprotoCollection, + lexicons::my::spoor::log::Session, +}; +use rocketman::types::event::Event; +use serde_json::Value; +use anyhow::Result; +use tracing::info; + +async fn handle_change( + _state: CommitIngestorState, + message: Event +) -> Result<()> { + info!("{:?}", message); + Ok(()) +} + +async fn handle_delete( + _state: CommitIngestorState, + message: Event +) -> Result<()> { + info!("{:?}", message); + Ok(()) +} + +create_commit_collection!(MySpoorLogSession, Session::NSID.to_string(), + change => handle_change, + delete => handle_delete, +); diff --git a/ingestor/src/ingestor.rs b/ingestor/src/ingestor.rs index d25f102..e2a80f3 100644 --- a/ingestor/src/ingestor.rs +++ b/ingestor/src/ingestor.rs @@ -1,54 +1,53 @@ -use atproto::{ - Collection, - lexicons::my::spoor::log::{Activity, Session}, -}; -use async_trait::async_trait; +use crate::collections::Collection; use rocketman::{ options::JetstreamOptions, ingestion::LexiconIngestor, - // types::event::{Event, Operation}, - types::event::Event, connection::JetstreamConnection, handler, }; -use serde_json::value::Value; use std::{ collections::HashMap, sync::{Arc, Mutex}, }; -use tracing::{error, info}; +use tracing::{info, error}; -pub async fn start_ingestor() { - info!("Starting ingestor"); - let nsids = vec![ - Activity::NSID.to_string(), - Session::NSID.to_string(), - ]; - let opts = JetstreamOptions::builder().wanted_collections(nsids.clone()).build(); - let jetstream = JetstreamConnection::new(opts); +pub struct Ingestor { + ingesters: HashMap>, +} - let mut ingesters: HashMap> = HashMap::new(); - for nsid in nsids { - ingesters.insert(nsid, Box::new(SpoorJetstream)); +impl Ingestor { + pub fn new() -> Self { + Self { ingesters: HashMap::new() } } - let cursor: Arc>> = Arc::new(Mutex::new(None)); + pub fn add_collection(&mut self, collection: C) { + self.ingesters.insert(collection.get_nsid(), collection.get_ingestor()); + } - let msg_rx = jetstream.get_msg_rx(); - let reconnect_tx = jetstream.get_reconnect_tx(); + pub async fn start(self) { + info!("Starting ingestor with the following collections: {:?}", + self.ingesters.keys()); + let opts = JetstreamOptions::builder() + .wanted_collections(self.ingesters.keys().cloned().collect()) + .build(); + let jetstream = JetstreamConnection::new(opts); + let cursor: Arc>> = Arc::new(Mutex::new(None)); + let msg_rx = jetstream.get_msg_rx(); + let reconnect_tx = jetstream.get_reconnect_tx(); - let cursor_clone = cursor.clone(); - tokio::spawn(async move { - while let Ok(message) = msg_rx.recv_async().await { - if let Err(e) = handler::handle_message(message, &ingesters, - reconnect_tx.clone(), cursor_clone.clone()).await { - error!("Error processing message: {}", e); + let cursor_clone = cursor.clone(); + tokio::spawn(async move { + while let Ok(message) = msg_rx.recv_async().await { + if let Err(e) = handler::handle_message(message, &self.ingesters, + reconnect_tx.clone(), cursor_clone.clone()).await { + error!("Error processing message: {}", e); + } } - } - }); + }); - if let Err(e) = jetstream.connect(cursor.clone()).await { - error!("Failed to connect to Jetstream: {}", e); - std::process::exit(1); + if let Err(e) = jetstream.connect(cursor.clone()).await { + error!("Failed to connect to Jetstream: {}", e); + std::process::exit(1); + } } } diff --git a/ingestor/src/main.rs b/ingestor/src/main.rs index 4289770..08af557 100644 --- a/ingestor/src/main.rs +++ b/ingestor/src/main.rs @@ -1,8 +1,21 @@ +use crate::{ + collections::{ + Collection, + MySpoorLogActivity, MySpoorLogSession, + }, + ingestor::Ingestor, +}; + +mod ingestor; +mod collections; #[tokio::main] async fn main() { let subscriber = tracing_subscriber::FmtSubscriber::new(); let _ = tracing::subscriber::set_global_default(subscriber); - + let mut ingestor = Ingestor::new(); + ingestor.add_collection(MySpoorLogActivity::new()); + ingestor.add_collection(MySpoorLogSession::new()); + ingestor.start().await; } From 30e5de8c79608c796cfba057c19782169689e3ee Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 22 May 2025 15:22:43 -0700 Subject: [PATCH 7/7] Global, mono-binary to libraries and binaries This separates the previous mono-binary setup into separate libraries and binaries. Specifically it split the old since api/ingestor binary into an Atproto, and DB library, as well as an api, and ingestor binary. Atproto Lib Was mostly untouched. The original URI implementation was changed to use FromStr, otherwise only imports were changed. DB Lib Is mostly unused, so there wasn't much that needed to be changed. Some new files were added so that future work on it can hit the ground running. Api Binary Is almost entirely the same. Imports were changed and the ingestor code of main was removed. Ingestor Binary Was almost entirely refactored. An interface to made injestors was added, and it was modularized. The only shared code is in Ingestor.start(), and collections.rs's macros, but that is mostly boilerplate. --- Cargo.lock | 729 ++++++------------ Cargo.toml | 27 +- api/Cargo.toml | 14 + {src => api/src}/main.rs | 28 +- {src => api/src}/router.rs | 14 +- {src => api/src}/router/xrpc.rs | 2 +- atproto/Cargo.toml | 12 + {src => atproto/src}/lexicons/mod.rs | 0 {src => atproto/src}/lexicons/my.rs | 0 {src => atproto/src}/lexicons/my/spoor.rs | 0 .../src}/lexicons/my/spoor/content.rs | 0 .../lexicons/my/spoor/content/external.rs | 0 .../src}/lexicons/my/spoor/content/media.rs | 0 .../src}/lexicons/my/spoor/content/title.rs | 0 {src => atproto/src}/lexicons/my/spoor/log.rs | 0 .../src}/lexicons/my/spoor/log/activity.rs | 0 .../src}/lexicons/my/spoor/log/session.rs | 0 {src => atproto/src}/lexicons/record.rs | 0 src/atproto.rs => atproto/src/lib.rs | 19 +- db/Cargo.toml | 8 + src/db.rs => db/src/connection.rs | 14 - db/src/interfaces.rs | 15 + db/src/lib.rs | 1 + ingestor/Cargo.toml | 15 + ingestor/src/collections.rs | 85 ++ .../src/collections/app_bsky_feed_post.rs | 26 + .../src/collections/my_spoor_log_activity.rs | 30 + .../src/collections/my_spoor_log_session.rs | 30 + ingestor/src/ingestor.rs | 53 ++ ingestor/src/main.rs | 21 + src/ingestor.rs | 75 -- 31 files changed, 582 insertions(+), 636 deletions(-) create mode 100644 api/Cargo.toml rename {src => api/src}/main.rs (73%) rename {src => api/src}/router.rs (91%) rename {src => api/src}/router/xrpc.rs (99%) create mode 100644 atproto/Cargo.toml rename {src => atproto/src}/lexicons/mod.rs (100%) rename {src => atproto/src}/lexicons/my.rs (100%) rename {src => atproto/src}/lexicons/my/spoor.rs (100%) rename {src => atproto/src}/lexicons/my/spoor/content.rs (100%) rename {src => atproto/src}/lexicons/my/spoor/content/external.rs (100%) rename {src => atproto/src}/lexicons/my/spoor/content/media.rs (100%) rename {src => atproto/src}/lexicons/my/spoor/content/title.rs (100%) rename {src => atproto/src}/lexicons/my/spoor/log.rs (100%) rename {src => atproto/src}/lexicons/my/spoor/log/activity.rs (100%) rename {src => atproto/src}/lexicons/my/spoor/log/session.rs (100%) rename {src => atproto/src}/lexicons/record.rs (100%) rename src/atproto.rs => atproto/src/lib.rs (90%) create mode 100644 db/Cargo.toml rename src/db.rs => db/src/connection.rs (93%) create mode 100644 db/src/interfaces.rs create mode 100644 db/src/lib.rs create mode 100644 ingestor/Cargo.toml create mode 100644 ingestor/src/collections.rs create mode 100644 ingestor/src/collections/app_bsky_feed_post.rs create mode 100644 ingestor/src/collections/my_spoor_log_activity.rs create mode 100644 ingestor/src/collections/my_spoor_log_session.rs create mode 100644 ingestor/src/ingestor.rs create mode 100644 ingestor/src/main.rs delete mode 100644 src/ingestor.rs diff --git a/Cargo.lock b/Cargo.lock index 796c756..dbe12ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,14 +19,14 @@ checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", "once_cell", "version_check", - "zerocopy 0.7.35", + "zerocopy", ] [[package]] @@ -65,6 +65,20 @@ version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +[[package]] +name = "api" +version = "0.1.0" +dependencies = [ + "atproto", + "axum", + "http 1.3.1", + "serde", + "serde_json", + "tokio", + "tracing", + "tracing-subscriber", +] + [[package]] name = "async-lock" version = "3.4.0" @@ -96,11 +110,23 @@ dependencies = [ "num-traits", ] +[[package]] +name = "atproto" +version = "0.1.0" +dependencies = [ + "atrium-api", + "lazy-regex", + "serde", + "serde_json", + "tracing", + "tracing-subscriber", +] + [[package]] name = "atrium-api" -version = "0.25.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d4eb9b4787aba546015c8ccda1d3924c157cee13d67848997fba74ac8144a07" +checksum = "7225f0ca3c78564b784828e3db3e92619cf6e786530c3468df73f49deebc0bd4" dependencies = [ "atrium-common", "atrium-xrpc", @@ -118,9 +144,9 @@ dependencies = [ [[package]] name = "atrium-common" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba30d2f9e1a8b3db8fc97d0a5f91ee5a28f8acdddb771ad74c1b08eda357ca3d" +checksum = "9ed5610654043faa396a5a15afac0ac646d76aebe45aebd7cef4f8b96b0ab7f4" dependencies = [ "dashmap", "lru", @@ -131,21 +157,11 @@ dependencies = [ "web-time", ] -[[package]] -name = "atrium-lex" -version = "0.1.0" -source = "git+https://github.com/sugyan/atrium.git?rev=f162f815a04b5ecb0421b390d521c883c41d5f75#f162f815a04b5ecb0421b390d521c883c41d5f75" -dependencies = [ - "serde", - "serde_repr", - "serde_with", -] - [[package]] name = "atrium-xrpc" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a9e526cb2ed3e0a2ca78c3ce2a943d9041a68e067dadf42923b523771e07df" +checksum = "0216ad50ce34e9ff982e171c3659e65dedaa2ed5ac2994524debdc9a9647ffa8" dependencies = [ "http 1.3.1", "serde", @@ -163,9 +179,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de45108900e1f9b9242f7f2e254aa3e2c029c921c258fe9e6b4217eeebd54288" +checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" dependencies = [ "axum-core", "bytes", @@ -215,22 +231,11 @@ dependencies = [ "tracing", ] -[[package]] -name = "axum-macros" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604fde5e028fea851ce1d8570bbdc034bec850d157f7569d10f347d06808c05c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", "cfg-if", @@ -247,12 +252,6 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "base64" version = "0.21.7" @@ -273,9 +272,9 @@ checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" [[package]] name = "bitflags" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" dependencies = [ "serde", ] @@ -334,9 +333,9 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.2.20" +version = "1.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04da6a0d40b948dfc4fa8f5bbf402b0fc1a64a28dbf7d12ffd683550f2c1b63a" +checksum = "5f4ac86a9e5bc1e2b3449ab9d7d3a6a405e3d1bb28d7b9be8614f55846ae3766" dependencies = [ "jobserver", "libc", @@ -351,9 +350,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", @@ -429,9 +428,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.2.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" dependencies = [ "crc-catalog", ] @@ -560,6 +559,14 @@ dependencies = [ "syn", ] +[[package]] +name = "db" +version = "0.1.0" +dependencies = [ + "sqlx", + "tokio", +] + [[package]] name = "der" version = "0.7.10" @@ -571,16 +578,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "deranged" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" -dependencies = [ - "powerfmt", - "serde", -] - [[package]] name = "derive_builder" version = "0.20.2" @@ -656,32 +653,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" -[[package]] -name = "errno" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "esquema-codegen" -version = "0.1.0" -source = "git+https://github.com/fatfingers23/esquema.git?branch=main#9ef00b9d631b746bd6396fb46ba255eb9360e43f" -dependencies = [ - "atrium-lex", - "heck 0.4.1", - "itertools", - "prettyplease", - "proc-macro2", - "quote", - "serde", - "serde_json", - "syn", -] - [[package]] name = "etcetera" version = "0.8.0" @@ -714,12 +685,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - [[package]] name = "flume" version = "0.11.1" @@ -839,10 +804,11 @@ dependencies = [ [[package]] name = "generator" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" +checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" dependencies = [ + "cc", "cfg-if", "libc", "log", @@ -862,9 +828,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "js-sys", @@ -875,9 +841,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", "libc", @@ -891,12 +857,6 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - [[package]] name = "hashbrown" version = "0.14.5" @@ -905,9 +865,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" dependencies = [ "allocator-api2", "equivalent", @@ -920,15 +880,9 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.15.2", + "hashbrown 0.15.3", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" @@ -1046,9 +1000,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" +checksum = "cf9f1e950e0d9d1d3c47184416723cf29c0d1f93bd8cccf37e4beb6b44f31710" dependencies = [ "bytes", "futures-util", @@ -1072,7 +1026,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.0", + "windows-core", ] [[package]] @@ -1086,21 +1040,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -1109,31 +1064,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -1141,67 +1076,54 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "ident_case" version = "1.0.1" @@ -1221,25 +1143,14 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", ] -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - [[package]] name = "indexmap" version = "2.9.0" @@ -1247,7 +1158,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.15.3", +] + +[[package]] +name = "ingestor" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "atproto", + "rocketman", + "serde", + "serde_json", + "tokio", + "tracing", + "tracing-subscriber", ] [[package]] @@ -1261,15 +1187,6 @@ dependencies = [ "serde_bytes", ] -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.15" @@ -1282,7 +1199,7 @@ version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.3.3", "libc", ] @@ -1339,15 +1256,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.171" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libm" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libsqlite3-sys" @@ -1359,17 +1276,11 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "linux-raw-sys" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" - [[package]] name = "litemap" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" @@ -1406,7 +1317,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.2", + "hashbrown 0.15.3", ] [[package]] @@ -1526,7 +1437,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] @@ -1556,12 +1467,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - [[package]] name = "num-integer" version = "0.1.46" @@ -1709,10 +1614,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] -name = "powerfmt" -version = "0.2.0" +name = "potential_utf" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] [[package]] name = "ppv-lite86" @@ -1720,7 +1628,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.24", + "zerocopy", ] [[package]] @@ -1735,9 +1643,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] @@ -1784,14 +1692,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] name = "redox_syscall" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" +checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ "bitflags", ] @@ -1828,15 +1736,6 @@ dependencies = [ "regex-syntax 0.8.5", ] -[[package]] -name = "regex-macro" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d306632607af6ec61c0b117971d57a96381b6317cf18ae419b5558048fe016e" -dependencies = [ - "regex", -] - [[package]] name = "regex-syntax" version = "0.6.29" @@ -1857,7 +1756,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.16", "libc", "untrusted", "windows-sys 0.52.0", @@ -1907,28 +1806,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rust" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "atrium-api", - "axum", - "axum-macros", - "esquema-codegen", - "http 1.3.1", - "lazy-regex", - "regex-macro", - "rocketman", - "serde", - "serde_json", - "sqlx", - "tokio", - "tracing", - "tracing-subscriber", -] - [[package]] name = "rustc-demangle" version = "0.1.24" @@ -1944,19 +1821,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rustix" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.59.0", -] - [[package]] name = "rustls" version = "0.21.12" @@ -2002,9 +1866,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "ryu" @@ -2108,7 +1972,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d2de91cf02bbc07cde38891769ccd5d4f073d22a40683aa4bc7a95781aaa2c4" dependencies = [ "form_urlencoded", - "indexmap 2.9.0", + "indexmap", "itoa", "ryu", "serde", @@ -2136,17 +2000,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_repr" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -2159,34 +2012,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_with" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" -dependencies = [ - "base64 0.13.1", - "chrono", - "hex", - "indexmap 1.9.3", - "serde", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "sha1" version = "0.10.6" @@ -2200,9 +2025,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -2283,9 +2108,9 @@ dependencies = [ [[package]] name = "sqlx" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c3a85280daca669cfd3bcb68a337882a8bc57ec882f72c5d13a430613a738e" +checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" dependencies = [ "sqlx-core", "sqlx-macros", @@ -2296,9 +2121,9 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f743f2a3cea30a58cd479013f75550e879009e3a02f616f18ca699335aa248c3" +checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" dependencies = [ "base64 0.22.1", "bytes", @@ -2310,9 +2135,9 @@ dependencies = [ "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.15.2", + "hashbrown 0.15.3", "hashlink", - "indexmap 2.9.0", + "indexmap", "log", "memchr", "once_cell", @@ -2330,9 +2155,9 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4200e0fde19834956d4252347c12a083bdcb237d7a1a1446bffd8768417dce" +checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" dependencies = [ "proc-macro2", "quote", @@ -2343,13 +2168,13 @@ dependencies = [ [[package]] name = "sqlx-macros-core" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "882ceaa29cade31beca7129b6beeb05737f44f82dbe2a9806ecea5a7093d00b7" +checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" dependencies = [ "dotenvy", "either", - "heck 0.5.0", + "heck", "hex", "once_cell", "proc-macro2", @@ -2362,16 +2187,15 @@ dependencies = [ "sqlx-postgres", "sqlx-sqlite", "syn", - "tempfile", "tokio", "url", ] [[package]] name = "sqlx-mysql" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0afdd3aa7a629683c2d750c2df343025545087081ab5942593a5288855b1b7a7" +checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", "base64 0.22.1", @@ -2411,9 +2235,9 @@ dependencies = [ [[package]] name = "sqlx-postgres" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0bedbe1bbb5e2615ef347a5e9d8cd7680fb63e77d9dafc0f29be15e53f1ebe6" +checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", "base64 0.22.1", @@ -2448,9 +2272,9 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c26083e9a520e8eb87a06b12347679b142dc2ea29e6e409f805644a7a979a5bc" +checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" dependencies = [ "atoi", "flume", @@ -2501,9 +2325,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.100" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", @@ -2518,9 +2342,9 @@ checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", @@ -2533,19 +2357,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" -[[package]] -name = "tempfile" -version = "3.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" -dependencies = [ - "fastrand", - "getrandom 0.3.2", - "once_cell", - "rustix", - "windows-sys 0.59.0", -] - [[package]] name = "thiserror" version = "1.0.69" @@ -2596,42 +2407,11 @@ dependencies = [ "once_cell", ] -[[package]] -name = "time" -version = "0.3.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" - -[[package]] -name = "time-macros" -version = "0.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" -dependencies = [ - "num-conv", - "time-core", -] - [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", @@ -2654,9 +2434,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.44.2" +version = "1.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" +checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" dependencies = [ "backtrace", "bytes", @@ -2899,12 +2679,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -2917,7 +2691,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.3.3", ] [[package]] @@ -3067,49 +2841,48 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.58.0" +version = "0.61.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +checksum = "c5ee8f3d025738cb02bad7868bbb5f8a6327501e870bf51f1b455b0a2454a419" dependencies = [ - "windows-core 0.58.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-core" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" -dependencies = [ - "windows-implement 0.58.0", - "windows-interface 0.58.0", - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-core" -version = "0.61.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" -dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", + "windows-collections", + "windows-core", + "windows-future", "windows-link", - "windows-result 0.3.2", - "windows-strings 0.4.0", + "windows-numerics", ] [[package]] -name = "windows-implement" -version = "0.58.0" +name = "windows-collections" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ - "proc-macro2", - "quote", - "syn", + "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]] @@ -3123,17 +2896,6 @@ dependencies = [ "syn", ] -[[package]] -name = "windows-interface" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "windows-interface" version = "0.59.1" @@ -3152,38 +2914,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" [[package]] -name = "windows-result" +name = "windows-numerics" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ - "windows-targets 0.52.6", + "windows-core", + "windows-link", ] [[package]] name = "windows-result" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.1.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" -dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-strings" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ "windows-link", ] @@ -3246,6 +2999,15 @@ dependencies = [ "windows_x86_64_msvc 0.52.6", ] +[[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" @@ -3345,23 +3107,17 @@ dependencies = [ "bitflags", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -3371,9 +3127,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", @@ -3383,38 +3139,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" dependencies = [ - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" -dependencies = [ - "zerocopy-derive 0.8.24", + "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" dependencies = [ "proc-macro2", "quote", @@ -3449,10 +3185,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] -name = "zerovec" -version = "0.10.4" +name = "zerotrie" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +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", @@ -3461,9 +3208,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 0dfa374..908c860 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,26 +1,11 @@ -[package] -name = "rust" -version = "0.1.0" -edition = "2021" +[workspace] +resolver = "3" +members = [ "api", "atproto","db", "ingestor"] -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -anyhow = "1.0.98" -async-trait = "0.1.88" -atrium-api = { version = "0.25.2", default-features = false } -axum = { version = "0.8.3", features = ["json"] } -axum-macros = "0.5.0" -http = "1.3.1" -lazy-regex = "3.4.1" -regex-macro = "0.3.0" -rocketman = "0.2.0" +[workspace.dependencies] +atproto = { path = "./atproto" } serde = "1.0.219" serde_json = "1.0.140" -sqlx = { version = "0.8.5", features = ["postgres", "runtime-tokio"] } -tokio = { version = "1.44.2", features = ["macros", "rt-multi-thread"] } +tokio = { version = "1.45.0", features = ["macros", "rt-multi-thread"] } tracing = "0.1.41" tracing-subscriber = "0.3.19" - -[build-dependencies] -esquema-codegen = { git = "https://github.com/fatfingers23/esquema.git", branch = "main" } diff --git a/api/Cargo.toml b/api/Cargo.toml new file mode 100644 index 0000000..1fc049c --- /dev/null +++ b/api/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "api" +version = "0.1.0" +edition = "2024" + +[dependencies] +atproto.workspace = true +axum = { version = "0.8.3", features = ["json"] } +http = "1.3.1" +serde.workspace = true +serde_json.workspace = true +tokio.workspace = true +tracing-subscriber.workspace = true +tracing.workspace = true diff --git a/src/main.rs b/api/src/main.rs similarity index 73% rename from src/main.rs rename to api/src/main.rs index 399d3be..46e17ae 100644 --- a/src/main.rs +++ b/api/src/main.rs @@ -1,24 +1,17 @@ -use crate::{ - atproto::Nsid, - ingestor::start_ingestor, - router::{ - Router, - Endpoint, - xrpc::{ - QueryInput, - ProcedureInput, - Response, - error, - }, +use crate::router::{ + Router, + Endpoint, + xrpc::{ + QueryInput, + ProcedureInput, + Response, + error, }, }; +use atproto::Nsid; use http::status::StatusCode; -mod atproto; -mod ingestor; -mod lexicons; mod router; -// mod db; #[tokio::main] async fn main() { @@ -30,9 +23,6 @@ async fn main() { let post_nsid = Nsid::new(String::from("me.woach.post")).expect("me.woach.post is a valid nsid"); router = router.add_endpoint(Endpoint::new_xrpc_query(get_nsid, test)); router = router.add_endpoint(Endpoint::new_xrpc_procedure(post_nsid, test2)); - tokio::spawn(async move { - start_ingestor().await; - }); router.serve().await; } diff --git a/src/router.rs b/api/src/router.rs similarity index 91% rename from src/router.rs rename to api/src/router.rs index f6c1b1b..bfa3b17 100644 --- a/src/router.rs +++ b/api/src/router.rs @@ -1,12 +1,10 @@ -use crate::{ - atproto::Nsid, - router::xrpc::{ - XrpcEndpoint, - XrpcHandler, - QueryInput, - ProcedureInput, - } +use crate::router::xrpc::{ + XrpcEndpoint, + XrpcHandler, + QueryInput, + ProcedureInput, }; +use atproto::Nsid; use axum::Router as AxumRouter; use core::net::SocketAddr; use std::net::{IpAddr, Ipv4Addr}; diff --git a/src/router/xrpc.rs b/api/src/router/xrpc.rs similarity index 99% rename from src/router/xrpc.rs rename to api/src/router/xrpc.rs index 3f4c74d..500f331 100644 --- a/src/router/xrpc.rs +++ b/api/src/router/xrpc.rs @@ -1,9 +1,9 @@ -use crate::atproto::Nsid; use std::{ collections::HashMap, pin::Pin, future::Future, }; +use atproto::Nsid; use axum::{ extract::{ Json, diff --git a/atproto/Cargo.toml b/atproto/Cargo.toml new file mode 100644 index 0000000..7d56725 --- /dev/null +++ b/atproto/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "atproto" +version = "0.1.0" +edition = "2024" + +[dependencies] +atrium-api = { version = "0.25.3", default-features = false } +lazy-regex = "3.4.1" +serde.workspace = true +serde_json.workspace = true +tracing-subscriber.workspace = true +tracing.workspace = true diff --git a/src/lexicons/mod.rs b/atproto/src/lexicons/mod.rs similarity index 100% rename from src/lexicons/mod.rs rename to atproto/src/lexicons/mod.rs diff --git a/src/lexicons/my.rs b/atproto/src/lexicons/my.rs similarity index 100% rename from src/lexicons/my.rs rename to atproto/src/lexicons/my.rs diff --git a/src/lexicons/my/spoor.rs b/atproto/src/lexicons/my/spoor.rs similarity index 100% rename from src/lexicons/my/spoor.rs rename to atproto/src/lexicons/my/spoor.rs diff --git a/src/lexicons/my/spoor/content.rs b/atproto/src/lexicons/my/spoor/content.rs similarity index 100% rename from src/lexicons/my/spoor/content.rs rename to atproto/src/lexicons/my/spoor/content.rs diff --git a/src/lexicons/my/spoor/content/external.rs b/atproto/src/lexicons/my/spoor/content/external.rs similarity index 100% rename from src/lexicons/my/spoor/content/external.rs rename to atproto/src/lexicons/my/spoor/content/external.rs diff --git a/src/lexicons/my/spoor/content/media.rs b/atproto/src/lexicons/my/spoor/content/media.rs similarity index 100% rename from src/lexicons/my/spoor/content/media.rs rename to atproto/src/lexicons/my/spoor/content/media.rs diff --git a/src/lexicons/my/spoor/content/title.rs b/atproto/src/lexicons/my/spoor/content/title.rs similarity index 100% rename from src/lexicons/my/spoor/content/title.rs rename to atproto/src/lexicons/my/spoor/content/title.rs diff --git a/src/lexicons/my/spoor/log.rs b/atproto/src/lexicons/my/spoor/log.rs similarity index 100% rename from src/lexicons/my/spoor/log.rs rename to atproto/src/lexicons/my/spoor/log.rs diff --git a/src/lexicons/my/spoor/log/activity.rs b/atproto/src/lexicons/my/spoor/log/activity.rs similarity index 100% rename from src/lexicons/my/spoor/log/activity.rs rename to atproto/src/lexicons/my/spoor/log/activity.rs diff --git a/src/lexicons/my/spoor/log/session.rs b/atproto/src/lexicons/my/spoor/log/session.rs similarity index 100% rename from src/lexicons/my/spoor/log/session.rs rename to atproto/src/lexicons/my/spoor/log/session.rs diff --git a/src/lexicons/record.rs b/atproto/src/lexicons/record.rs similarity index 100% rename from src/lexicons/record.rs rename to atproto/src/lexicons/record.rs diff --git a/src/atproto.rs b/atproto/src/lib.rs similarity index 90% rename from src/atproto.rs rename to atproto/src/lib.rs index a58f8b6..21f8919 100644 --- a/src/atproto.rs +++ b/atproto/src/lib.rs @@ -10,6 +10,8 @@ pub use atrium_api::types::{ } }; +pub mod lexicons; + pub struct Uri { whole: String, // These fields could be useful in the future, @@ -19,12 +21,9 @@ pub struct Uri { // rkey: Option, } -impl Uri { - pub fn as_str(&self) -> &str { - self.whole.as_str() - } - - pub fn from_str(uri: String) -> Result { +impl FromStr for Uri { + type Err = &'static str; + fn from_str(uri: &str) -> Result { if uri.len() > 8000 { return Err("Uri too long") } @@ -33,7 +32,7 @@ impl Uri { whole, unchecked_authority, unchecked_collection, unchecked_rkey )) = regex_captures!( r"/^at:\/\/([\w\.\-_~:]+)(?:\/([\w\.\-_~:]+)(?:)\/([\w\.\-_~:]+))?$/i", - &uri, + uri, ) else { return Err("Invalid Uri"); }; @@ -53,3 +52,9 @@ impl Uri { } } +impl Uri { + pub fn as_str(&self) -> &str { + self.whole.as_str() + } +} + diff --git a/db/Cargo.toml b/db/Cargo.toml new file mode 100644 index 0000000..ded38de --- /dev/null +++ b/db/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "db" +version = "0.1.0" +edition = "2024" + +[dependencies] +sqlx = { version = "0.8.6", features = ["postgres", "runtime-tokio"] } +tokio = "1.45.0" diff --git a/src/db.rs b/db/src/connection.rs similarity index 93% rename from src/db.rs rename to db/src/connection.rs index 78fb640..ba883cc 100644 --- a/src/db.rs +++ b/db/src/connection.rs @@ -1,7 +1,3 @@ -use crate::atproto::{ - Did, - Uri, -} use sqlx::{ query, Database, @@ -20,11 +16,6 @@ pub struct Db { pool: Pool } -pub struct User { - userdid: Did, - handle: Handle, -} - #[non_exhaustive] enum Role { Owner, @@ -40,11 +31,6 @@ impl ToString for Role { } } -struct Participant { - participantdid: Did, - role: Role, -} - pub struct Session { sessionuri: Uri, label: Option, diff --git a/db/src/interfaces.rs b/db/src/interfaces.rs new file mode 100644 index 0000000..d3629e1 --- /dev/null +++ b/db/src/interfaces.rs @@ -0,0 +1,15 @@ +use atproto::{ + Did, + Uri, +}; + +pub struct User { + userdid: Did, + handle: Handle, +} + +struct Participant { + participantdid: Did, + role: Role, +} + diff --git a/db/src/lib.rs b/db/src/lib.rs new file mode 100644 index 0000000..82e9c13 --- /dev/null +++ b/db/src/lib.rs @@ -0,0 +1 @@ +pub struct db; diff --git a/ingestor/Cargo.toml b/ingestor/Cargo.toml new file mode 100644 index 0000000..a177581 --- /dev/null +++ b/ingestor/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "ingestor" +version = "0.1.0" +edition = "2024" + +[dependencies] +anyhow = "1.0.98" +async-trait = "0.1.88" +atproto.workspace = true +rocketman = "0.2.0" +serde.workspace = true +serde_json.workspace = true +tokio.workspace = true +tracing-subscriber.workspace = true +tracing.workspace = true diff --git a/ingestor/src/collections.rs b/ingestor/src/collections.rs new file mode 100644 index 0000000..3b9cd5d --- /dev/null +++ b/ingestor/src/collections.rs @@ -0,0 +1,85 @@ +use rocketman::ingestion::LexiconIngestor; + +macro_rules! create_commit_collection { + ($collection:ident, $nsid:expr, + change => $change_fn:expr, + delete => $delete_fn:expr $(,)? + ) => ( + create_commit_collection!( + $collection, $nsid, + create => $change_fn, + update => $change_fn, + delete => $delete_fn, + ); + ); + ($collection:ident, $nsid:expr, + create => $create_fn:expr, + update => $update_fn:expr, + delete => $delete_fn:expr $(,)? + ) => ( + pub struct $collection; + struct Ingestor; + + impl $crate::collections::Collection for $collection { + fn new() -> Self { Self } + + fn get_nsid(&self) -> String { + $nsid + } + + fn get_ingestor( + &self + ) -> Box { + Box::new(Ingestor::new()) + } + } + + impl Ingestor { + pub fn new() -> Self { Self } + + pub async fn handle_commit( + &self, + message: rocketman::types::event::Event + ) -> anyhow::Result<()> { + use rocketman::types::event::Operation; + + let state = $crate::collections::CommitIngestorState { }; + + if let Some(commit) = &message.commit { + match commit.operation { + Operation::Create => ($create_fn)(state, message).await?, + Operation::Update => ($update_fn)(state, message).await?, + Operation::Delete => ($delete_fn)(state, message).await?, + } + } else { + return Err(anyhow::anyhow!("Message has no commit")); + } + Ok(()) + } + } + + #[async_trait::async_trait] + impl rocketman::ingestion::LexiconIngestor for Ingestor { + async fn ingest( + &self, + message: rocketman::types::event::Event + ) -> anyhow::Result<()> { + self.handle_commit(message).await + } + } + ); +} + +pub mod my_spoor_log_session; +pub use my_spoor_log_session::MySpoorLogSession; +pub mod my_spoor_log_activity; +pub use my_spoor_log_activity::MySpoorLogActivity; + +struct CommitIngestorState; + +pub trait Collection { + fn new() -> Self; + fn get_nsid(&self) -> String; + fn get_ingestor(&self) -> Box; +} + diff --git a/ingestor/src/collections/app_bsky_feed_post.rs b/ingestor/src/collections/app_bsky_feed_post.rs new file mode 100644 index 0000000..d57bb1d --- /dev/null +++ b/ingestor/src/collections/app_bsky_feed_post.rs @@ -0,0 +1,26 @@ +use crate::collections::CommitIngestorState; +use rocketman::types::event::Event; +use serde_json::Value; +use anyhow::Result; +use tracing::info; + +async fn handle_change( + _state: CommitIngestorState, + message: Event +) -> Result<()> { + info!("{:?}", message); + Ok(()) +} + +async fn handle_delete( + _state: CommitIngestorState, + message: Event +) -> Result<()> { + info!("{:?}", message); + Ok(()) +} + +create_commit_collection!(AppBskyFeedPost, "app.bsky.feed.post".to_string(), + change => handle_change, + delete => handle_delete, +); diff --git a/ingestor/src/collections/my_spoor_log_activity.rs b/ingestor/src/collections/my_spoor_log_activity.rs new file mode 100644 index 0000000..b664220 --- /dev/null +++ b/ingestor/src/collections/my_spoor_log_activity.rs @@ -0,0 +1,30 @@ +use crate::collections::CommitIngestorState; +use atproto::{ + Collection as AtprotoCollection, + lexicons::my::spoor::log::Activity, +}; +use rocketman::types::event::Event; +use serde_json::Value; +use anyhow::Result; +use tracing::info; + +async fn handle_change( + _state: CommitIngestorState, + message: Event +) -> Result<()> { + info!("{:?}", message); + Ok(()) +} + +async fn handle_delete( + _state: CommitIngestorState, + message: Event +) -> Result<()> { + info!("{:?}", message); + Ok(()) +} + +create_commit_collection!(MySpoorLogActivity, Activity::NSID.to_string(), + change => handle_change, + delete => handle_delete, +); diff --git a/ingestor/src/collections/my_spoor_log_session.rs b/ingestor/src/collections/my_spoor_log_session.rs new file mode 100644 index 0000000..c90e7de --- /dev/null +++ b/ingestor/src/collections/my_spoor_log_session.rs @@ -0,0 +1,30 @@ +use crate::collections::CommitIngestorState; +use atproto::{ + Collection as AtprotoCollection, + lexicons::my::spoor::log::Session, +}; +use rocketman::types::event::Event; +use serde_json::Value; +use anyhow::Result; +use tracing::info; + +async fn handle_change( + _state: CommitIngestorState, + message: Event +) -> Result<()> { + info!("{:?}", message); + Ok(()) +} + +async fn handle_delete( + _state: CommitIngestorState, + message: Event +) -> Result<()> { + info!("{:?}", message); + Ok(()) +} + +create_commit_collection!(MySpoorLogSession, Session::NSID.to_string(), + change => handle_change, + delete => handle_delete, +); diff --git a/ingestor/src/ingestor.rs b/ingestor/src/ingestor.rs new file mode 100644 index 0000000..e2a80f3 --- /dev/null +++ b/ingestor/src/ingestor.rs @@ -0,0 +1,53 @@ +use crate::collections::Collection; +use rocketman::{ + options::JetstreamOptions, + ingestion::LexiconIngestor, + connection::JetstreamConnection, + handler, +}; +use std::{ + collections::HashMap, + sync::{Arc, Mutex}, +}; +use tracing::{info, error}; + +pub struct Ingestor { + ingesters: HashMap>, +} + +impl Ingestor { + pub fn new() -> Self { + Self { ingesters: HashMap::new() } + } + + pub fn add_collection(&mut self, collection: C) { + self.ingesters.insert(collection.get_nsid(), collection.get_ingestor()); + } + + pub async fn start(self) { + info!("Starting ingestor with the following collections: {:?}", + self.ingesters.keys()); + let opts = JetstreamOptions::builder() + .wanted_collections(self.ingesters.keys().cloned().collect()) + .build(); + let jetstream = JetstreamConnection::new(opts); + let cursor: Arc>> = Arc::new(Mutex::new(None)); + let msg_rx = jetstream.get_msg_rx(); + let reconnect_tx = jetstream.get_reconnect_tx(); + + let cursor_clone = cursor.clone(); + tokio::spawn(async move { + while let Ok(message) = msg_rx.recv_async().await { + if let Err(e) = handler::handle_message(message, &self.ingesters, + reconnect_tx.clone(), cursor_clone.clone()).await { + error!("Error processing message: {}", e); + } + } + }); + + if let Err(e) = jetstream.connect(cursor.clone()).await { + error!("Failed to connect to Jetstream: {}", e); + std::process::exit(1); + } + } +} diff --git a/ingestor/src/main.rs b/ingestor/src/main.rs new file mode 100644 index 0000000..08af557 --- /dev/null +++ b/ingestor/src/main.rs @@ -0,0 +1,21 @@ +use crate::{ + collections::{ + Collection, + MySpoorLogActivity, MySpoorLogSession, + }, + ingestor::Ingestor, +}; + +mod ingestor; +mod collections; + +#[tokio::main] +async fn main() { + let subscriber = tracing_subscriber::FmtSubscriber::new(); + let _ = tracing::subscriber::set_global_default(subscriber); + + let mut ingestor = Ingestor::new(); + ingestor.add_collection(MySpoorLogActivity::new()); + ingestor.add_collection(MySpoorLogSession::new()); + ingestor.start().await; +} diff --git a/src/ingestor.rs b/src/ingestor.rs deleted file mode 100644 index 1dc31cc..0000000 --- a/src/ingestor.rs +++ /dev/null @@ -1,75 +0,0 @@ -use crate::lexicons::my::spoor::log::{Activity, Session}; -use async_trait::async_trait; -use atrium_api::types::Collection; -use rocketman::{ - options::JetstreamOptions, - ingestion::LexiconIngestor, - // types::event::{Event, Operation}, - types::event::Event, - connection::JetstreamConnection, - handler, -}; -use serde_json::value::Value; -use std::{ - collections::HashMap, - sync::{Arc, Mutex}, -}; -use tracing::{error, info}; -use anyhow::Result; - -enum Ingestor { - Jetstream(SpoorJetstream) -} - -struct SpoorJetstream; - -#[async_trait] -impl LexiconIngestor for SpoorJetstream { - async fn ingest(&self, message: Event) -> Result<()> { - info!("{:?}", message); - // if let Some(commit) = &message.commit { - // match commit.operation { - // Operation::Create | Operation::Update => {} - // Operation::Delete => {} - // } - // } else { - // return Err("Message has no commit"); - // } - Ok(()) - } -} - -pub async fn start_ingestor() { - info!("Starting ingestor"); - let nsids = vec![ - Activity::NSID.to_string(), - Session::NSID.to_string(), - ]; - let opts = JetstreamOptions::builder().wanted_collections(nsids.clone()).build(); - let jetstream = JetstreamConnection::new(opts); - - let mut ingesters: HashMap> = HashMap::new(); - for nsid in nsids { - ingesters.insert(nsid, Box::new(SpoorJetstream)); - } - - let cursor: Arc>> = Arc::new(Mutex::new(None)); - - let msg_rx = jetstream.get_msg_rx(); - let reconnect_tx = jetstream.get_reconnect_tx(); - - let cursor_clone = cursor.clone(); - tokio::spawn(async move { - while let Ok(message) = msg_rx.recv_async().await { - if let Err(e) = handler::handle_message(message, &ingesters, - reconnect_tx.clone(), cursor_clone.clone()).await { - error!("Error processing message: {}", e); - } - } - }); - - if let Err(e) = jetstream.connect(cursor.clone()).await { - error!("Failed to connect to Jetstream: {}", e); - std::process::exit(1); - } -}