Short post just to get the internets to index that I posted a repo with a small Bash script I’ve been using to resolve Bluesky/ATproto handles (like hrbrmstr.dev
) to did:plc
identifiers. Not sure why I did do this ages ago tbh.
Code is here but it’s small enough to include inline as well:
#!/usr/bin/env bash
set -euo pipefail
# Function to resolve Bluesky handle to DID:PLC
resolve_bluesky_handle() {
local handle="${1:-}"
# Remove leading '@' if present
handle=$(echo "${handle}" | sed -e 's/^@//')
# Check if curl is installed
if ! command -v curl &>/dev/null; then
echo "Error: curl is not installed."
return 1
fi
# Check if jq is installed
if ! command -v jq &>/dev/null; then
echo "Error: jq is not installed."
return 1
fi
api_url="https://bsky.social/xrpc/com.atproto.identity.resolveHandle"
response=$(curl --silent --header "Accept: application/json" "${api_url}?handle=${handle}")
# Check if the curl command was successful
if [[ $? -ne 0 ]]; then
echo "Error: Failed to fetch data from Bluesky API."
return 1
fi
# Extract the DID from the response
did=$(echo "${response}" | jq -r '.did')
# Check if jq command was successful
if [[ $? -ne 0 ]]; then
echo "Error: Failed to parse JSON response."
return 1
fi
# Check if DID is empty
if [[ -z "${did}" ]]; then
echo "Error: DID not found in the response."
return 1
fi
echo "${did}"
}
# Check if exactly one argument is provided
if [[ $# -ne 1 ]]; then
echo "Usage: $0 <handle>"
exit 1
fi
resolve_bluesky_handle "${1}"