refactor: improve DID generation and error handling
- Convert did_generator.sh to output clean JSON - Add structured error reporting with stages - Improve debug logging with DEBUG flag - Better error handling in run-deeplink-tests.sh - Add detailed debug tracing - Fix JSON parsing and validation - Add visual feedback for generated DIDs - Use printf instead of echo for consistent output - Remove stderr mixing with stdout - Add proper exit status handling This refactors the DID generation process to be more reliable and maintainable by using structured JSON output and proper error handling throughout the pipeline.
This commit is contained in:
@@ -41,27 +41,81 @@ else
|
||||
# Function to extract DID info from did_generator.sh output
|
||||
extract_did_info() {
|
||||
local output="$1"
|
||||
local did=$(echo "$output" | grep "^DID: " | cut -d' ' -f2-)
|
||||
local private_key=$(echo "$output" | grep "^Private Key: " | cut -d' ' -f3-)
|
||||
printf '%s\n' "{\"did\":\"$did\",\"privateKey\":\"$private_key\"}"
|
||||
|
||||
# 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..."
|
||||
CONTACT1_INFO=$(./test-scripts/did_generator.sh 2>&1 | tee /dev/stderr | extract_did_info)
|
||||
CONTACT1_DID=$(echo "$CONTACT1_INFO" | jq -r .did)
|
||||
CONTACT1_KEY=$(echo "$CONTACT1_INFO" | jq -r .privateKey)
|
||||
echo "Extracted DID: $CONTACT1_DID"
|
||||
echo "Extracted Key: $CONTACT1_KEY"
|
||||
# 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)..."
|
||||
CONTACT2_INFO=$(./test-scripts/did_generator.sh 2>&1 | tee /dev/stderr | extract_did_info)
|
||||
CONTACT2_DID=$(echo "$CONTACT2_INFO" | jq -r .did)
|
||||
CONTACT2_KEY=$(echo "$CONTACT2_INFO" | jq -r .privateKey)
|
||||
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..."
|
||||
ISSUER_INFO=$(./test-scripts/did_generator.sh 2>&1 | tee /dev/stderr | extract_did_info)
|
||||
ISSUER_DID=$(echo "$ISSUER_INFO" | jq -r .did)
|
||||
ISSUER_KEY=$(echo "$ISSUER_INFO" | jq -r .privateKey)
|
||||
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..."
|
||||
|
||||
Reference in New Issue
Block a user