#!/usr/bin/env zsh set -euo pipefail ROOT_DIR=$(cd "$(dirname "$0")/.." && pwd) cd "$ROOT_DIR" # Ensure backend is running (start in background if not) HEALTH_URL="http://127.0.0.1:4000/health" START_BACKEND="$ROOT_DIR/scripts/start-backend.sh background" function wait_for_health() { local tries=0 while [ $tries -lt 20 ]; do if curl -sS -m 3 "$HEALTH_URL" >/dev/null 2>&1; then echo "[ok] backend health ok" return 0 fi tries=$((tries+1)) echo "waiting for backend health... attempt $tries" sleep 1 done return 1 } # Start backend if not healthy if ! curl -sS -m 2 "$HEALTH_URL" >/dev/null 2>&1; then echo "backend not healthy, starting..." chmod +x "$ROOT_DIR/scripts/start-backend.sh" "$ROOT_DIR/scripts/start-backend.sh" background || true sleep 2 fi if ! wait_for_health; then echo "ERROR: backend did not become healthy" echo "-- last backend logs --" tail -n 200 "$ROOT_DIR/packages/backend-api/logs"/backend-*.log 2>/dev/null || true exit 2 fi # Create a session ROOM="e2e-room-$(date +%s)" USERNAME="e2e-user" echo "Creating session for room=$ROOM user=$USERNAME" CREATE_RESP=$(curl -sS -X POST "$HEALTH_URL"/../api/session -H "Content-Type: application/json" -d "{\"room\":\"$ROOM\",\"username\":\"$USERNAME\"}" ) || { echo "create session failed"; exit 3; } echo "Create response: $CREATE_RESP" # Parse id from response (fallback simple parse) ID=$(echo "$CREATE_RESP" | sed -n 's/.*"id"[[:space:]]*:[[:space:]]*"\([^"]\+\)".*/\1/p') if [ -z "$ID" ]; then echo "Could not parse id from response. Full response:"; echo "$CREATE_RESP"; exit 4 fi echo "Session id: $ID" # Get token TOKEN_RESP=$(curl -sS "http://127.0.0.1:4000/api/session/$ID/token" ) || { echo "get token failed"; exit 5; } echo "Token response: $TOKEN_RESP" # Optionally run puppeteer E2E if chrome remote is available if curl -sS http://127.0.0.1:9222/json/version >/dev/null 2>&1; then echo "Chrome remote debug available, running browser E2E script..." PUPPETEER_BROWSER_URL=http://127.0.0.1:9222 BROADCAST_URL=http://localhost:5175 node packages/broadcast-panel/scripts/browser_e2e_local.cjs || true echo "Browser E2E log:" cat packages/broadcast-panel/tmp/browser_e2e_local.log 2>/dev/null || true else echo "Chrome remote debug not available; skipping browser E2E." fi echo "E2E finished"