150 lines
2.8 KiB
Markdown
150 lines
2.8 KiB
Markdown
# Yt2Jellyfin - Backend
|
|
|
|
API REST pour télécharger, convertir et transférer de la musique YouTube vers un serveur Jellyfin.
|
|
|
|
## Stack Technique
|
|
|
|
- **Bun** - Runtime JavaScript ultra-rapide
|
|
- **Hono** - Framework web léger
|
|
- **TypeScript** - Typage statique
|
|
|
|
## Prérequis Système
|
|
|
|
Les outils suivants doivent être installés sur le système:
|
|
|
|
- `yt-dlp` - Pour télécharger les vidéos YouTube
|
|
- `ffmpeg` - Pour la conversion audio
|
|
- `scp` - Pour le transfert SSH (généralement préinstallé)
|
|
|
|
### Installation des dépendances système
|
|
|
|
```bash
|
|
# Debian/Ubuntu
|
|
sudo apt update
|
|
sudo apt install yt-dlp ffmpeg openssh-client
|
|
|
|
# Arch Linux
|
|
sudo pacman -S yt-dlp ffmpeg openssh
|
|
```
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
bun install
|
|
```
|
|
|
|
## Configuration
|
|
|
|
1. Créez un fichier `.env` basé sur `.env.example`:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
2. Configurez les variables d'environnement:
|
|
|
|
```env
|
|
SSH_PRIVATE_KEY_PATH=/path/to/your/ssh/key
|
|
JELLYFIN_HOST=192.168.1.100
|
|
JELLYFIN_SSH_PORT=22
|
|
JELLYFIN_DESTINATION_PATH=/home/playlist
|
|
CORS_ORIGIN=http://localhost:5173
|
|
TEMP_DIR=./temp
|
|
```
|
|
|
|
3. Assurez-vous que la clé SSH privée a les bonnes permissions:
|
|
|
|
```bash
|
|
chmod 600 /path/to/your/ssh/key
|
|
```
|
|
|
|
## Développement
|
|
|
|
```bash
|
|
bun run dev
|
|
```
|
|
|
|
Le serveur sera disponible sur `http://localhost:3000`.
|
|
|
|
## Production
|
|
|
|
```bash
|
|
bun run start
|
|
```
|
|
|
|
## API Endpoints
|
|
|
|
### POST `/api/process`
|
|
|
|
Télécharge, convertit et transfère un fichier audio YouTube vers Jellyfin.
|
|
|
|
**Request Body:**
|
|
|
|
```json
|
|
{
|
|
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
|
|
"filename": "ma-chanson",
|
|
"format": "mp3"
|
|
}
|
|
```
|
|
|
|
**Response (Success):**
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Fichier téléchargé, converti et transféré avec succès",
|
|
"filename": "ma-chanson.mp3"
|
|
}
|
|
```
|
|
|
|
**Response (Error):**
|
|
|
|
```json
|
|
{
|
|
"success": false,
|
|
"error": "URL YouTube invalide",
|
|
"details": "..."
|
|
}
|
|
```
|
|
|
|
### GET `/health`
|
|
|
|
Vérifie l'état du serveur.
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"status": "ok"
|
|
}
|
|
```
|
|
|
|
## Structure
|
|
|
|
```
|
|
src/
|
|
├── config/ # Configuration
|
|
│ └── env.ts
|
|
├── controllers/ # Contrôleurs API
|
|
│ └── process-controller.ts
|
|
├── middleware/ # Middleware HTTP
|
|
│ └── cors.ts
|
|
├── services/ # Logique métier
|
|
│ ├── youtube-downloader.ts
|
|
│ └── file-transfer.ts
|
|
├── types/ # Définitions TypeScript
|
|
│ └── api.ts
|
|
├── utils/ # Utilitaires
|
|
│ └── validators.ts
|
|
└── index.ts # Point d'entrée
|
|
```
|
|
|
|
## Sécurité
|
|
|
|
- Validation stricte des URLs YouTube pour prévenir les injections de commandes
|
|
- Sanitisation des noms de fichiers
|
|
- Utilisation de clés SSH pour l'authentification
|
|
- CORS configuré pour autoriser uniquement l'origine du frontend
|
|
- Nettoyage automatique des fichiers temporaires
|