forked from boos/BoosAPI
refactor: purge Node.js, Rust is the one true backend
- Moved boosapi-rs/* to repo root - Deleted all Node.js source (src/server/, src/web/, scripts/) - Deleted node_modules, package.json, tsconfig, vite.config - Updated .gitignore and AGENTS.md for Rust-only stack - Fixed static file path for frontend dist/web/ - Dockerfile stays the same (already Rust-only) - Kept dist/web/ for Rust static serving
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
use crate::proxy::conductor::{FailureInfo, ProxyConductor, SelectedChannel, SuccessMetrics};
|
||||
use crate::proxy::token_router::TokenRouter;
|
||||
use futures::FutureExt;
|
||||
use sqlx::SqlitePool;
|
||||
use std::sync::Arc;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct ProxyRuntime {
|
||||
pub router: TokenRouter,
|
||||
}
|
||||
|
||||
impl ProxyRuntime {
|
||||
pub fn new(db: Arc<SqlitePool>) -> Self {
|
||||
Self {
|
||||
router: TokenRouter::new(db),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn conductor(&self) -> ProxyConductor {
|
||||
let router = self.router.clone();
|
||||
let next_router = self.router.clone();
|
||||
let success_router = self.router.clone();
|
||||
let failure_router = self.router.clone();
|
||||
|
||||
ProxyConductor {
|
||||
select_channel: Arc::new(move |model, _policy| {
|
||||
let router = router.clone();
|
||||
async move { router.resolve_selected(&model).await.ok() }.boxed()
|
||||
}),
|
||||
select_next_channel: Arc::new(move |model, excluded, _policy| {
|
||||
let router = next_router.clone();
|
||||
async move { router.resolve_next_selected(&model, &excluded).await.ok() }.boxed()
|
||||
}),
|
||||
record_success: Arc::new(move |channel_id: i64, metrics: SuccessMetrics| {
|
||||
let router = success_router.clone();
|
||||
async move {
|
||||
let _ = router.record_success(channel_id, metrics).await;
|
||||
}
|
||||
.boxed()
|
||||
}),
|
||||
record_failure: Arc::new(move |channel_id: i64, info: FailureInfo| {
|
||||
let router = failure_router.clone();
|
||||
async move {
|
||||
let _ = router.record_failure(channel_id, info).await;
|
||||
}
|
||||
.boxed()
|
||||
}),
|
||||
refresh_auth: Some(Arc::new(|selected: SelectedChannel, _info: FailureInfo| {
|
||||
async move { Some(selected) }.boxed()
|
||||
})),
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user