super-productivity/scripts/wait-for-supersync.sh
Johannes Millan 301a8abdd7 fix(sync): improve Dropbox PKCE error handling and messaging
Dropbox Sync Improvements:
- Change PKCE alerts to thrown errors for better error handling
- Add provider ID to sync auth error logs for debugging
- Improve PKCE error message to guide users to HTTPS requirement
- Add unit tests for PKCE code generation

Testing Improvements:
- Enhance wait-for-supersync.sh to check both health and test endpoints
- Match E2E fixture behavior for more reliable test startup detection

These changes improve error diagnostics and provide clearer guidance
when WebCrypto APIs are unavailable (HTTP contexts).
2026-01-23 14:31:24 +01:00

65 lines
2.3 KiB
Bash
Executable file

#!/bin/bash
# Wait for SuperSync server to be ready at http://localhost:1901
# Checks both health endpoint AND test mode endpoint to match fixture behavior
echo "Waiting for SuperSync server on http://localhost:1901..."
echo "Checking both /health and /api/test/create-user endpoints..."
MAX_WAIT=90
elapsed=0
# Function to check if server is fully healthy (matches fixture logic)
check_server() {
# Check 1: Basic health endpoint
if ! curl -sf http://localhost:1901/health > /dev/null 2>&1; then
return 1
fi
# Check 2: Test mode endpoint (verify TEST_MODE is enabled)
# Create a dummy user to verify test endpoints are available
local test_email="health-check-$(date +%s)@test.local"
local response_code=$(curl -s -o /dev/null -w "%{http_code}" \
-X POST http://localhost:1901/api/test/create-user \
-H "Content-Type: application/json" \
-d "{\"email\":\"$test_email\",\"password\":\"HealthCheck123!\"}" \
2>/dev/null)
# Accept 201 (created), 409 (already exists), or 400 (validation error)
# Reject 404 (test mode disabled) or connection errors
if [ "$response_code" = "404" ] || [ -z "$response_code" ]; then
echo "WARNING: Health endpoint OK but test mode endpoint returned: $response_code"
return 1
fi
return 0
}
until check_server; do
if [ $elapsed -ge $MAX_WAIT ]; then
echo ""
echo "ERROR: SuperSync server did not start within ${MAX_WAIT}s"
echo ""
echo "=== Diagnostics ==="
echo "1. Container status:"
docker ps -a | grep -E "(supersync|db|NAMES)"
echo ""
echo "2. Port mappings:"
docker ps | grep supersync | awk '{print $NF " " $(NF-1)}'
echo ""
echo "3. Database health:"
docker compose -f docker-compose.e2e.yaml -f docker-compose.yaml -f docker-compose.supersync.yaml exec -T db pg_isready -U supersync 2>&1 || echo "Database not ready"
echo ""
echo "4. SuperSync logs (last 50 lines):"
docker compose -f docker-compose.e2e.yaml -f docker-compose.yaml -f docker-compose.supersync.yaml logs --tail=50 supersync
echo ""
exit 1
fi
sleep 1
elapsed=$((elapsed + 1))
# Show progress every 10 seconds
if [ $((elapsed % 10)) -eq 0 ]; then
echo "Still waiting... (${elapsed}s / ${MAX_WAIT}s)"
fi
done
echo "SuperSync server is ready! (Both health and test endpoints responding)"