**Motivations:** - Ensure all application directories have systemd services enabled at boot - Complete service installation for api-relay, filigrane-api, and clamav-api - Fix dependencies and import issues preventing clamav-api from starting **Root causes:** - Three services (api-relay, filigrane-api, clamav-api) had service files but were not installed in systemd - api-clamav had incorrect node-clamav version (0.12.1) that doesn't exist - api-clamav dependencies were not installed (node_modules missing) - ES module import syntax incompatible with CommonJS node-clamav package **Correctifs:** - Installed api-relay.service, filigrane-api.service, and clamav-api.service in /etc/systemd/system/ - Enabled all three services for automatic startup at boot - Updated api-clamav/package.json: changed node-clamav version from ^0.12.1 to ^1.0.11 - Installed npm dependencies for api-clamav - Fixed ES module import in api-clamav/src/routes/scan.js to use CommonJS-compatible syntax **Evolutions:** - All 7 application services now have systemd services enabled at boot - Complete service coverage: anchorage-api, faucet-api, signet-dashboard, userwallet, api-relay, filigrane-api, clamav-api - All services verified active and listening on their respective ports **Pages affectées:** - api-clamav/package.json - api-clamav/src/routes/scan.js - api-clamav/node_modules/ (new) - api-clamav/package-lock.json (new) - /etc/systemd/system/api-relay.service (new) - /etc/systemd/system/filigrane-api.service (new) - /etc/systemd/system/clamav-api.service (new)
42 lines
2.3 KiB
Markdown
42 lines
2.3 KiB
Markdown
# 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).
|