#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub enum ServerUrl {
#[default]
Prod,
Custom(String),
}
impl ServerUrl {
pub const PROD: &'static str = "https://code.aretta.ai";
pub fn as_str(&self) -> &str {
match self {
Self::Prod => Self::PROD,
Self::Custom(s) => s,
}
}
pub fn parse(raw: &str) -> Self {
let trimmed = raw.trim();
match trimmed {
"prod" | "production" => Self::Prod,
"" => Self::Prod,
other if other.starts_with("http://") || other.starts_with("https://") => {
Self::Custom(other.trim_end_matches('/').to_string())
}
other => Self::Custom(format!("https://{}", other.trim_end_matches('/'))),
}
}
pub fn is_well_known(&self) -> bool {
matches!(self, Self::Prod)
}
}
impl std::fmt::Display for ServerUrl {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
#[aristo::intent(
"Data-plane base-URL precedence is exactly ARETTA_API_URL (env) > \
aristo.toml [instance] url > the account server, in that order and \
no other. A blank/whitespace env override is treated as unset \
(matching the login resolver, login_server) so it falls through to \
[instance] then server instead of routing to an empty base. A \
present env override is returned verbatim (trimmed, not \
normalized), preserving CI/test redirects; the [instance] url is \
normalized via ServerUrl::parse; server.as_str() is the final \
fallback (its default is code.aretta.ai). Reordering these tiers, \
dropping the blank-as-unset guard, or normalizing or dropping a \
present verbatim env override, would silently misroute verify and \
canon-match requests to the wrong Aretta deployment.",
verify = "neural",
id = "data_plane_base_precedence"
)]
pub fn data_plane_base(
env_override: Option<&str>,
instance: Option<&str>,
server: &ServerUrl,
) -> String {
if let Some(v) = env_override.map(str::trim).filter(|s| !s.is_empty()) {
return v.to_string();
}
if let Some(inst) = instance.map(str::trim).filter(|s| !s.is_empty()) {
return ServerUrl::parse(inst).as_str().to_string();
}
server.as_str().to_string()
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LoginServerSource {
Flag,
Env,
Discovered,
Default,
}
impl LoginServerSource {
pub fn provenance(self, repo_full_name: &str) -> Option<String> {
match self {
Self::Flag => Some("from --server".to_string()),
Self::Env => Some("from ARETTA_API_URL".to_string()),
Self::Discovered => Some(format!("discovered for {repo_full_name}")),
Self::Default => None,
}
}
}
pub fn login_server(
flag: Option<&str>,
env_override: Option<&str>,
) -> (ServerUrl, LoginServerSource) {
if let Some(f) = flag {
return (ServerUrl::parse(f), LoginServerSource::Flag);
}
if let Some(v) = env_override.map(str::trim).filter(|s| !s.is_empty()) {
return (ServerUrl::parse(v), LoginServerSource::Env);
}
(ServerUrl::Prod, LoginServerSource::Default)
}
pub fn login_server_discovering(
flag: Option<&str>,
env_override: Option<&str>,
platform: &ServerUrl,
discover: impl FnOnce(&ServerUrl) -> Option<super::discovery::DiscoveredOrg>,
) -> (ServerUrl, LoginServerSource) {
let (server, source) = login_server(flag, env_override);
if source != LoginServerSource::Default {
return (server, source);
}
match discover(platform) {
Some(org) => (
ServerUrl::parse(&org.base_url),
LoginServerSource::Discovered,
),
None => (platform.clone(), LoginServerSource::Default),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn prod_resolves_to_code_aretta_ai() {
assert_eq!(ServerUrl::Prod.as_str(), "https://code.aretta.ai");
}
#[test]
fn parse_prod_aliases() {
assert_eq!(ServerUrl::parse("prod"), ServerUrl::Prod);
assert_eq!(ServerUrl::parse("production"), ServerUrl::Prod);
assert_eq!(ServerUrl::parse(" prod "), ServerUrl::Prod);
}
#[test]
fn former_dev_aliases_are_now_plain_custom_hosts() {
assert_eq!(
ServerUrl::parse("dev"),
ServerUrl::Custom("https://dev".into())
);
assert_eq!(
ServerUrl::parse("development"),
ServerUrl::Custom("https://development".into())
);
assert_eq!(
ServerUrl::parse("staging"),
ServerUrl::Custom("https://staging".into())
);
}
#[test]
fn parse_full_url_passes_through_as_custom() {
let s = ServerUrl::parse("https://aretta.example.com");
assert_eq!(s, ServerUrl::Custom("https://aretta.example.com".into()));
assert_eq!(s.as_str(), "https://aretta.example.com");
}
#[test]
fn parse_http_url_is_accepted_for_self_hosted() {
let s = ServerUrl::parse("http://aretta.internal");
assert_eq!(s, ServerUrl::Custom("http://aretta.internal".into()));
}
#[test]
fn parse_strips_trailing_slash_for_clean_format_strings() {
let s = ServerUrl::parse("https://example.com/");
assert_eq!(s.as_str(), "https://example.com");
}
#[test]
fn parse_bare_host_defaults_to_https() {
let s = ServerUrl::parse("aretta.example.com");
assert_eq!(s, ServerUrl::Custom("https://aretta.example.com".into()));
}
#[test]
fn parse_empty_string_falls_back_to_prod() {
assert_eq!(ServerUrl::parse(""), ServerUrl::Prod);
assert_eq!(ServerUrl::parse(" "), ServerUrl::Prod);
}
#[test]
fn default_is_prod() {
assert_eq!(ServerUrl::default(), ServerUrl::Prod);
}
#[test]
fn is_well_known_matches_prod_only() {
assert!(ServerUrl::Prod.is_well_known());
assert!(!ServerUrl::Custom("https://example.com".into()).is_well_known());
}
#[test]
fn display_renders_full_url() {
assert_eq!(format!("{}", ServerUrl::Prod), "https://code.aretta.ai");
assert_eq!(
format!("{}", ServerUrl::Custom("https://x.example.com".into())),
"https://x.example.com"
);
}
#[test]
fn data_plane_base_env_override_wins_verbatim() {
let s = data_plane_base(
Some("https://ci.example.com"),
Some("https://turso.aretta.ai"),
&ServerUrl::Prod,
);
assert_eq!(s, "https://ci.example.com");
}
#[test]
fn data_plane_base_empty_env_falls_through_to_instance() {
let s = data_plane_base(Some(""), Some("https://turso.aretta.ai"), &ServerUrl::Prod);
assert_eq!(s, "https://turso.aretta.ai");
}
#[test]
fn data_plane_base_whitespace_env_falls_through_to_server() {
let s = data_plane_base(Some(" "), None, &ServerUrl::Prod);
assert_eq!(s, "https://code.aretta.ai");
}
#[test]
fn data_plane_base_instance_beats_server_and_is_normalized() {
let s = data_plane_base(None, Some("turso.aretta.ai/"), &ServerUrl::Prod);
assert_eq!(s, "https://turso.aretta.ai");
}
#[test]
fn data_plane_base_blank_instance_is_ignored() {
let s = data_plane_base(
None,
Some(" "),
&ServerUrl::Custom("https://staging.example.com".into()),
);
assert_eq!(s, "https://staging.example.com");
}
#[test]
fn data_plane_base_falls_back_to_server() {
let s = data_plane_base(None, None, &ServerUrl::Prod);
assert_eq!(s, "https://code.aretta.ai");
}
#[test]
fn login_server_flag_beats_env() {
let (server, source) = login_server(
Some("https://flag.example.com"),
Some("https://turso.aretta.ai"),
);
assert_eq!(server, ServerUrl::Custom("https://flag.example.com".into()));
assert_eq!(source, LoginServerSource::Flag);
}
#[test]
fn login_server_env_beats_default() {
let (server, source) = login_server(None, Some("https://turso.aretta.ai"));
assert_eq!(server, ServerUrl::Custom("https://turso.aretta.ai".into()));
assert_eq!(source, LoginServerSource::Env);
}
#[test]
fn login_server_env_parsed_via_serverurl_parse() {
assert_eq!(login_server(None, Some("prod")).0, ServerUrl::Prod);
assert_eq!(
login_server(None, Some("turso.aretta.ai/")).0,
ServerUrl::Custom("https://turso.aretta.ai".into())
);
}
#[test]
fn login_server_blank_env_is_ignored() {
let (server, source) = login_server(None, Some(" "));
assert_eq!(server, ServerUrl::Prod);
assert_eq!(source, LoginServerSource::Default);
}
#[test]
fn login_server_unset_env_falls_back_to_prod() {
let (server, source) = login_server(None, None);
assert_eq!(server, ServerUrl::Prod);
assert_eq!(source, LoginServerSource::Default);
}
#[test]
fn login_server_provenance_named_only_when_not_default() {
let repo = "owner/repo";
assert_eq!(
LoginServerSource::Flag.provenance(repo).as_deref(),
Some("from --server")
);
assert_eq!(
LoginServerSource::Env.provenance(repo).as_deref(),
Some("from ARETTA_API_URL")
);
assert_eq!(
LoginServerSource::Discovered.provenance(repo).as_deref(),
Some("discovered for owner/repo")
);
assert_eq!(LoginServerSource::Default.provenance(repo), None);
}
use super::super::discovery::DiscoveredOrg;
fn discovered(base_url: &str) -> DiscoveredOrg {
DiscoveredOrg {
org: "acme".into(),
base_url: base_url.into(),
}
}
#[test]
fn discovering_flag_skips_the_network_lookup() {
let (server, source) = login_server_discovering(
Some("https://flag.example.com"),
Some("https://turso.aretta.ai"),
&ServerUrl::Prod,
|_| panic!("discovery must not run when --server is given"),
);
assert_eq!(server, ServerUrl::Custom("https://flag.example.com".into()));
assert_eq!(source, LoginServerSource::Flag);
}
#[test]
fn discovering_env_skips_the_network_lookup() {
let (server, source) = login_server_discovering(
None,
Some("https://turso.aretta.ai"),
&ServerUrl::Prod,
|_| panic!("discovery must not run when ARETTA_API_URL is set"),
);
assert_eq!(server, ServerUrl::Custom("https://turso.aretta.ai".into()));
assert_eq!(source, LoginServerSource::Env);
}
#[test]
fn discovering_uses_discovered_base_url_at_the_platform() {
let mut queried_platform = None;
let (server, source) = login_server_discovering(None, None, &ServerUrl::Prod, |platform| {
queried_platform = Some(platform.as_str().to_string());
Some(discovered("https://turso.aretta.ai"))
});
assert_eq!(server, ServerUrl::Custom("https://turso.aretta.ai".into()));
assert_eq!(source, LoginServerSource::Discovered);
assert_eq!(queried_platform.as_deref(), Some(ServerUrl::PROD));
}
#[test]
fn discovering_falls_back_to_the_platform_on_miss() {
let (server, source) = login_server_discovering(None, None, &ServerUrl::Prod, |_| None);
assert_eq!(server, ServerUrl::Prod);
assert_eq!(source, LoginServerSource::Default);
}
#[test]
fn discovering_miss_fallback_follows_a_relocated_platform() {
let platform = ServerUrl::Custom("http://127.0.0.1:9".into());
let (server, source) = login_server_discovering(None, None, &platform, |_| None);
assert_eq!(server, platform);
assert_eq!(source, LoginServerSource::Default);
}
#[test]
fn discovering_blank_env_still_runs_discovery() {
let (server, source) =
login_server_discovering(None, Some(" "), &ServerUrl::Prod, |_| {
Some(discovered("https://x.aretta.ai"))
});
assert_eq!(server, ServerUrl::Custom("https://x.aretta.ai".into()));
assert_eq!(source, LoginServerSource::Discovered);
}
}