#!/usr/bin/env bash # Filespot CLI installer # Usage: curl -fsSL https://filespot.simon-d1d.workers.dev/install/setup.sh | bash set -euo pipefail BASE_URL='https://filespot.simon-d1d.workers.dev' FILESPOT_DIR="$HOME/.local/share/filespot" BIN_DIR="$HOME/.local/bin" if ! command -v node >/dev/null 2>&1; then echo "filespot: Node.js 18 or newer is required (node not found in PATH)" >&2 exit 1 fi NODE_MAJOR="$(node -p 'process.versions.node.split(".")[0]' 2>/dev/null || echo 0)" if [ "$NODE_MAJOR" -lt 18 ] 2>/dev/null || ! [ "$NODE_MAJOR" -eq "$NODE_MAJOR" ] 2>/dev/null; then echo "filespot: Node.js 18 or newer is required (found $(node --version 2>/dev/null || echo unknown))" >&2 exit 1 fi echo "Installing filespot CLI from $BASE_URL ..." # Download everything to a temp dir first, so a failed download never leaves a half install. STAGE_DIR="$(mktemp -d)" trap 'rm -rf "$STAGE_DIR"' EXIT fetch_file() { local src="$1" dest="$2" mkdir -p "$(dirname "$STAGE_DIR/$dest")" if ! curl -fsSL "$BASE_URL/install/$src" -o "$STAGE_DIR/$dest"; then echo "filespot: download failed: $BASE_URL/install/$src" >&2 exit 1 fi if [ ! -s "$STAGE_DIR/$dest" ]; then echo "filespot: downloaded file is empty: $src" >&2 exit 1 fi } fetch_file 'filespot.mjs' 'bin/filespot.mjs' fetch_file 'package.json' 'package.json' fetch_file 'lib/api.mjs' 'lib/api.mjs' fetch_file 'lib/auth.mjs' 'lib/auth.mjs' fetch_file 'lib/fileType.mjs' 'lib/fileType.mjs' fetch_file 'lib/optimize.mjs' 'lib/optimize.mjs' fetch_file 'lib/urlGuard.mjs' 'lib/urlGuard.mjs' mkdir -p "$FILESPOT_DIR" "$BIN_DIR" cp -R "$STAGE_DIR/." "$FILESPOT_DIR/" # Older installers put filespot.mjs at the top level, where ../lib imports cannot resolve. rm -f "$FILESPOT_DIR/filespot.mjs" chmod +x "$FILESPOT_DIR/bin/filespot.mjs" # Symlink into PATH ln -sf "$FILESPOT_DIR/bin/filespot.mjs" "$BIN_DIR/filespot" echo "" echo "Installed filespot to $BIN_DIR/filespot" echo "Make sure $BIN_DIR is in your PATH, then run:" echo "" echo " filespot init $BASE_URL" echo "" # Version info DEPLOY_COMMIT='2ab35e4' DEPLOY_TIME='2026-11-03T15:09:37Z' CLI_VERSION='1.0.3' echo "Version: $CLI_VERSION (deploy $DEPLOY_COMMIT, $DEPLOY_TIME)"