nbi 0.1.6

TUI for checking package name availability across npm, crates.io, PyPI, .dev domains and registering via GitHub
mod api;

use anyhow::Result;
use axum::{
  routing::{get, post},
  Router,
};
use std::net::SocketAddr;
use tower_http::cors::{Any, CorsLayer};

pub async fn start(port: u16, open_browser: bool) -> Result<()> {
  let cors = CorsLayer::new()
    .allow_origin(Any)
    .allow_methods(Any)
    .allow_headers(Any);

  let app = Router::new()
    .route("/", get(api::index))
    .route("/api/check", post(api::check_availability))
    .route("/api/domain", post(api::check_domain))
    .route("/api/domain/full", post(api::check_full_domains))
    .route("/api/config", get(api::get_config))
    .route("/api/config", post(api::save_config))
    .layer(cors);

  let addr = SocketAddr::from(([127, 0, 0, 1], port));
  println!("🚀 Server running at http://{}", addr);

  if open_browser {
    let url = format!("http://{}", addr);
    if let Err(e) = open::that(&url) {
      eprintln!("Failed to open browser: {}", e);
    }
  }

  let listener = tokio::net::TcpListener::bind(addr).await?;
  axum::serve(listener, app).await?;

  Ok(())
}