128 lines
4.1 KiB
Bash
Executable File
128 lines
4.1 KiB
Bash
Executable File
#!/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."
|