3.1 KiB
Partage de gros fichiers (> 50 Mo) via Pingvin Share — pv.bolbol.tn
Date : 2026-07-04 · Statut : validé de bout en bout (upload 60 Mo depuis hermes-agent-nyora et 55 Mo depuis hermes-agent-tt, checksum vérifié après téléchargement public).
Problème
L'API Bot Telegram refuse les fichiers > 50 Mo (sendDocument). L'alternative Pingvin échouait depuis des mois : tous les essais API finissaient en 403/404/413 (cf. anciennes notes pingvin-api-issues-2026.md, archivées).
Les 3 causes racines (ce qui NE marche PAS)
Authorization: Bearer <token>→ 403 systématique. Pingvin lit le JWT dans le cookie :-H "Cookie: access_token=$TOKEN". C'était la cause des « Forbidden resource » historiques.- Upload en un seul POST → 413 au-delà de la limite body (=
share.chunkSizeserveur, 30 000 000 octets). Il faut chunker à exactement 30 000 000 octets par chunk (sauf le dernier) : toute autre taille casse le contrôleexpectedChunkIndex = ceil(tailleDisque/chunkSize)côté serveur → erreurunexpected_chunk_index. - Endpoints inexistants :
/api/v1/*,/api/upload,/api/files, multipartfile=@sur/api/shares. Le corps du chunk est du binaire brut (--data-binary,Content-Type: application/octet-stream) — pas de base64, pas de multipart.
Autres pièges :
- Usernames Pingvin sensibles à la casse : la variable d'env de tt disait
hermes_TT, le compte esthermes_tt→ toujours passer le username en minuscules. (Le mot de passe du comptehermes_tta été réaligné le 2026-07-04 sur la valeur dePINGVIN_PASS_TTvia le compte admin.) - Le
idde fichier renvoyé par le 1er chunk doit être repassé en query paramid=sur les chunks suivants.
Flux API validé
1. POST /api/auth/signIn {"username","password"} → accessToken
2. POST /api/shares (Cookie access_token) → crée le share {"id","expiration":"never","security":{},"recipients":[]}
3. POST /api/shares/<share>/files?name=<n>&chunkIndex=<i>&totalChunks=<t>[&id=<fid>]
body = chunk binaire brut de 30 000 000 octets (dernier = reste), Content-Type: application/octet-stream
4. POST /api/shares/<share>/complete (Cookie access_token)
5. Lien public : https://pv.bolbol.tn/share/<share> (téléchargement direct : /api/shares/<share>/files/<fid>)
Limite par share : 4 Go (share.maxSize). Suppression : DELETE /api/shares/<share>.
Script prêt à l'emploi
Le script shell complet (copier-coller) est dans le skill partage-pingvin.md déployé à la racine data/skills/ des 3 instances Hermes (tt, nyora, perso). Chaque conteneur agent a déjà PINGVIN_URL=http://Pingvin-Share:3000 + PINGVIN_USER_<INSTANCE> / PINGVIN_PASS_<INSTANCE>.
Le skill envoyer-fichier-telegram.md renvoie vers partage-pingvin pour les fichiers > 50 Mo ; le lien pv.bolbol.tn est ensuite envoyé par sendMessage Telegram.
Vérification rapide
# depuis un conteneur agent
curl -s -o /dev/null -w "%{http_code}" https://pv.bolbol.tn/share/<SHARE_ID> # attendu : 200