Configuration initiale
Au premier démarrage (aucune configuration, aucun utilisateur), toute visite est
redirigée vers l'assistant /setup. Il configure les bases du CRM (organisation,
URL, expéditeur), les méthodes de connexion, puis crée le premier administrateur
(le propriétaire). Better Auth étant l'autorité de session, l'assistant ne connecte
plus l'administrateur directement : il est redirigé vers /login, et sa première
connexion Better Auth lie son compte (le portail d'invitation l'autorise en tant
qu'employé existant).
- Définir le jeton d'installation sur le déploiement Convex :
bunx convex env set SETUP_TOKEN $(openssl rand -hex 32). - Ouvrir
/setup, saisir ce jeton, remplir les étapes, terminer. L'assistant se verrouille ensuite (une nouvelle visite de/setupredirige vers/login).
La configuration est stockée dans la table singleton appConfig ; les secrets
(client secrets sociaux et SSO) ne sont jamais renvoyés au navigateur.
SSO / OpenID Connect
Les fournisseurs SSO personnalisés sont gérés par le plugin generic-oauth de
Better Auth, exactement comme les fournisseurs sociaux : ils se configurent
dans l'assistant d'installation (et les réglages), stockés en base dans
appConfig.auth.ssoProviders. Chaque fournisseur est une entrée :
providerId (slug stable, utilisé dans l'URL de rappel : des mots en minuscules
et chiffres séparés par des tirets, 64 caractères au plus, refusé sinon), label, issuerUrl,
clientId, clientSecret, scopes, enabled. L'émetteur doit exposer un
document de découverte OIDC (/.well-known/openid-configuration) et émettre des
id_token standard. L'URL de rappel à déclarer dans la console du fournisseur est
${CONVEX_SITE_URL}/api/auth/oauth2/callback/<providerId> (affichée et copiable
dans l'assistant).
L'accès reste régi par le modèle sur invitation : à la première connexion, un
e-mail invité provisionne l'employé ; un e-mail non invité est refusé
(not_invited) — le même filtre que pour les fournisseurs sociaux et le lien
magique. Il n'y a donc ni allowedDomains ni autoProvision propres au SSO.