← back to Marketing Command Center

scripts/meta-go-live.sh

76 lines

#!/usr/bin/env bash
# meta-go-live.sh — flip the Social module's live backend to the FREE Meta Graph
# API (Instagram + Facebook). Validates the token against Graph BEFORE writing
# anything, then deploys the creds to the Kamatera live env and confirms the
# /connection endpoint reports backend:meta.
#
# Usage:
#   1) Create a creds file (gitignored): scripts/meta-creds.env  with:
#        META_ACCESS_TOKEN=EAA...
#        META_IG_USER_ID=17841400000000000
#        META_FB_PAGE_ID=999999999
#        # optional: META_GRAPH_VERSION=v21.0
#   2) bash scripts/meta-go-live.sh scripts/meta-creds.env
#
# It NEVER prints the token. It does NOT auto-enable the scheduler — posting
# still requires confirm:true + an approved post. Run with SCHEDULER_LIVE=1 to
# also set SOCIAL_SCHEDULER_LIVE=true on the live box.
set -euo pipefail

CREDS="${1:-scripts/meta-creds.env}"
REMOTE_HOST="my-server"
REMOTE_DIR="/root/DW-Agents/marketing-command-center"
PM2_NAME="marketing-command-center"
LIVE_URL="https://marketing.agentabrams.com"
AUTH='admin:DWMarketing2026!'
GVER_DEFAULT="v21.0"

[ -f "$CREDS" ] || { echo "✗ creds file not found: $CREDS"; exit 1; }
# shellcheck disable=SC1090
set -a; . "$CREDS"; set +a
: "${META_ACCESS_TOKEN:?META_ACCESS_TOKEN missing in $CREDS}"
GVER="${META_GRAPH_VERSION:-$GVER_DEFAULT}"
last4() { printf '…%s' "${1: -4}"; }

echo "── 1. validate token against Graph API (no write yet) ──"
if [ -n "${META_IG_USER_ID:-}" ]; then
  R=$(curl -s "https://graph.facebook.com/${GVER}/${META_IG_USER_ID}?fields=username&access_token=${META_ACCESS_TOKEN}")
  echo "$R" | grep -q '"username"' \
    && echo "  ✓ IG reachable: $(echo "$R" | sed -n 's/.*"username":"\([^"]*\)".*/\1/p')  (id $(last4 "$META_IG_USER_ID"))" \
    || { echo "  ✗ IG check failed: $R"; exit 2; }
fi
if [ -n "${META_FB_PAGE_ID:-}" ]; then
  R=$(curl -s "https://graph.facebook.com/${GVER}/${META_FB_PAGE_ID}?fields=name&access_token=${META_ACCESS_TOKEN}")
  echo "$R" | grep -q '"name"' \
    && echo "  ✓ FB Page reachable: $(echo "$R" | sed -n 's/.*"name":"\([^"]*\)".*/\1/p')  (id $(last4 "$META_FB_PAGE_ID"))" \
    || { echo "  ✗ FB Page check failed: $R"; exit 2; }
fi
echo "  token $(last4 "$META_ACCESS_TOKEN") validated"

echo "── 2. write creds into the live Kamatera .env (idempotent) ──"
TMP=$(mktemp)
{
  echo "META_ACCESS_TOKEN=${META_ACCESS_TOKEN}"
  [ -n "${META_IG_USER_ID:-}" ] && echo "META_IG_USER_ID=${META_IG_USER_ID}"
  [ -n "${META_FB_PAGE_ID:-}" ] && echo "META_FB_PAGE_ID=${META_FB_PAGE_ID}"
  [ "$GVER" != "$GVER_DEFAULT" ] && echo "META_GRAPH_VERSION=${GVER}"
  [ "${SCHEDULER_LIVE:-0}" = "1" ] && echo "SOCIAL_SCHEDULER_LIVE=true"
} > "$TMP"
# strip any prior META_*/scheduler lines on the remote, then append fresh ones
ssh "$REMOTE_HOST" "cd $REMOTE_DIR && touch .env && \
  sed -i '/^META_ACCESS_TOKEN=/d;/^META_IG_USER_ID=/d;/^META_FB_PAGE_ID=/d;/^META_GRAPH_VERSION=/d;/^SOCIAL_SCHEDULER_LIVE=/d' .env"
scp -q "$TMP" "$REMOTE_HOST:$REMOTE_DIR/.env.meta-append"
ssh "$REMOTE_HOST" "cd $REMOTE_DIR && cat .env.meta-append >> .env && rm -f .env.meta-append && chmod 600 .env"
rm -f "$TMP"
echo "  ✓ creds appended to $REMOTE_DIR/.env"

echo "── 3. restart pm2 with new env ──"
ssh "$REMOTE_HOST" "pm2 restart $PM2_NAME --update-env >/dev/null 2>&1 && echo '  ✓ restarted'"
sleep 3

echo "── 4. confirm /connection reports backend:meta ──"
curl -s -u "$AUTH" "$LIVE_URL/api/social/connection"
echo
echo "Done. Posting still requires confirm:true + an approved post."
echo "Scheduler auto-post is $([ "${SCHEDULER_LIVE:-0}" = "1" ] && echo ON || echo "OFF (set SCHEDULER_LIVE=1 to enable)")."