#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" SKILL_ROOT="$(dirname "$SCRIPT_DIR")" source "$SCRIPT_DIR/_common.sh" : "${CF_API_TOKEN:=}" : "${ZONE_NAME:=}" : "${HOSTNAME:=}" : "${CONFIG_DIR:=$SKILL_ROOT/outputs/config}" api() { local method="$1"; shift local url="$1"; shift curl -sS -X "$method" "$url" \ -H "Authorization: Bearer $CF_API_TOKEN" \ -H "Content-Type: application/json" \ "$@" } main() { confirm_gate [[ -n "$CF_API_TOKEN" ]] || die "CF_API_TOKEN is required." [[ -n "$ZONE_NAME" ]] || die "ZONE_NAME is required." [[ -n "$HOSTNAME" ]] || die "HOSTNAME is required." [[ -f "$CONFIG_DIR/tunnel.json" ]] || die "Missing tunnel snapshot: $CONFIG_DIR/tunnel.json" local tunnel_id; tunnel_id="$(jq -r '.id' "$CONFIG_DIR/tunnel.json")" [[ -n "$tunnel_id" && "$tunnel_id" != "null" ]] || die "Invalid tunnel id in tunnel.json" log_info "Resolving zone id for: $ZONE_NAME" local z; z="$(api GET "https://api.cloudflare.com/client/v4/zones?name=$ZONE_NAME" | jq -r '.result[0].id' )" [[ -n "$z" && "$z" != "null" ]] || die "Unable to resolve zone id for $ZONE_NAME" local cname_target="${tunnel_id}.cfargotunnel.com" log_info "Ensuring CNAME: $HOSTNAME -> $cname_target" # Find existing record local rec; rec="$(api GET "https://api.cloudflare.com/client/v4/zones/$z/dns_records?type=CNAME&name=$HOSTNAME")" local rec_id; rec_id="$(echo "$rec" | jq -r '.result[0].id' )" if [[ -n "$rec_id" && "$rec_id" != "null" ]]; then log_info "Updating existing DNS record id: $rec_id" api PUT "https://api.cloudflare.com/client/v4/zones/$z/dns_records/$rec_id" \ --data "{\"type\":\"CNAME\",\"name\":\"$HOSTNAME\",\"content\":\"$cname_target\",\"ttl\":1,\"proxied\":true}" \ | jq -e '.success==true' >/dev/null || die "Failed to update DNS record." else log_info "Creating new DNS record" api POST "https://api.cloudflare.com/client/v4/zones/$z/dns_records" \ --data "{\"type\":\"CNAME\",\"name\":\"$HOSTNAME\",\"content\":\"$cname_target\",\"ttl\":1,\"proxied\":true}" \ | jq -e '.success==true' >/dev/null || die "Failed to create DNS record." fi # Save snapshot cat > "$CONFIG_DIR/dns_route.json" <