#!/bin/sh # POSIX-safe (dash/sh compatible) set -eu OUT="/var/www/EFT_COMPANION/public_html/ammo-data.json" API="https://api.tarkov.dev/graphql" # --- Preferred: ammo-only (note lowercase enum value 'ammo') --- GQL_AMMO_ONLY='{ items(lang: en, types: [ammo]) { id name shortName iconLink wikiLink updated properties { __typename ... on ItemPropertiesAmmo { caliber tracer tracerColor damage armorDamage fragmentationChance penetrationPower accuracyModifier recoilModifier initialSpeed lightBleedModifier heavyBleedModifier projectileCount } } } }' # --- Fallback: all items then filter to ItemPropertiesAmmo --- GQL_ALL_MIN='{ items(lang: en) { id name shortName iconLink wikiLink updated properties { __typename ... on ItemPropertiesAmmo { caliber tracer tracerColor damage armorDamage fragmentationChance penetrationPower accuracyModifier recoilModifier initialSpeed lightBleedModifier heavyBleedModifier projectileCount } } } }' # Build JSON payloads safely via jq (read from stdin, -R = raw, -s = slurp) PAYLOAD_AMMO_ONLY=$(printf '%s' "$GQL_AMMO_ONLY" | jq -Rs '{query: .}') PAYLOAD_ALL_MIN=$(printf '%s' "$GQL_ALL_MIN" | jq -Rs '{query: .}') fetch_graphql () { payload="$1" curl -sS -X POST "$API" \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ --data-binary "$payload" } # Try ammo-only first JSON=$(fetch_graphql "$PAYLOAD_AMMO_ONLY") # If .data is missing, fall back to broad query if ! printf '%s' "$JSON" | jq -e '.data' >/dev/null 2>&1 ; then echo "Ammo-only query failed, falling back to broad items query…" >&2 JSON=$(fetch_graphql "$PAYLOAD_ALL_MIN") if ! printf '%s' "$JSON" | jq -e '.data' >/dev/null 2>&1 ; then echo "GraphQL error on fallback:" >&2 printf '%s\n' "$JSON" | jq . >&2 || printf '%s\n' "$JSON" >&2 exit 1 fi fi # Normalize to a compact JSON your site can consume TMP="$OUT.tmp" printf '%s' "$JSON" | jq -c ' { fetchedAt: (now | todate), source: "api.tarkov.dev/graphql", items: ( .data.items | map(select(.properties != null and .properties.__typename == "ItemPropertiesAmmo")) ) } ' > "$TMP" mv "$TMP" "$OUT" COUNT=$(jq '.items | length' "$OUT") echo "Wrote $COUNT ammo rows to $OUT at $(date -Is)"