From 8cb875db27889cd1c470e15c68a746954bdbfc3a Mon Sep 17 00:00:00 2001 From: Mike Sawka Date: Mon, 21 Sep 2026 14:52:20 -0700 Subject: [PATCH] Add env() expr function for environment variable resolution Lets spec expressions (query_params, body_params, path templates, field exprs) pull values from the process environment via env("FOO") or env("FOO", "default"), instead of only flags/auth/ctx. AI-Session-Id: 350c7b76-2988-43b5-96a2-9f6224791318 AI-Tool: claude-code AI-Model: unknown --- pkg/exprenv/exprenv.go | 1 + pkg/exprenv/exprfuncs/exprfuncs.go | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/pkg/exprenv/exprenv.go b/pkg/exprenv/exprenv.go index 97fb49f..7bd574b 100644 --- a/pkg/exprenv/exprenv.go +++ b/pkg/exprenv/exprenv.go @@ -61,6 +61,7 @@ func BaseFuncs(ptyEnabled bool) map[string]any { "truncate": exprfuncs.Truncate, "substr": exprfuncs.Substr, "formatOrder": exprfuncs.FormatOrder, + "env": exprfuncs.Env, } } diff --git a/pkg/exprenv/exprfuncs/exprfuncs.go b/pkg/exprenv/exprfuncs/exprfuncs.go index eca2282..c3031a7 100644 --- a/pkg/exprenv/exprfuncs/exprfuncs.go +++ b/pkg/exprenv/exprfuncs/exprfuncs.go @@ -8,6 +8,7 @@ package exprfuncs import ( "encoding/json" "fmt" + "os" "strconv" "strings" "time" @@ -414,3 +415,15 @@ func IsBlank(v any) bool { s, ok := v.(string) return ok && s == "" } + +// Env returns the value of the named environment variable, or def (default "") +// when it is unset or empty. +func Env(name string, def ...string) string { + if v := os.Getenv(name); v != "" { + return v + } + if len(def) > 0 { + return def[0] + } + return "" +}