CognxSafeTrack commited on
Commit ·
b0e801b
1
Parent(s): 055daca
docs: finalize audit report and apply immediate fixes (#1, #10, #16)
Browse files
apps/api/src/routes/internal.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { logger } from '../logger';
|
|
| 6 |
import { createBullBoard } from '@bull-board/api';
|
| 7 |
import { BullMQAdapter } from '@bull-board/api/bullMQAdapter';
|
| 8 |
import { FastifyAdapter } from '@bull-board/fastify';
|
| 9 |
-
import { whatsappQueue } from '../services/queue';
|
| 10 |
|
| 11 |
const WebhookPayloadSchema = z.object({
|
| 12 |
object: z.literal('whatsapp_business_account'),
|
|
@@ -27,7 +27,10 @@ export async function internalRoutes(fastify: FastifyInstance) {
|
|
| 27 |
const serverAdapter = new FastifyAdapter();
|
| 28 |
|
| 29 |
createBullBoard({
|
| 30 |
-
queues: [
|
|
|
|
|
|
|
|
|
|
| 31 |
serverAdapter,
|
| 32 |
});
|
| 33 |
|
|
|
|
| 6 |
import { createBullBoard } from '@bull-board/api';
|
| 7 |
import { BullMQAdapter } from '@bull-board/api/bullMQAdapter';
|
| 8 |
import { FastifyAdapter } from '@bull-board/fastify';
|
| 9 |
+
import { whatsappQueue, notificationQueue } from '../services/queue';
|
| 10 |
|
| 11 |
const WebhookPayloadSchema = z.object({
|
| 12 |
object: z.literal('whatsapp_business_account'),
|
|
|
|
| 27 |
const serverAdapter = new FastifyAdapter();
|
| 28 |
|
| 29 |
createBullBoard({
|
| 30 |
+
queues: [
|
| 31 |
+
new BullMQAdapter(whatsappQueue as any),
|
| 32 |
+
new BullMQAdapter(notificationQueue as any)
|
| 33 |
+
],
|
| 34 |
serverAdapter,
|
| 35 |
});
|
| 36 |
|
apps/web/src/App.tsx
CHANGED
|
@@ -297,8 +297,8 @@ function Footer() {
|
|
| 297 |
</div>
|
| 298 |
<div><h4 className="font-bold mb-4 font-heading">Entreprise</h4>
|
| 299 |
<ul className="space-y-2 text-sm text-gray-400">
|
| 300 |
-
<li><
|
| 301 |
-
<li><a href="
|
| 302 |
<li><Link to="/privacy" className="hover:text-white transition">Confidentialité</Link></li>
|
| 303 |
</ul>
|
| 304 |
</div>
|
|
|
|
| 297 |
</div>
|
| 298 |
<div><h4 className="font-bold mb-4 font-heading">Entreprise</h4>
|
| 299 |
<ul className="space-y-2 text-sm text-gray-400">
|
| 300 |
+
<li><Link to="/" className="hover:text-white transition">À propos</Link></li>
|
| 301 |
+
<li><a href="mailto:contact@xamle.studio" className="hover:text-white transition">Contact</a></li>
|
| 302 |
<li><Link to="/privacy" className="hover:text-white transition">Confidentialité</Link></li>
|
| 303 |
</ul>
|
| 304 |
</div>
|
docs/audit_resolution_fastify_v4.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Rapport d'Audit : Résolution du Conflit de Dépendances Fastify & Stabilisation du Worker
|
| 2 |
+
|
| 3 |
+
## 1. Description du Problème
|
| 4 |
+
Lors du déploiement sur Hugging Face Spaces, l'API et le Worker WhatsApp ne parvenaient pas à démarrer, provoquant une erreur critique de type `FST_ERR_PLUGIN_VERSION_MISMATCH`.
|
| 5 |
+
|
| 6 |
+
### Symptômes :
|
| 7 |
+
- Logs de démarrage affichant : `fastify-plugin: @fastify/multipart - expected '5.x' fastify version, '4.29.1' is installed`.
|
| 8 |
+
- Le bot WhatsApp ne répondait plus aux interactions utilisateurs (boutons "Continuer" ou "Répondre").
|
| 9 |
+
- Le Worker échouait localement à cause de variables d'environnement manquantes (`ENCRYPTION_SECRET`).
|
| 10 |
+
|
| 11 |
+
---
|
| 12 |
+
|
| 13 |
+
## 2. Analyse de la Cause Racine
|
| 14 |
+
|
| 15 |
+
### Conflit d'Écosystème (Fastify v4 vs v5)
|
| 16 |
+
Le projet utilisait initialement Fastify **v4.29.1**. Cependant, plusieurs plugins avaient été mis à jour vers leurs versions les plus récentes (v9+, v11+), qui font partie de l'écosystème **Fastify v5**.
|
| 17 |
+
Fastify v5 a introduit des changements majeurs, et ses plugins associés refusent de s'enregistrer sur une instance Fastify v4 par mesure de sécurité (vérification stricte via `fastify-plugin`).
|
| 18 |
+
|
| 19 |
+
### Dépendances Invisibles
|
| 20 |
+
Le plugin `@fastify/view` était tiré indirectement par `@bull-board/fastify` dans sa version 11 (v5 ecosystem), créant un blocage même s'il n'était pas explicitement déclaré dans le `package.json` de l'API.
|
| 21 |
+
|
| 22 |
+
---
|
| 23 |
+
|
| 24 |
+
## 3. Actions Correctives Entreprises
|
| 25 |
+
|
| 26 |
+
### A. Harmonisation des Dépendances (Downgrade)
|
| 27 |
+
Nous avons choisi de stabiliser le projet sur la version **4.x** de Fastify pour éviter une migration complexe et risquée de toute l'API vers la v5.
|
| 28 |
+
Les paquets suivants ont été rétrogradés dans `apps/api/package.json` :
|
| 29 |
+
- `fastify` : `^4.29.1`
|
| 30 |
+
- `@fastify/multipart` : `^8.3.0`
|
| 31 |
+
- `@fastify/cors` : `^8.3.0`
|
| 32 |
+
- `@fastify/jwt` : `^8.0.1`
|
| 33 |
+
- `@fastify/rate-limit` : `^9.1.0`
|
| 34 |
+
- `@fastify/static` : `^7.0.4`
|
| 35 |
+
- `@fastify/view` : `^8.2.0` (ajouté explicitement pour forcer la version compatible)
|
| 36 |
+
|
| 37 |
+
### B. Correction de la Logique Métier (Fix #1)
|
| 38 |
+
Dans `apps/whatsapp-worker/src/handlers/CommandHandler.ts`, nous avons ajouté les gestionnaires manquants pour les actions de boutons :
|
| 39 |
+
- **CONTINUE** : Déclenche l'envoi de la suite du contenu du cours via la queue `send-content`.
|
| 40 |
+
- **PROMPT** : Envoie une invitation à répondre (support multilingue Français/Wolof).
|
| 41 |
+
|
| 42 |
+
### C. Configuration de l'Environnement
|
| 43 |
+
- Ajout de `ENCRYPTION_SECRET` dans le fichier `.env` pour satisfaire les validations de schéma du Worker au démarrage.
|
| 44 |
+
|
| 45 |
+
### D. Amélioration du Monitoring (Fix #10)
|
| 46 |
+
- Enregistrement de `notificationQueue` dans le tableau de bord **BullBoard** (`apps/api/src/routes/internal.ts`) pour permettre le suivi en temps réel de l'envoi des emails transactionnels.
|
| 47 |
+
|
| 48 |
+
### E. Nettoyage Frontend (Fix #16)
|
| 49 |
+
- Correction des liens morts (`#`) dans le footer de la Web App (`apps/web/src/App.tsx`) pour pointer vers des destinations valides (`/` et `mailto:`).
|
| 50 |
+
|
| 51 |
+
---
|
| 52 |
+
|
| 53 |
+
## 4. État de la Résolution & Validation
|
| 54 |
+
|
| 55 |
+
### Validation Technique :
|
| 56 |
+
- [x] **Build local** : `pnpm turbo run build` exécuté avec succès (8/8 packages).
|
| 57 |
+
- [x] **Installation** : `pnpm install` a correctement mis à jour le `pnpm-lock.yaml` avec les versions v4.
|
| 58 |
+
- [x] **Monitoring** : Les deux files d'attente (`whatsappQueue` et `notificationQueue`) sont désormais visibles.
|
| 59 |
+
- [x] **Déploiement** : Push effectué sur GitHub et Hugging Face.
|
| 60 |
+
|
| 61 |
+
### Conclusion :
|
| 62 |
+
Le problème est **entièrement résolu**. La structure actuelle garantit que tous les plugins utilisent des versions compatibles avec le noyau Fastify v4 présent dans l'environnement Hugging Face. L'interactivité du bot WhatsApp est rétablie grâce à l'intégration des handlers `CONTINUE` et `PROMPT`.
|
| 63 |
+
|
| 64 |
+
> [!TIP]
|
| 65 |
+
> Pour toute future mise à jour de dépendances, veillez à ne pas utiliser `pnpm update` de manière globale, car cela pourrait tenter de repasser les plugins Fastify en version v5, recréant ainsi le conflit.
|