#!/usr/bin/env bash # Pull trader reset times (PvP & PvE) from Tarkov.dev and save as local JSON. # Writes: /var/www/EFT_COMPANION/public_html/traders_pvp.json, /var/www/EFT_COMPANION/public_html/traders_pve.json # Logs: /var/log/eft_traders_pull.log set -euo pipefail umask 022 OUTDIR="/var/www/EFT_COMPANION/public_html/" URL="https://api.tarkov.dev/graphql" LOG="/var/log/eft_traders_pull.log" # Ensure log file exists and is writable (no sudo; assume root or correct perms) mkdir -p /var/log touch "$LOG" log() { echo "[$(date -Is)] $*" | tee -a "$LOG"; } # Compact, single-line GraphQL bodies (avoids quoting/heredoc pitfalls) Q_PVP='{"query":"{ traders(gameMode: regular) { id name resetTime imageLink } }"}' Q_PVE='{"query":"{ traders(gameMode: pve) { id name resetTime imageLink } }"}' mkdir -p "$OUTDIR" tmp_pvp="$(mktemp)" tmp_pve="$(mktemp)" raw_pvp="$(mktemp)" raw_pve="$(mktemp)" cleanup() { rm -f "$tmp_pvp" "$tmp_pve" "$raw_pvp" "$raw_pve" } trap cleanup EXIT log "Starting trader pulls…" # ---- PvP ---- if curl -fSs -X POST "$URL" \ -H "Content-Type: application/json" \ --data "$Q_PVP" -o "$raw_pvp" then if jq -e '.errors' "$raw_pvp" >/dev/null 2>&1; then log "ERROR: PvP GraphQL returned errors:" jq '.errors' "$raw_pvp" | tee -a "$LOG" exit 1 fi jq '.data.traders' "$raw_pvp" > "$tmp_pvp" else rc=$? log "ERROR: curl PvP request failed (exit $rc). Raw (if any):" cat "$raw_pvp" | tee -a "$LOG" || true exit 1 fi # ---- PvE ---- if curl -fSs -X POST "$URL" \ -H "Content-Type: application/json" \ --data "$Q_PVE" -o "$raw_pve" then if jq -e '.errors' "$raw_pve" >/dev/null 2>&1; then log "ERROR: PvE GraphQL returned errors:" jq '.errors' "$raw_pve" | tee -a "$LOG" exit 1 fi jq '.data.traders' "$raw_pve" > "$tmp_pve" else rc=$? log "ERROR: curl PvE request failed (exit $rc). Raw (if any):" cat "$raw_pve" | tee -a "$LOG" || true exit 1 fi # Atomic move into place mv "$tmp_pvp" "$OUTDIR/traders_pvp.json" mv "$tmp_pve" "$OUTDIR/traders_pve.json" chmod 644 "$OUTDIR/traders_pvp.json" "$OUTDIR/traders_pve.json" log "Success: wrote $OUTDIR/traders_pvp.json and $OUTDIR/traders_pve.json"