// SPDX-FileCopyrightText: Amolith // // SPDX-License-Identifier: AGPL-3.0-or-later import config import envoy import gleam/option.{None, Some} import gleam/string import providers.{type Provider} import shellout pub fn get(provider: Provider, cfg: config.Config) -> Result(String, String) { // Precedence: api_key_cmd > api_key > environment variable case cfg.api_key_cmd { "" -> case cfg.api_key { "" -> get_from_env(provider) key -> Ok(key) } cmd -> run_cmd(cmd) } } fn run_cmd(cmd: String) -> Result(String, String) { case shellout.command(run: "sh", with: ["-c", cmd], in: ".", opt: []) { Ok(output) -> Ok(string.trim(output)) Error(#(_status, msg)) -> Error("api_key_cmd failed: " <> msg) } } fn get_from_env(provider: Provider) -> Result(String, String) { case provider.api_key_env { Some(env_ref) -> { let env_var = resolve_env_var(env_ref) case envoy.get(env_var) { Ok(key) -> Ok(key) Error(_) -> Error("Missing environment variable: " <> env_var) } } None -> Error("No API key configured for provider: " <> provider.id) } } fn resolve_env_var(value: String) -> String { case value { "$" <> rest -> rest other -> other } }