use nabla_cli::config::{Config, DeploymentType};
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("๐งช Testing Deployment Modes");
println!("\n1. Current Environment Config...");
let current_config = Config::from_env().unwrap_or_default();
println!("โ
Current Config:");
println!(" Deployment: {:?}", current_config.deployment_type);
println!(" Port: {}", current_config.port);
println!(" Base URL: {}", current_config.base_url);
println!("\n2. Testing Deployment Type Parsing...");
let deployments = ["oss", "cloud", "private", "invalid"];
for deployment in deployments {
match deployment.parse::<DeploymentType>() {
Ok(dt) => println!("โ
'{}' โ {:?}", deployment, dt),
Err(e) => println!("โ '{}' โ Error: {}", deployment, e),
}
}
println!("\n3. Authentication Requirements by Mode:");
println!(" OSS: โ No auth needed - Direct local access");
println!(" Cloud: โ
Browser OAuth + JWT - Managed service");
println!(" Private: โ
JWT only - Self-hosted with auth");
println!("\n4. Feature Matrix:");
println!("โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโฌโโโโโโโโฌโโโโโโโโโโ");
println!("โ Feature โ OSS โ Cloud โ Private โ");
println!("โโโโโโโโโโโโโโโโโโโโโโโผโโโโโโผโโโโโโโโผโโโโโโโโโโค");
println!("โ Local Analysis โ โ
โ โ
โ โ
โ");
println!("โ CLI + TUI โ โ
โ โ
โ โ
โ");
println!("โ Web Portal โ โ โ โ
โ โ
โ");
println!("โ Team Collaboration โ โ โ โ
โ โ
โ");
println!("โ Browser Auth โ โ โ โ
โ โ โ");
println!("โ Custom Deployment โ โ โ โ โ โ
โ");
println!("โ SSO Integration โ โ โ โ โ โ
โ");
println!("โโโโโโโโโโโโโโโโโโโโโโโดโโโโโโดโโโโโโโโดโโโโโโโโโโ");
println!("\n5. Portal URL Examples:");
let examples = [
("acme-corp", "550e8400-e29b-41d4-a716-446655440000"),
("tech-startup", "123e4567-e89b-12d3-a456-426614174000"),
("enterprise-co", "987fcdeb-51a2-43d1-9f12-123456789abc"),
];
for (company, deployment_id) in examples {
let portal_url = format!("/portal/{}/{}", company, deployment_id);
println!(" {} โ https://nabla.dev{}", company, portal_url);
}
println!("\n6. Rate Limiting by Plan:");
let rate_limits = [
("oss", 100, "Community users"),
("cloud", 1000, "Paid cloud users"),
("private", 10000, "Enterprise customers"),
];
for (plan, limit, description) in rate_limits {
println!(
" {:>7} plan: {:>5} req/hour - {}",
plan, limit, description
);
}
println!("\n7. Environment Configuration Examples:");
println!(" OSS Mode:");
println!(" NABLA_DEPLOYMENT=oss");
println!(" # No additional config needed");
println!();
println!(" Cloud Mode:");
println!(" NABLA_DEPLOYMENT=cloud");
println!(" CLERK_PUBLISHABLE_KEY=pk_live_...");
println!(" BASE_URL=https://api.nabla.dev");
println!();
println!(" Private Mode:");
println!(" NABLA_DEPLOYMENT=private");
println!(" BASE_URL=https://nabla.yourcompany.com");
println!(" FIPS_MODE=true");
println!("\n8. JWT Claims Structure:");
println!(" {{");
println!(" \"sub\": \"company-name\", // Company identifier");
println!(" \"uid\": \"user@company.com\", // User within company");
println!(" \"deployment_id\": \"uuid-string\", // Deployment isolation");
println!(" \"plan\": \"cloud\", // Subscription tier");
println!(" \"rate_limit\": 1000, // Requests per hour");
println!(" \"exp\": 1234567890, // Expiration timestamp");
println!(" \"iat\": 1234567890, // Issued at timestamp");
println!(" \"jti\": \"jwt-id\" // JWT identifier");
println!(" }}");
println!("\n๐ Deployment mode analysis completed!");
println!("\n๐ก To test different modes, set NABLA_DEPLOYMENT environment variable:");
println!(" NABLA_DEPLOYMENT=oss cargo run --bin nabla-tui");
println!(" NABLA_DEPLOYMENT=cloud cargo run --bin nabla-tui --features cloud");
println!(" NABLA_DEPLOYMENT=private cargo run --bin nabla-tui");
Ok(())
}