mirror of
https://github.com/openclaw/clawhub.git
synced 2026-08-14 00:47:57 +00:00
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
83 lines
2.4 KiB
Bash
Executable File
83 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# axiom-api: Make authenticated requests to Axiom API
|
|
#
|
|
# Usage: axiom-api <deployment> <method> <path> [json-body]
|
|
#
|
|
# Reads credentials from ~/.axiom.toml (shared with axiom-sre)
|
|
# Set AXIOM_URL_OVERRIDE to route requests to a specific edge deployment endpoint.
|
|
# Set AXIOM_CONNECT_TIMEOUT / AXIOM_MAX_TIME (seconds) to override the default
|
|
# connection (10s) and total request (120s) timeouts.
|
|
#
|
|
# Examples:
|
|
# axiom-api prod GET /v1/datasets
|
|
# axiom-api prod POST /v1/query/_mpl '{"mpl":"..."}'
|
|
|
|
set -euo pipefail
|
|
|
|
DEPLOYMENT="${1:-}"
|
|
METHOD="${2:-}"
|
|
PATH_="${3:-}"
|
|
BODY="${4:-}"
|
|
|
|
if [[ -z "$DEPLOYMENT" || -z "$METHOD" || -z "$PATH_" ]]; then
|
|
echo "Usage: axiom-api <deployment> <method> <path> [json-body]" >&2
|
|
exit 1
|
|
fi
|
|
|
|
CONFIG_FILE="$HOME/.axiom.toml"
|
|
if [[ ! -f "$CONFIG_FILE" ]]; then
|
|
echo "Error: $CONFIG_FILE not found. Run scripts/setup for help." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Parse TOML for deployment config
|
|
extract_value() {
|
|
local key="$1"
|
|
awk -v deployment="$DEPLOYMENT" -v key="$key" '
|
|
/^[[:space:]]*\[deployments\./ { in_deployment = ($0 ~ "\\[deployments\\." deployment "\\]") }
|
|
in_deployment && $1 == key { gsub(/[" ]/, "", $3); print $3; exit }
|
|
' "$CONFIG_FILE"
|
|
}
|
|
|
|
URL="${AXIOM_URL_OVERRIDE:-$(extract_value "url")}"
|
|
TOKEN=$(extract_value "token")
|
|
ORG_ID=$(extract_value "org_id")
|
|
|
|
if [[ -z "$URL" || -z "$TOKEN" || -z "$ORG_ID" ]]; then
|
|
echo "Error: Could not find deployment '$DEPLOYMENT' in $CONFIG_FILE" >&2
|
|
echo "" >&2
|
|
echo "Available deployments:" >&2
|
|
grep '[[:space:]]*\[deployments\.' "$CONFIG_FILE" | sed 's/.*\[deployments\.\(.*\)\]/ - \1/' >&2
|
|
exit 1
|
|
fi
|
|
|
|
CURL_ARGS=(
|
|
-s
|
|
--connect-timeout "${AXIOM_CONNECT_TIMEOUT:-10}"
|
|
--max-time "${AXIOM_MAX_TIME:-120}"
|
|
-w '\n%{http_code}'
|
|
-X "$METHOD"
|
|
-H "Authorization: Bearer $TOKEN"
|
|
-H "X-Axiom-Org-Id: $ORG_ID"
|
|
-H "Content-Type: application/json"
|
|
-H "Accept: ${AXIOM_ACCEPT:-application/json}"
|
|
-H "User-Agent: axiom-skills/1.0 (agent)"
|
|
)
|
|
|
|
if [[ -n "$BODY" ]]; then
|
|
CURL_ARGS+=(-d "$BODY")
|
|
fi
|
|
|
|
RESPONSE=$(curl "${CURL_ARGS[@]}" "${URL}${PATH_}")
|
|
|
|
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
|
|
BODY_CONTENT=$(echo "$RESPONSE" | sed '$d')
|
|
|
|
if [[ "$HTTP_CODE" -ge 200 && "$HTTP_CODE" -lt 300 ]]; then
|
|
echo "$BODY_CONTENT"
|
|
else
|
|
echo "Error: HTTP $HTTP_CODE from $METHOD ${URL}${PATH_}" >&2
|
|
echo "$BODY_CONTENT" >&2
|
|
exit 1
|
|
fi
|