**Motivations:** - Export Signet and mining wallet backups to git with only 2 versions kept - Document and add backup/restore scripts for signet and mining wallet **Correctifs:** - Backup-to-git uses SSH URL for passwordless cron; copy timestamped files only; prune to 2 versions; remove *-latest from backup repo **Evolutions:** - data/backup-to-git-cron.sh: daily export to git.4nkweb.com/4nk/backup - save-signet-datadir-backup.sh, restore-signet-from-backup.sh, export-mining-wallet.sh, import-mining-wallet.sh - features/backup-to-git-daily-cron.md, docs/MAINTENANCE.md backup section - .gitignore: data/backup-to-git.log **Pages affectées:** - .gitignore, data/backup-to-git-cron.sh, docs/MAINTENANCE.md, features/backup-to-git-daily-cron.md - save-signet-datadir-backup.sh, restore-signet-from-backup.sh, export-mining-wallet.sh, import-mining-wallet.sh - Plus autres fichiers modifiés ou non suivis déjà présents dans le working tree
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
cd api-filigrane
npm install
Configuration
- Créer le fichier
.env:
# 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'ancrageBLOCKCHAIN_API_URL: URL du dashboard blockchain pour récupérer les infos de bloc
Démarrage
Mode Développement
npm run dev
Mode Production
npm start
Avec PM2 (recommandé pour production)
# 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 :
{
"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 :
{
"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) :
{
"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