tracks lexicons and how many times they appeared on the jetstream
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(server): implement fetching tracking since

dusk 999365ad 383ee9e6

+29
+12
server/src/api.rs
··· 51 51 .route("/events", get(events)) 52 52 .route("/stream_events", get(stream_events)) 53 53 .route("/hits", get(hits)) 54 + .route("/since", get(since)) 54 55 .route_layer(CompressionLayer::new().br(true).deflate(true).gzip(true).zstd(true)) 55 56 .route_layer(PropagateRequestIdLayer::x_request_id()) 56 57 .route_layer( ··· 219 220 .instrument(span) 220 221 }) 221 222 } 223 + 224 + #[derive(Debug, Serialize)] 225 + struct Since { 226 + since: u64, 227 + } 228 + 229 + async fn since(db: State<Arc<Db>>) -> AppResult<Json<Since>> { 230 + Ok(Json(Since { 231 + since: db.tracking_since()?, 232 + })) 233 + }
+17
server/src/db.rs
··· 205 205 }, 206 206 ))) 207 207 } 208 + 209 + pub fn tracking_since(&self) -> AppResult<u64> { 210 + let _guard = self.hits.guard(); 211 + // HACK: we should actually store when we started tracking but im lazy 212 + // should be accurate enough 213 + let Some(tree) = self.hits.get("app.bsky.feed.like", &_guard) else { 214 + return Ok(0); 215 + }; 216 + 217 + let Some((timestamp_raw, _)) = tree.first_key_value()? else { 218 + return Ok(0); 219 + }; 220 + 221 + Ok(u64::from_be_bytes( 222 + timestamp_raw.as_ref().try_into().unwrap(), 223 + )) 224 + } 208 225 } 209 226 210 227 type TimestampRepr = [u8; 8];