#!/bin/bash # Parse command line arguments GENERATE_ONLY=false ALL_TESTS=false while getopts "ga" opt; do case $opt in g) GENERATE_ONLY=true ;; a) ALL_TESTS=true ;; \?) echo "Invalid option: -$OPTARG" >&2; exit 1 ;; esac done # Directory for storing generated DIDs mkdir -p .generated # Function to validate environment variables validate_env() { local missing=false for var in CONTACT1_DID CONTACT1_KEY CONTACT2_DID CONTACT2_KEY ISSUER_DID ISSUER_KEY; do if [ -z "${!var}" ]; then echo "Error: $var is not set" >&2 missing=true fi done if [ "$missing" = true ]; then rm -f .generated/test-env.sh # Remove invalid env file echo "Please regenerate DIDs by running:" >&2 echo "./test-scripts/run-deeplink-tests.sh -g" >&2 return 1 fi return 0 } # Check if we already have generated DIDs if [ -f .generated/test-env.sh ] && [ "$GENERATE_ONLY" = false ]; then echo "Using existing DIDs from .generated/test-env.sh" source .generated/test-env.sh validate_env || exit 1 else # Function to extract DID info from did_generator.sh output extract_did_info() { local output="$1" # Debug: Show what we received echo "DEBUG: extract_did_info received: '$output'" >&2 # Parse and validate JSON if ! printf '%s' "$output" | jq -e 'if type == "object" and .status == "success" then true else false end' >/dev/null 2>&1; then echo "Error: DID generation failed" >&2 echo "Error details:" >&2 if ! printf '%s' "$output" | jq -e . >/dev/null 2>&1; then echo "Invalid JSON output: $output" >&2 else printf '%s' "$output" | jq -r '"\(.stage): \(.error // "Unknown error")"' >&2 fi return 1 fi # Return the successful JSON printf '%s' "$output" } echo "Generating first contact DID..." # Debug: Show raw command output DEBUG_OUTPUT=$(DEBUG=0 ./test-scripts/did_generator.sh) GEN_STATUS=$? echo "DEBUG: Raw did_generator.sh output: '$DEBUG_OUTPUT'" >&2 if [ $GEN_STATUS -ne 0 ]; then echo "Error: did_generator.sh failed with status $GEN_STATUS" >&2 exit 1 fi CONTACT1_OUTPUT=$(printf '%s' "$DEBUG_OUTPUT" | tr -d '\r') echo "DEBUG: After tr command: '$CONTACT1_OUTPUT'" >&2 # Debug: Show what we're passing to extract_did_info echo "DEBUG: Calling extract_did_info with: '$CONTACT1_OUTPUT'" >&2 CONTACT1_INFO=$(extract_did_info "$CONTACT1_OUTPUT") EXTRACT_STATUS=$? echo "DEBUG: extract_did_info returned status: $EXTRACT_STATUS" >&2 echo "DEBUG: CONTACT1_INFO: '$CONTACT1_INFO'" >&2 if [ $EXTRACT_STATUS -ne 0 ]; then echo "DEBUG: extract_did_info failed" >&2 exit 1 fi CONTACT1_DID=$(printf '%s' "$CONTACT1_INFO" | jq -r .did) CONTACT1_KEY=$(printf '%s' "$CONTACT1_INFO" | jq -r .privateKey) echo "Generating second contact DID (Jordan)..." DEBUG_OUTPUT=$(DEBUG=0 ./test-scripts/did_generator.sh) CONTACT2_OUTPUT=$(printf '%s' "$DEBUG_OUTPUT" | tr -d '\r') CONTACT2_INFO=$(extract_did_info "$CONTACT2_OUTPUT") if [ $? -ne 0 ]; then exit 1 fi CONTACT2_DID=$(printf '%s' "$CONTACT2_INFO" | jq -r .did) CONTACT2_KEY=$(printf '%s' "$CONTACT2_INFO" | jq -r .privateKey) echo "Generating issuer DID..." DEBUG_OUTPUT=$(DEBUG=0 ./test-scripts/did_generator.sh) ISSUER_OUTPUT=$(printf '%s' "$DEBUG_OUTPUT" | tr -d '\r') ISSUER_INFO=$(extract_did_info "$ISSUER_OUTPUT") if [ $? -ne 0 ]; then exit 1 fi ISSUER_DID=$(printf '%s' "$ISSUER_INFO" | jq -r .did) ISSUER_KEY=$(printf '%s' "$ISSUER_INFO" | jq -r .privateKey) # Add some visual feedback about the generated DIDs echo echo "Generated DIDs:" echo " Contact 1: ${CONTACT1_DID:0:20}..." echo " Contact 2: ${CONTACT2_DID:0:20}..." echo " Issuer: ${ISSUER_DID:0:20}..." echo # Create a temporary env file with the generated DIDs echo "Creating test-env.sh with generated DIDs..." cat > .generated/test-env.sh << EOF #!/bin/bash # Generated $(date) export CONTACT1_DID="$CONTACT1_DID" export CONTACT1_KEY="$CONTACT1_KEY" export CONTACT2_DID="$CONTACT2_DID" export CONTACT2_KEY="$CONTACT2_KEY" export ISSUER_DID="$ISSUER_DID" export ISSUER_KEY="$ISSUER_KEY" EOF # Debug output echo "Contents of generated test-env.sh:" cat .generated/test-env.sh # Make sure file is executable chmod +x .generated/test-env.sh # Source and validate the newly created env file echo "Sourcing generated test-env.sh..." source .generated/test-env.sh validate_env || exit 1 fi if [ "$GENERATE_ONLY" = true ]; then echo "Generated DIDs and created environment file at .generated/test-env.sh" echo "To use these DIDs, run:" echo "source .generated/test-env.sh" exit 0 fi # Create contacts JSON for deep links CONTACTS_JSON=$(jq -n \ --arg did1 "$CONTACT1_DID" \ --arg did2 "$CONTACT2_DID" \ '[ {"did": $did1}, { "did": $did2, "name": "Jordan", "nextPubKeyHashB64": "IBfRZfwdzeKOzqCx8b+WlLpMJHOAT9ZknIDJo7F3rZE=", "publicKeyBase64": "A1eIndfaxgMpVwyD5dYe74DgjuIo5SwPZFCcLdOemjf" } ]') export CONTACTS_JSON export TEST_MODE=${TEST_MODE:-print} # Use TEST_MODE from environment or default to print # Run deep link tests in order if [ "$ALL_TESTS" = true ]; then ./test-scripts/test-deeplinks.sh -t 5 -a else ./test-scripts/test-deeplinks.sh -t 5 fi