cliproxyapi / supabase-sync.sh
DanielleNguyen's picture
Update supabase-sync.sh
2c12d00 verified
#!/bin/bash
# Supabase Storage sync script for auth files
# Bucket: clipro, Path: auths/
BUCKET="clipro"
AUTH_DIR="/app/auths"
SUPABASE_API="${SUPABASE_URL}/storage/v1"
# Upload a single file to Supabase Storage
upload_file() {
local filepath="$1"
local filename=$(basename "$filepath")
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
-X POST "${SUPABASE_API}/object/${BUCKET}/auths/${filename}" \
-H "Authorization: Bearer ${SUPABASE_SERVICE_KEY}" \
-H "Content-Type: application/json" \
-H "x-upsert: true" \
--data-binary @"${filepath}")
if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "201" ]; then
echo "[SYNC] Uploaded ${filename} to Supabase (${HTTP_CODE})"
else
echo "[SYNC] Failed to upload ${filename} (HTTP ${HTTP_CODE})"
fi
}
# Upload all files in auth dir
upload_all() {
echo "[SYNC] Uploading all auth files to Supabase..."
for f in "${AUTH_DIR}"/*.json; do
[ -f "$f" ] && upload_file "$f"
done
}
# Download all auth files from Supabase
download() {
echo "[SYNC] Listing files in Supabase bucket..."
FILE_LIST=$(curl -s \
-H "Authorization: Bearer ${SUPABASE_SERVICE_KEY}" \
-H "Content-Type: application/json" \
"${SUPABASE_API}/object/list/${BUCKET}" \
-d '{"prefix":"auths/","limit":100}')
if echo "$FILE_LIST" | jq -e '.[0].name' > /dev/null 2>&1; then
FILE_COUNT=$(echo "$FILE_LIST" | jq length)
echo "[SYNC] Found ${FILE_COUNT} files in Supabase"
echo "$FILE_LIST" | jq -r '.[].name' | while read filename; do
if [ -n "$filename" ] && [ "$filename" != "null" ] && [ "$filename" != ".emptyFolderPlaceholder" ]; then
echo "[SYNC] Downloading ${filename}..."
curl -s \
-H "Authorization: Bearer ${SUPABASE_SERVICE_KEY}" \
"${SUPABASE_API}/object/${BUCKET}/auths/${filename}" \
-o "${AUTH_DIR}/${filename}"
echo "[SYNC] Saved ${AUTH_DIR}/${filename}"
fi
done
else
echo "[SYNC] No files found in Supabase or error: ${FILE_LIST}"
fi
}
# Watch auth directory for changes and sync to Supabase
watch_dir() {
echo "[SYNC] Starting file watcher on ${AUTH_DIR}..."
inotifywait -m -r -e close_write,create,modify "${AUTH_DIR}" --format '%f' | while read filename; do
if [[ "$filename" == *.json ]]; then
echo "[SYNC] Detected change: ${filename}"
sleep 2
if [ -f "${AUTH_DIR}/${filename}" ]; then
upload_file "${AUTH_DIR}/${filename}"
fi
fi
done
}
case "$1" in
download) download ;;
upload) upload_file "$2" ;;
upload-all) upload_all ;;
watch) watch_dir ;;
*) echo "Usage: $0 {download|upload <file>|upload-all|watch}"; exit 1 ;;
esac