forked from
rocksky.app/rocksky
A decentralized music tracking and discovery platform built on AT Protocol 馃幍
1use std::{env, sync::Arc};
2
3use dotenv::dotenv;
4use subscriber::ScrobbleSubscriber;
5use tokio::sync::Mutex;
6
7use crate::webhook_worker::AppState;
8
9pub mod profile;
10pub mod repo;
11pub mod subscriber;
12pub mod types;
13pub mod webhook;
14pub mod webhook_worker;
15pub mod xata;
16
17#[tokio::main]
18async fn main() -> Result<(), anyhow::Error> {
19 dotenv()?;
20 let jetstream_server = env::var("JETSTREAM_SERVER")
21 .unwrap_or_else(|_| "wss://jetstream2.us-west.bsky.network".to_string());
22 let url = format!(
23 "{}/subscribe?wantedCollections=app.rocksky.*",
24 jetstream_server
25 );
26 let subscriber = ScrobbleSubscriber::new(&url);
27
28 let redis_url = env::var("REDIS_URL").unwrap_or_else(|_| "redis://127.0.0.1:6379".to_string());
29 let redis = redis::Client::open(redis_url)?;
30 let queue_key =
31 env::var("WEBHOOK_QUEUE_KEY").unwrap_or_else(|_| "rocksky:webhook_queue".to_string());
32
33 let state = Arc::new(Mutex::new(AppState { redis, queue_key }));
34
35 subscriber.run(state).await?;
36 Ok(())
37}