- Support JWT OIDC Authentik via jose + JWKS (cache 10min)
- Lookup Personne via PersonneRepo.findByEmail + cache Redis 60s
- Mapping groups Authentik + roles formation-hub vers scopes
- Mode OIDC active uniquement si AUTHENTIK_ISSUER + JWKS_URI + AUDIENCE set
- Service tokens brg_* inchanges, restent voie principale en local
Decouverts via smoke test local contre Baserow + Docmost reels.
1. **BaseRepo.list robuste** : try/catch toDomain par row, skip + log warn
si throw (ex Personne avec splits null != 100). Avant : 500 sur la liste
entiere. Apres : 200 avec items valides + meta.skipped count pour visibilite.
`get()` continue de propager (un get sur row corrompue = legitimement 500
pour investigation manuelle).
2. **BASEROW_TABLE_IDS env override** : BaserowClient.resolveTableIds appelle
/api/database/tables/database/:id/ qui requiert un JWT user (Baserow API
distingue DB tokens reservees aux endpoints rows, et JWT pour les endpoints
admin). En dev/prod simple on passe le mapping directement par env var :
BASEROW_TABLE_IDS={"personne":609,"formation":610,...}. Le code resolveTableIds
reste en place pour Phase 3+ (bridge avec JWT user).
Smoke test post-fix :
- GET /api/health, /api/ready : 200
- Auth : 401 absent / 401 invalide / 200 valide
- GET /personnes (rows test invalides) : 200 data:[] meta.skipped:2
- GET /formations, /projets : 200 avec rows
- GET /personnes/9999 : 404
Tests Vitest : 163/163 verts. tsc + biome ci verts.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>