feat: split backend into lib/ modules + add squid.wtf (Qobuz) download backend

- backend/lib/config.js  — CONFIG from env (adds DOWNLOAD_BACKEND, SQUID_QUALITY)
- backend/lib/jobs.js    — jobs Map, updateJob(), log()
- backend/lib/metadata.js — iTunes, artwork, lyrics, sanitize helpers
- backend/lib/ytdlp.js   — yt-dlp download cascade + shared embedMetadata()
- backend/lib/squid.js   — ALTCHA PoW solver, Qobuz search/download via squid.wtf
- backend/lib/downloader.js — backend selector: ytdlp | squid | auto (squid-first + fallback)
- novasonic-server.js thinned to Express routes only, imports from lib/
- docker-compose: mount full backend/ dir, install deps outside read-only volume
- .env.example: document DOWNLOAD_BACKEND and SQUID_QUALITY

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
HoneyandClaude Sonnet 4.6 committed 2026-05-02 20:44:26 +02:00
1 parent 2d71fdce6a
commit ac8d26bf9d
9 files changed
+858 -557

No files matched your search

+5 -3
View File
@@ -18,7 +18,7 @@ services:
restart: unless-stopped
working_dir: /app
volumes:
- ./backend/novasonic-server.js:/app/novasonic-server.js:ro
- ./backend:/app:ro # mount entire backend dir (server + lib/)
- ${MUSIC_PATH}:${MUSIC_PATH} # exact path from .env, no remapping
ports:
- "3700:3700" # route this port through your reverse proxy
@@ -28,9 +28,11 @@ services:
- AUDIO_FMT=${AUDIO_FMT:-mp3}
- AUDIO_QUALITY=${AUDIO_QUALITY:-0}
- MAX_PARALLEL=${MAX_PARALLEL:-2}
- DOWNLOAD_BACKEND=${DOWNLOAD_BACKEND:-auto}
- SQUID_QUALITY=${SQUID_QUALITY:-mp3}
command: >
sh -c "
apk add --no-cache yt-dlp ffmpeg python3 &&
npm install express cors &&
node novasonic-server.js
mkdir -p /deps && cd /deps && npm install express &&
cd /app && NODE_PATH=/deps/node_modules node novasonic-server.js
"