import dot_env import dot_env/env import gleam/result import spacetraders_sdk.{type AccountToken, type AgentToken} pub type Env { Env(account_token: AccountToken, agent_token: AgentToken) } pub type EnvError { MissingVar(name: String) InvalidVar(name: String) } pub fn get_account_token() -> Result(AccountToken, EnvError) { env.get_string("ACCOUNT_TOKEN") |> result.replace_error(MissingVar("ACCOUNT_TOKEN")) |> result.then(fn(value) { spacetraders_sdk.parse_account_token(value) |> result.replace_error(InvalidVar("ACCOUNT_TOKEN")) }) } pub fn get_agent_token() -> Result(AgentToken, EnvError) { env.get_string("AGENT_TOKEN") |> result.replace_error(MissingVar("AGENT_TOKEN")) |> result.then(fn(value) { spacetraders_sdk.parse_agent_token(value) |> result.replace_error(InvalidVar("AGENT_TOKEN")) }) } pub fn load_env() -> Result(Env, EnvError) { use account_token <- result.try(get_account_token()) use agent_token <- result.try(get_agent_token()) Ok(Env(account_token:, agent_token:)) } pub fn load_dotenv() -> Result(Env, EnvError) { dot_env.load_default() load_env() } pub fn load_env_unsafe() -> Env { let assert Ok(account_token) = get_account_token() as "Missing or invalid account token" let assert Ok(agent_token) = get_agent_token() as "Missing or invalid agent token" Env(account_token:, agent_token:) } pub fn load_dotenv_unsafe() -> Env { dot_env.load_default() load_env_unsafe() }