diff --git a/docs/superpowers/specs/2026-09-08-unifi-os-integration-design.md b/docs/superpowers/specs/2026-09-08-unifi-os-integration-design.md index d63473288..595f30a3a 100644 --- a/docs/superpowers/specs/2026-09-08-unifi-os-integration-design.md +++ b/docs/superpowers/specs/2026-09-08-unifi-os-integration-design.md @@ -56,7 +56,7 @@ refusée avec un `401` sur cette API — les deux systèmes de clés sont distin | — | **`limit` est plafonné à 200.** Une demande à 1000 renvoie `limit: 200`. | mesuré | | `GET /sites/{id}/devices` | `state`, `model`, `macAddress`, `firmwareVersion`, `firmwareUpdatable`, `features` | 6 équipements | | `GET /sites/{id}/devices/{id}/statistics/latest` | `uptimeSec`, `cpuUtilizationPct`, `memoryUtilizationPct`, `uplink.{tx,rx}RateBps` | — | -| `GET /sites/{id}/vpn/servers` | `type`, `enabled` | 1 serveur WireGuard actif | +| `GET /sites/{id}/vpn/servers` | `type`, `enabled` | 1 serveur WireGuard actif — **non consommé en v1**, voir §12 | | `GET /sites/{id}/wans` | `id`, `name` **uniquement** — inexploitable pour l'état | 2 WAN | **Types de clients** (discriminant `type`) : `WIRED`, `WIRELESS`, `VPN`, @@ -149,20 +149,23 @@ export interface UnifiOsSummary { } | null; }; + /** `null` si l'appel a échoué. Surtout pas un compteur à zéro : le lecteur + * ne pourrait pas distinguer « échec » de « aucun client connecté ». */ clients: { total: number; wired: number; wireless: number; vpn: number; // VPN + TELEPORT guests: number; // access.type === "GUEST", tous types confondus - }; + } | null; + /** `null` si l'appel a échoué, pour la même raison. */ devices: { total: number; online: number; offline: number; firmwareUpdatable: number; - }; + } | null; gateway: { name: string; @@ -270,7 +273,6 @@ appels partagent la même configuration. 3. Promise.allSettled([ GET /sites/{id}/clients?limit=200 → comptage par type (voir §7) GET /sites/{id}/devices → états, firmwares, gateway - GET /sites/{id}/vpn/servers → VPN actif ]) 4. GET /sites/{id}/devices/{gatewayId}/statistics/latest (si gateway trouvé) 5. si clé cloud présente : @@ -446,6 +448,9 @@ Volontairement exclus de cette spec : - **Widget cloud multi-site** (SD-WAN, fabric, vue consolidée de plusieurs consoles). Idée retenue pour un projet ultérieur, qui réutilisera `unifi-sm-api.ts`. Sa mention ici sert à ne pas le construire maintenant. +- **État des serveurs VPN.** L'endpoint existe et fonctionne, mais le contrat §4 + n'expose pas de champ pour lui et la disposition retenue au §8 ne l'affiche pas. + Le collecter sans l'afficher serait du code mort. - **Actions d'écriture** (adoption d'équipement, redémarrage de port, gestion de vouchers). L'API les expose ; l'intégration reste en lecture seule. - **Traduction au-delà de l'anglais.** Conséquence de D1.