#!/usr/bin/env bash # Instalador del CLI de heysteff (@heysteff/cli). # # curl -fsSL https://developers.heysteff.com/install.sh | bash # # Revisa que tengas Node 20 o más nuevo y npm, instala el CLI con # `npm install -g @heysteff/cli` y te dice el siguiente paso: `heysteff setup`. # No usa sudo: si npm no puede escribir en su carpeta global, te explica qué hacer. # Variables opcionales: HEYSTEFF_CLI_VERSION (por defecto "latest"). # # Todo va dentro de main() para que un corte de la descarga a mitad de camino # no ejecute un script incompleto. set -euo pipefail main() { local package="@heysteff/cli" local version="${HEYSTEFF_CLI_VERSION:-latest}" local min_node=20 say() { printf '%s\n' "$*"; } fail() { printf 'Error: %s\n' "$*" >&2; } node_help() { say "" say "Instala Node ${min_node} o más nuevo (trae npm) y vuelve a correr este instalador:" say "" say " Con nvm (macOS y Linux):" say " curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash" say " nvm install ${min_node}" say "" say " Con Homebrew (macOS):" say " brew install node@${min_node}" say "" say " Con winget (Windows):" say " winget install OpenJS.NodeJS.LTS" say "" say " O descárgalo de https://nodejs.org" } say "Instalador del CLI de heysteff" say "" if ! command -v node >/dev/null 2>&1; then fail "No encontramos Node.js. El CLI necesita Node ${min_node} o más nuevo." node_help exit 1 fi local node_version node_major node_version="$(node --version 2>/dev/null || true)" node_major="${node_version#v}" node_major="${node_major%%.*}" if ! [[ "$node_major" =~ ^[0-9]+$ ]] || [ "$node_major" -lt "$min_node" ]; then fail "Tienes Node ${node_version:-desconocido}; el CLI necesita Node ${min_node} o más nuevo." node_help exit 1 fi if ! command -v npm >/dev/null 2>&1; then fail "Tienes Node ${node_version}, pero no encontramos npm." node_help exit 1 fi say "Node ${node_version} y npm $(npm --version 2>/dev/null || echo '?') encontrados." say "Instalando ${package}@${version}..." say "" if ! npm install -g "${package}@${version}"; then fail "npm no pudo instalar ${package}." say "" say "Si el error dice EACCES (sin permiso en la carpeta global de npm), tienes dos opciones:" say " 1. Usar nvm, que instala Node en tu carpeta de usuario (recomendado)." say " 2. Cambiar la carpeta global de npm:" say " mkdir -p \"\$HOME/.npm-global\"" say " npm config set prefix \"\$HOME/.npm-global\"" say " export PATH=\"\$HOME/.npm-global/bin:\$PATH\"" say " y volver a correr este instalador." say "" say "También puedes usarlo sin instalar: npx ${package} setup" exit 1 fi say "" if command -v heysteff >/dev/null 2>&1; then say "Listo: heysteff $(heysteff --version 2>/dev/null || true) quedó instalado." else local prefix prefix="$(npm config get prefix 2>/dev/null || true)" say "Listo: el CLI quedó instalado, pero el comando heysteff no está en tu PATH." if [ -n "$prefix" ]; then say "Agrega esto a tu ~/.bashrc o ~/.zshrc y abre otra terminal:" say " export PATH=\"${prefix}/bin:\$PATH\"" fi fi say "" say "Siguiente paso: crea tu API key, guárdala y manda un mensaje de prueba con" say "" say " heysteff setup" say "" say "Docs: https://developers.heysteff.com/docs/cli" } main "$@"