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).

  1. Définir le jeton d'installation sur le déploiement Convex : bunx convex env set SETUP_TOKEN $(openssl rand -hex 32).
  2. Ouvrir /setup, saisir ce jeton, remplir les étapes, terminer. L'assistant se verrouille ensuite (une nouvelle visite de /setup redirige 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.