55 lines
1.4 KiB
Gleam
55 lines
1.4 KiB
Gleam
import dot_env
|
|
import dot_env/env
|
|
import gleam/result
|
|
import spacetraders_sdk/utils/auth.{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) {
|
|
auth.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) {
|
|
auth.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()
|
|
}
|