#!/usr/bin/bash set -euo pipefail IFS=$'\n\t' SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" if [[ -d "${SCRIPT_DIR}/../../.git" ]] || [[ -f "${SCRIPT_DIR}/../../nodo/config/etc/mirrors.env" ]]; then REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" else REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" fi if [[ -f "${REPO_ROOT}/nodo/config/etc/mirrors.env" ]]; then # shellcheck source=/dev/null source "${REPO_ROOT}/nodo/config/etc/mirrors.env" elif [[ -f "${REPO_ROOT}/config/etc/mirrors.env" ]]; then # shellcheck source=/dev/null source "${REPO_ROOT}/config/etc/mirrors.env" elif [[ -f "${REPO_ROOT}/etc/mirrors.env" ]]; then # shellcheck source=/dev/null source "${REPO_ROOT}/etc/mirrors.env" fi MIRRORS_IPNS_KEY="${MIRRORS_IPNS_KEY:-mxos-mirrors}" MIRRORS_IPNS_LIFETIME="${MIRRORS_IPNS_LIFETIME:-720h}" MIRRORS_IPNS_TTL="${MIRRORS_IPNS_TTL:-5m}" usage() { cat << USAGE Uso: $0 Publica el CID raíz del repositorio en IPNS utilizando la llave criptográfica Ed25519. Argumentos: CID_RAÍZ CID de IPFS a publicar bajo el registro IPNS (ejemplo: bafybeib...) Opciones de entorno: MIRRORS_IPNS_KEY Nombre de la llave en el almacén de Kubo (por defecto: mxos-mirrors) MIRRORS_IPNS_LIFETIME Vigencia del registro firmado (por defecto: 720h) MIRRORS_IPNS_TTL Tiempo de vida en caché antes de revalidación (por defecto: 5m) USAGE exit 1 } main() { local cid="${1:-}" if [[ -z "${cid}" ]]; then echo "Error: Se requiere especificar el CID raíz a publicar." >&2 usage fi # Normalizar CID eliminando prefijo /ipfs/ si viene incluido cid="${cid#/ipfs/}" # Verificar que la llave existe en Kubo if ! ipfs key list | grep -Fxq "${MIRRORS_IPNS_KEY}"; then echo "Error: La llave '${MIRRORS_IPNS_KEY}' no existe en el almacén de Kubo." >&2 echo "Genérela con: ipfs key gen --type=ed25519 ${MIRRORS_IPNS_KEY}" >&2 exit 1 fi local key_id key_id="$(ipfs key list -l | awk -v k="${MIRRORS_IPNS_KEY}" '$2 == k {print $1}')" echo "==> Publicando en IPNS con llave ${MIRRORS_IPNS_KEY} (${key_id})..." echo " CID destino: /ipfs/${cid}" echo " Vigencia de firma: ${MIRRORS_IPNS_LIFETIME}, TTL de caché: ${MIRRORS_IPNS_TTL}" local pub_result pub_result="$(ipfs name publish \ --key="${MIRRORS_IPNS_KEY}" \ --lifetime="${MIRRORS_IPNS_LIFETIME}" \ --ttl="${MIRRORS_IPNS_TTL}" \ "/ipfs/${cid}")" echo "==> ${pub_result}" echo "==> Verificando resolución inmediata..." local resolved resolved="$(ipfs resolve "/ipns/${key_id}")" echo " /ipns/${key_id} -> ${resolved}" } main "$@"