client-finder/scripts/client-uat.sh

128 lines
4.1 KiB
Bash
Raw Normal View History

2026-03-11 23:36:43 +00:00
#!/usr/bin/env bash
set -euo pipefail
# Client UAT for skill-credit flow (safe by default: dry-run)
#
# Required env in live mode:
# AUTH_BASE, CLIENT_KEY
#
# Optional env:
# RUN_ID, QUANTITY, ACTUAL_CREDITS, FINAL_OUTCOME
#
# Examples:
# AUTH_BASE=https://api-gw-test.yuanwei-lnc.com CLIENT_KEY=sk_xxx ./client-uat.sh
# AUTH_BASE=https://api-gw-test.yuanwei-lnc.com CLIENT_KEY=sk_xxx ./client-uat.sh --live
# AUTH_BASE=https://api-gw-test.yuanwei-lnc.com CLIENT_KEY=sk_xxx FINAL_OUTCOME=failed ./client-uat.sh --live
AUTH_BASE="${AUTH_BASE:-}"
CLIENT_KEY="${CLIENT_KEY:-}"
RUN_ID="${RUN_ID:-wf_$(date +%Y%m%d_%H%M%S)}"
QUANTITY="${QUANTITY:-1}"
ACTUAL_CREDITS="${ACTUAL_CREDITS:-45}"
FINAL_OUTCOME="${FINAL_OUTCOME:-completed}" # completed | failed
LIVE=0
if [ "${1:-}" = "--live" ]; then
LIVE=1
fi
if [ "$LIVE" -eq 1 ]; then
if [ -z "$AUTH_BASE" ] || [ -z "$CLIENT_KEY" ]; then
echo "Missing env: AUTH_BASE and CLIENT_KEY are required in --live mode."
exit 1
fi
fi
print_cmd() {
echo "+ $*"
}
json_get() {
local raw="$1"
local key="$2"
python3 - "$raw" "$key" <<'PY'
import json, sys
raw = sys.argv[1]
key = sys.argv[2]
try:
data = json.loads(raw)
except Exception:
print("")
raise SystemExit(0)
val = data.get(key, "")
if val is None:
val = ""
print(val)
PY
}
echo "== Client UAT: skill-credit flow =="
echo "RUN_ID=$RUN_ID"
echo "FINAL_OUTCOME=$FINAL_OUTCOME"
if [ "$LIVE" -eq 0 ]; then
echo "Mode: dry-run (no network request)"
cat <<EOF
1) Exchange session token
curl -X POST "\$AUTH_BASE/auth/skill-credit/session" \\
-H "Content-Type: application/json" \\
-d '{"clientKey":"\$CLIENT_KEY"}'
2) Reserve credits
curl -X POST "\$AUTH_BASE/auth/skill-credit/runs/reserve" \\
-H "Authorization: Bearer <ACCESS_TOKEN>" \\
-H "Content-Type: application/json" \\
-d '{"runId":"$RUN_ID","service":"skill","action":"cold_outreach_run","quantity":$QUANTITY}'
3) Finalize
curl -X POST "\$AUTH_BASE/auth/skill-credit/runs/finalize" \\
-H "Authorization: Bearer <ACCESS_TOKEN>" \\
-H "Content-Type: application/json" \\
-d '{"runId":"$RUN_ID","outcome":"$FINAL_OUTCOME","actualCredits":$ACTUAL_CREDITS}'
4) Check balance
curl -X GET "\$AUTH_BASE/auth/skill-credit/balance" \\
-H "Authorization: Bearer <ACCESS_TOKEN>"
EOF
exit 0
fi
print_cmd curl -s -X POST "$AUTH_BASE/auth/skill-credit/session" -H "Content-Type: application/json" -d '{"clientKey":"***"}'
SESSION_JSON="$(curl -s -X POST "$AUTH_BASE/auth/skill-credit/session" \
-H "Content-Type: application/json" \
-d "{\"clientKey\":\"$CLIENT_KEY\"}")"
ACCESS_TOKEN="$(json_get "$SESSION_JSON" "accessToken")"
if [ -z "$ACCESS_TOKEN" ]; then
echo "Session exchange failed: $SESSION_JSON"
exit 1
fi
echo "Session OK."
print_cmd curl -s -X POST "$AUTH_BASE/auth/skill-credit/runs/reserve" -H "Authorization: Bearer <ACCESS_TOKEN>" -H "Content-Type: application/json" -d ...
RESERVE_JSON="$(curl -s -X POST "$AUTH_BASE/auth/skill-credit/runs/reserve" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"runId\":\"$RUN_ID\",\"service\":\"skill\",\"action\":\"cold_outreach_run\",\"quantity\":$QUANTITY}")"
echo "Reserve response: $RESERVE_JSON"
if [ "$FINAL_OUTCOME" = "completed" ]; then
FINAL_PAYLOAD="{\"runId\":\"$RUN_ID\",\"outcome\":\"completed\",\"actualCredits\":$ACTUAL_CREDITS}"
else
FINAL_PAYLOAD="{\"runId\":\"$RUN_ID\",\"outcome\":\"failed\",\"reason\":\"uat_failed_case\"}"
fi
print_cmd curl -s -X POST "$AUTH_BASE/auth/skill-credit/runs/finalize" -H "Authorization: Bearer <ACCESS_TOKEN>" -H "Content-Type: application/json" -d ...
FINALIZE_JSON="$(curl -s -X POST "$AUTH_BASE/auth/skill-credit/runs/finalize" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d "$FINAL_PAYLOAD")"
echo "Finalize response: $FINALIZE_JSON"
print_cmd curl -s -X GET "$AUTH_BASE/auth/skill-credit/balance" -H "Authorization: Bearer <ACCESS_TOKEN>"
BALANCE_JSON="$(curl -s -X GET "$AUTH_BASE/auth/skill-credit/balance" \
-H "Authorization: Bearer $ACCESS_TOKEN")"
echo "Balance response: $BALANCE_JSON"
echo "UAT completed."