# API Relay – Évolutions (build ESM, rate limit, CORS, logging, métriques, etc.) **Author:** Équipe 4NK **Date:** 2026-01-26 ## Objectif Implémenter les évolutions listées pour le relais UserWallet : build ESM compatible `node dist/`, rate limiting, CORS configurable, validation POST stricte, logging structuré (Pino), métriques Prometheus, compression, indexation par service, Bloom filter, timeouts, unité systemd, documentation. ## Impacts - **Build** : `tsconfig` en `module`/`moduleResolution` Node16, imports avec `.js`. `npm start` → `node dist/index.js`. - **Middleware** : CORS (origines via `CORS_ORIGINS`), rate limit (fenêtre et max via env), compression gzip, body limit, timeout serveur. - **Validation** : `lib/validate` pour MsgChiffre, MsgSignature, MsgCle ; réponses 400 explicites. - **Logging** : Pino, middleware HTTP (method, url, status, durationMs). - **Métriques** : `GET /metrics`, Prometheus `relay_storage_entries{kind}`. - **Bloom** : `GET /bloom`, JSON export du filtre des hash vus. - **Storage** : index `byService` pour `getMessages(?, ?, serviceUuid)`, `getSeenHashes`, `getSignatureCount`, `getKeyCount`. - **Déploiement** : `start.sh`, `api-relay.service`, README mis à jour. ## Modifications - `tsconfig.json` : Node16, .js dans les imports. - `package.json` : `start` → `node dist/index.js` ; deps express-rate-limit, compression, pino, prom-client, bloom-filters, @types/compression. - `src/lib/logger.ts`, `src/lib/validate.ts`, `src/middleware/index.ts`. - `src/routes/metrics.ts`, `src/routes/bloom.ts`. - `src/routes/messages|signatures|keys` : validate + logger. - `src/services/storage` : byService, rebuildServiceIndex, getSeenHashes, get*Count ; logger. - `src/services/relay` : logger ; suppression du double check hasSeenHash. - `src/index` : http.createServer, timeout, middleware, /metrics, /bloom. - `start.sh`, `api-relay.service`, `README.md`. ## Modalités de déploiement - `npm run build && npm start` ou `./start.sh`. - Systemd : `cp api-relay.service /etc/systemd/system/`, `systemctl enable --now api-relay`. ## Modalités d’analyse - `curl /health`, `curl "/messages?start=0&end=9999999999"`, `curl /metrics`, `curl /bloom`. - Vérifier les logs structurés (JSON Pino), rate limit (en-têtes), compression (Content-Encoding: gzip).