# API Filigrane Bitcoin Signet **Auteur** : Équipe 4NK **Date** : 2026-01-25 **Version** : 1.0.0 ## Description API REST pour ajouter un filigrane à des documents, les convertir en PDF, et les ancrer sur la blockchain Bitcoin Signet. Cette API permet d'ancrer à la fois le document original et le document filigrané. ## Caractéristiques - **Port** : `3022` - **Format** : JSON REST API - **Conversion** : Tous types de documents → PDF - **Filigrane** : Ajout de texte, dates, signatures, informations blockchain - **Ancrage** : Appel automatique à l'API d'ancrage pour les deux documents ## Installation ### Prérequis - Node.js >= 18.0.0 - Accès à l'API d'ancrage (port 3010) - Accès au dashboard blockchain (port 3020) pour les infos de bloc ### Installation des Dépendances ```bash cd api-filigrane npm install ``` ### Configuration 1. Créer le fichier `.env` : ```bash # API Configuration WATERMARK_API_PORT=3022 WATERMARK_API_HOST=0.0.0.0 # API Keys (séparées par des virgules) API_KEYS=your-api-key-here,another-api-key # Anchor API Configuration ANCHOR_API_URL=http://localhost:3010 # Blockchain API Configuration (pour récupérer les infos de bloc) BLOCKCHAIN_API_URL=http://localhost:3020 # Logging LOG_LEVEL=info NODE_ENV=production ``` **Important** : - `API_KEYS` : Définir au moins une clé API valide (séparées par des virgules) - `ANCHOR_API_URL` : URL de l'API d'ancrage - `BLOCKCHAIN_API_URL` : URL du dashboard blockchain pour récupérer les infos de bloc ## Démarrage ### Mode Développement ```bash npm run dev ``` ### Mode Production ```bash npm start ``` ### Avec PM2 (recommandé pour production) ```bash # Installer PM2 globalement sudo npm install -g pm2 # Démarrer l'API avec PM2 pm2 start src/server.js --name watermark-api # Sauvegarder la configuration PM2 pm2 save # Configurer PM2 pour démarrer au boot pm2 startup # Suivre les instructions affichées ``` ## Endpoints ### GET /health Vérifie l'état de santé de l'API. **Authentification** : Non requise **Réponse** : ```json { "ok": true, "service": "watermark-api", "version": "1.0.0", "timestamp": "2026-01-25T12:00:00.000Z" } ``` ### POST /api/watermark/document Ajoute un filigrane à un document, le convertit en PDF, et ancre les deux versions (originale et filigranée). **Authentification** : Requise (clé API dans le header `x-api-key`) **Headers** : ``` x-api-key: your-api-key-here Content-Type: application/json ``` **Body** : ```json { "apiKey": "your-api-key-here", "textContent": "Texte à convertir en PDF", "fileData": "base64-encoded-file-data", "fileName": "document.pdf", "mimeType": "application/pdf", "watermarkOptions": { "enabled": true, "text": "Texte libre du filigrane", "signature": "Signature cryptographique", "watermarkedFileName": "document-watermarked.pdf", "originalFileName": "document-original.pdf", "dateUTC": true, "dateLocal": true, "blockNumber": true, "blockHash": true, "documentHash": true } } ``` **Réponse (succès)** : ```json { "success": true, "options": { ... }, "original": { "txid": "...", "status": "pending", "confirmations": 0, "file": { "name": "document-original.pdf", "extension": "pdf", "data": "base64-encoded-pdf-data" } }, "watermarked": { "txid": "...", "status": "pending", "confirmations": 0, "file": { "name": "document-watermarked.pdf", "extension": "pdf", "data": "base64-encoded-pdf-data" } } } ``` ## Options de Filigrane - **text** : Texte libre à afficher dans le filigrane (optionnel) - **signature** : Signature cryptographique à afficher (optionnel) - **watermarkedFileName** : Nom du fichier PDF filigrané (optionnel, utilise le nom d'origine avec extension .pdf si non fourni) - **originalFileName** : Nom du fichier original (optionnel, utilise "origin.md" si texte saisi et non fourni) - **dateUTC** : Ajouter la date UTC dans le filigrane (case à cocher) - **dateLocal** : Ajouter la date locale dans le filigrane (case à cocher) - **blockNumber** : Ajouter le numéro de bloc actuel (case à cocher) - **blockHash** : Ajouter le hash du bloc actuel (case à cocher) - **documentHash** : Ajouter le hash du document d'origine (case à cocher) Le filigrane est ajouté en bas à gauche de chaque page du PDF. ## Conversion de Documents L'API convertit automatiquement : - **Images** : PNG, JPG, etc. → PDF (PNG converti en JPG puis en PDF) - **Texte** : Tous types de texte → PDF - **PDF** : Conservé tel quel ## Architecture ``` Client (Dashboard) ↓ HTTPS API Filigrane (port 3022) ↓ HTTP API Ancrage (port 3010) ↓ RPC Bitcoin Signet Node (port 38332) ``` ## Sécurité - **Authentification** : Clé API requise pour tous les endpoints sauf `/health` - **Validation** : Validation stricte des entrées - **Limite de taille** : 50MB par défaut pour les requêtes ## Dépannage ### L'API ne démarre pas - Vérifier que le port 3022 n'est pas utilisé : `netstat -tlnp | grep 3022` - Vérifier les logs : `pm2 logs watermark-api` - Vérifier la configuration dans `.env` ### Erreur "Failed to anchor document" - Vérifier que l'API d'ancrage est accessible : `curl http://localhost:3010/health` - Vérifier que la clé API est valide - Vérifier les logs de l'API d'ancrage ### Erreur de conversion PDF - Vérifier que les dépendances sont installées : `npm install` - Vérifier les logs pour les erreurs spécifiques ## Structure des Fichiers ``` api-filigrane/ ├── package.json ├── README.md ├── start.sh ├── .env.example └── src/ ├── server.js # Serveur Express ├── logger.js # Logger └── routes/ ├── watermark.js # Routes de filigrane └── health.js # Routes de santé ``` ## Licence MIT