#!/usr/bin/env bash http_get() { local url="$1" curl -fsSL -H "User-Agent: AstraDeploy/${DEPLOY_VERSION}" "$url" } get_papermc_download_url() { local project="$1" local version="$2" if [[ "$version" == "latest" ]]; then version="$(http_get "https://fill.papermc.io/v3/projects/${project}" | jq -r '.versions | if type=="array" then .[-1] else (to_entries | last | .value[0]) end')" fi local builds_json builds_json="$(http_get "https://fill.papermc.io/v3/projects/${project}/versions/${version}/builds")" local url url="$(printf '%s\n' "$builds_json" | jq -r '.builds | map(select(.channel=="STABLE")) | .[0].downloads."server:default".url // empty')" if [[ -z "$url" || "$url" == "null" ]]; then fail "$(t no_stable_build "$project" "$version")" fi echo "$url" } get_purpur_download_url() { local version="$1" local build="${2:-latest}" if [[ "$version" == "latest" ]]; then version="$(http_get "https://api.purpurmc.org/v2/purpur/" | jq -r '.versions | .[-1]')" fi if [[ "$build" == "latest" ]]; then echo "https://api.purpurmc.org/v2/purpur/${version}/latest/download" else echo "https://api.purpurmc.org/v2/purpur/${version}/${build}/download" fi } get_github_release_asset_url() { local repo="$1" local pattern="$2" http_get "https://api.github.com/repos/${repo}/releases/latest" \ | jq -r --arg pattern "$pattern" '.assets[] | select(.name | test($pattern)) | .browser_download_url' | head -n 1 } download_as_user() { local url="$1" local target="$2" emit_step "download_start" "$url" run_cmd sudo -u "$SERVER_USER" bash -lc "curl -fL \"$url\" -o \"${target}\"" emit_step "download_completed" "$target" } download_as_user_atomic() { local url="$1" local target="$2" local tmp="${target}.tmp.${RANDOM}.$(date +%s)" download_as_user "$url" "$tmp" run_cmd mv "$tmp" "$target" emit_step "download_swap" "$target" }