galoy-cli 0.1.7

A CLI Client for interacting with Galoy Backend
Documentation
REPO_ROOT=$(git rev-parse --show-toplevel)
source "${REPO_ROOT}/tests/e2e/register-email.bash"

USER_A_PHONE="+16505554321"
USER_A_CODE="000000"
USER_A_USERNAME="alice"
USER_A_EMAIL="test@galoy.com"

USER_B_PHONE="+16505554322"
USER_B_CODE="000000"
USER_B_USERNAME="bob"

USER_C_PHONE="+16505554323"
USER_C_CODE="000000"
USER_C_USERNAME="charlie"

galoy_cli_cmd() {
  galoy_cli_location=${REPO_ROOT}/target/debug/galoy-cli
  if [[ ! -z ${CARGO_TARGET_DIR} ]] ; then
    galoy_cli_location=${CARGO_TARGET_DIR}/debug/galoy-cli
  fi

  ${galoy_cli_location} $@
}

tests_dir() {
  echo ${REPO_ROOT}/tests/e2e
}

bitcoin_cli_cmd() {
  docker compose exec bitcoind bitcoin-cli -regtest $@
}

galoy_cli_setup() {
  rm ~/.galoy-cli/GALOY_TOKEN || true
  local retries=0
  while [[ $retries -lt 30 ]]; do
    if galoy_cli_cmd globals; then break; fi
    sleep 1
    retries=$((retries+1))
  done
}

bitcoind_setup() {
  bitcoin_cli_cmd createwallet "galoycli" || true
  bitcoin_cli_cmd -generate 101
  sleep 10
}

login_user() {
  local user=$1

  if [[ "$user" == "A" ]]; then
    galoy_cli_cmd login --phone ${USER_A_PHONE} --code ${USER_A_CODE}
  elif [[ "$user" == "B" ]]; then
    galoy_cli_cmd login --phone ${USER_B_PHONE} --code ${USER_B_CODE}
  elif [[ "$user" == "C" ]]; then
    galoy_cli_cmd login --phone ${USER_C_PHONE} --code ${USER_C_CODE}
  else
    echo "Invalid user: $user"
    exit 1
  fi
}

login_user_with_email() {
  local user=$1
  if [[ "$user" == "A" ]]; then

    register_email $USER_A_PHONE $USER_A_EMAIL
    galoy_cli_cmd request-code --email ${USER_A_EMAIL} 

    local email_code=$(get_email_code "$USER_A_EMAIL")
    galoy_cli_cmd login --email --code ${email_code} 

  else
    echo "Invalid user: $user"
    exit 1
  fi
}

logout_user() {
  galoy_cli_cmd logout
}

get_balance() {
  local wallet_type=$1
  local response
  if [[ -z "$wallet_type" ]]; then
    response=$(galoy_cli_cmd balance)
    echo $response | jq -r 'map(select(.default == true)) | .[0] | .balance'
  else
    response=$(galoy_cli_cmd balance --$wallet_type)
    echo $response | jq -r '.[0] | .balance'
  fi
}

get_default_wallet_id() {
  echo $(galoy_cli_cmd me | jq -r '.defaultAccount.defaultWalletId')
}

fund_user() {
  local user=$1
  local wallet_type=$2
  local btc_amount=$3

  login_user $user
  
  start_balance=$(get_balance $wallet_type)
  
  galoy_cli_cmd receive --wallet $wallet_type --via onchain
  btc_address=$(galoy_cli_cmd receive --wallet $wallet_type --via onchain | jq -r '.address')

  bitcoin_cli_cmd sendtoaddress "$btc_address" $btc_amount
  bitcoin_cli_cmd -generate 10

  local retries=0
  while [[ $retries -lt 30 ]]; do
    final_balance=$(get_balance $wallet_type)
    if [ $final_balance -gt $start_balance ]; then break; fi
    sleep 5
    retries=$((retries+1))
  done

  logout_user
  [[ "$retries" != "30" ]] || exit 1
}

redis_cli() {
  docker exec "${COMPOSE_PROJECT_NAME}-redis-1" redis-cli $@
}