Skip to content

Commit 9820787

Browse files
Rewrite apps/restate from TypeScript to Rust (restate-sdk 0.7.0, Soniox-only) (#3857)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: yujonglee <yujonglee.dev@gmail.com>
1 parent b9c089c commit 9820787

25 files changed

+1094
-1152
lines changed

Cargo.lock

Lines changed: 296 additions & 45 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ members = [
1414
"apps/desktop/src-tauri",
1515
"apps/eval-cli",
1616
"apps/granola",
17+
"apps/restate",
1718
"apps/tools",
1819
"crates/*",
1920
"plugins/*",

apps/restate/.gitignore

Lines changed: 0 additions & 1 deletion
This file was deleted.

apps/restate/Cargo.toml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
[package]
2+
name = "restate"
3+
version = "0.1.0"
4+
edition = "2024"
5+
6+
[dependencies]
7+
restate-sdk = "0.7.0"
8+
9+
chrono = { workspace = true, features = ["serde"] }
10+
dotenvy = { workspace = true }
11+
envy = { workspace = true }
12+
reqwest = { workspace = true, features = ["json"] }
13+
serde = { workspace = true, features = ["derive"] }
14+
serde_json = { workspace = true }
15+
tokio = { workspace = true, features = ["rt-multi-thread", "macros", "signal"] }
16+
tracing = { workspace = true }
17+
tracing-subscriber = { workspace = true, features = ["env-filter"] }
18+
urlencoding = { workspace = true }

apps/restate/package.json

Lines changed: 0 additions & 32 deletions
This file was deleted.

apps/restate/src/deepgram.ts

Lines changed: 0 additions & 86 deletions
This file was deleted.

apps/restate/src/env.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
use std::path::Path;
2+
use std::sync::OnceLock;
3+
4+
use serde::Deserialize;
5+
6+
#[derive(Deserialize, Clone)]
7+
pub struct Env {
8+
pub restate_identity_key: Option<String>,
9+
pub restate_ingress_url: String,
10+
pub soniox_api_key: String,
11+
pub supabase_url: String,
12+
pub supabase_service_role_key: String,
13+
#[serde(default = "default_port")]
14+
pub port: u16,
15+
}
16+
17+
fn default_port() -> u16 {
18+
9080
19+
}
20+
21+
static ENV: OnceLock<Env> = OnceLock::new();
22+
23+
pub fn env() -> &'static Env {
24+
ENV.get_or_init(|| {
25+
let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR"));
26+
let repo_root = manifest_dir
27+
.parent()
28+
.and_then(|p| p.parent())
29+
.unwrap_or(manifest_dir);
30+
let _ = dotenvy::from_path(repo_root.join(".env.supabase"));
31+
let _ = dotenvy::from_path(repo_root.join(".env.restate"));
32+
let _ = dotenvy::from_path(manifest_dir.join(".env"));
33+
envy::from_env().expect("Failed to load environment")
34+
})
35+
}

apps/restate/src/env.ts

Lines changed: 0 additions & 13 deletions
This file was deleted.

apps/restate/src/index.ts

Lines changed: 0 additions & 18 deletions
This file was deleted.

apps/restate/src/main.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
use restate_sdk::endpoint::Endpoint;
2+
use restate_sdk::http_server::HttpServer;
3+
4+
mod env;
5+
mod services;
6+
mod soniox;
7+
mod supabase;
8+
9+
use services::rate_limit::RateLimiter;
10+
use services::storage_cleanup::StorageCleanup;
11+
use services::stt_file::SttFile;
12+
13+
#[tokio::main]
14+
async fn main() {
15+
tracing_subscriber::fmt::init();
16+
let env = env::env();
17+
18+
let mut builder = Endpoint::builder()
19+
.bind(services::SttFileImpl::new(env).serve())
20+
.bind(services::RateLimiterImpl.serve())
21+
.bind(services::StorageCleanupImpl::new(env).serve());
22+
23+
if let Some(key) = &env.restate_identity_key {
24+
builder = builder.identity_key(key).expect("invalid identity key");
25+
}
26+
27+
let addr = format!("0.0.0.0:{}", env.port);
28+
tracing::info!(addr = %addr, "server listening");
29+
30+
HttpServer::new(builder.build())
31+
.listen_and_serve(addr.parse().unwrap())
32+
.await;
33+
}

0 commit comments

Comments
 (0)