Voici les Spécifications Techniques (PRD) pour la stack de développement globale de Circuy et son système d'authentification/identification.


📄 Spec Technique : Stack Globale & Système d'Authentification (Circuy)

1. Choix de la Stack Technique Globale

L'architecture est découpée en 3 briques indépendantes partageant le même langage ( TypeScript ) pour maximiser la réutilisation des types et des contrats d'API.

                                  ┌───────────────────────────────────┐
                                  │ Extension Chrome (WXT / TS)       │
                                  └─────────────────┬─────────────────┘
                                                    │
┌───────────────────────────────────┐               │ REST / gRPC / WebSockets
│ SDK Client (Vanilla TS / Shepherd)├───────────────┼──────────────────┐
└───────────────────────────────────┘               │                  │
                                                    ▼                  ▼
                                  ┌───────────────────────────────────┐
                                  │ Backend & API (Node.js / Hono)    │
                                  └─────────────────┬─────────────────┘
                                                    │
                                                    ▼
                                  ┌───────────────────────────────────┐
                                  │ Base de données (PostgreSQL)      │
                                  └───────────────────────────────────┘


1.1 Extension Chrome (Éditeur No-Code)
1.2 SDK JS Client (Le script embarqué chez le client)
1.3 Backend & Infrastructure (API & Cloud Souverain)

2. Spécification du Système d'Authentification & SSO

Pour offrir une expérience fluide tout en respectant les contraintes strictes des extensions web (Manifest V3) et du RGPD, le système repose sur un Modèle d'Authentification Hybride (SSO / Passkey) basé sur des Tokens JWT courts et Refresh Tokens .

2.1 Les 2 Méthodes de Connexion Supportées
  1. SSO OAuth 2.0 / OpenID Connect (OIDC) : Google, Microsoft, GitHub.
  2. Passkeys (WebAuthn / FIDO2) : Authentification biométrique (Touch ID, Face ID, Windows Hello).

2.2 Architecture & Flux d'Authentification dans l'Extension

L'authentification par Passkey (WebAuthn) exige un domaine d'origine certifié. Comme l'extension s'exécute sur le protocole chrome-extension://, la meilleure pratique UX/Sécurité consiste à déléguer l'authentification à la plateforme web app.circuy.com via chrome.identity.launchWebAuthFlow.

┌─────────────────┐       1. Clic "Se connecter"       ┌──────────────────┐
│  Extension UI   │───────────────────────────────────►│ Browser Identity │
└─────────────────┘                                    └────────┬─────────┘
        ▲                                                       │
        │                                                       │ 2. Ouvre Pop-up OAuth / WebAuthn
        │                                                       ▼
        │                                              ┌──────────────────┐
        │                                              │  app.circuy.com  │
        │                                              │ (Passkey / SSO)  │
        │                                              └────────┬─────────┘
        │                                                       │
        │         4. Redirection avec Token JWT                 │ 3. Validation Biométrie
        └───────────────────────────────────────────────────────┘    ou Provider OAuth


Déroulement du Flux (Step-by-Step) :
  1. Trigger : Le créateur ouvre l'extension Chrome et clique sur "Se connecter via app.circuy.com" .
  2. WebAuthFlow : L'extension déclenche chrome.identity.launchWebAuthFlow({ url: 'https://app.circuy.com/auth/extension', interactive: true }).
  3. Authentification Web : Une fenêtre modale isolée s'ouvre sur app.circuy.com :
  1. Génération du Token : Le backend Circuy valide la session et génère un couple de tokens :
  1. Callback Extension : La page web redirige vers https://<EXTENSION_ID>.chromiumapp.org/callback#access_token=...&refresh_token=....
  2. Stockage Sécurisé : L'extension capture la redirection, extrait les tokens et les stocke dans chrome.storage.local.

2.3 Stockage & Sécurité des Tokens dans l'Extension
Règles de Stockage
// Structure du stockage local de l'extension
interface AuthStorage {
  accessToken: string;
  refreshToken: string;
  user: {
    id: string;
    email: string;
    organizationId: string;
  };
}


Rafraîchissement Automatique (Silent Refresh)

Le Background Service Worker de l'extension intercepte chaque requête vers l'API Backend. Si l'AccessToken est expiré (HTTP 401), il utilise le RefreshToken pour obtenir un nouvel AccessToken de manière transparente sans déconnecter l'utilisateur.


2.4 Synchronisation automatique "Web Dashboard ↔ Extension" (Zero-Click Login)

Si l'utilisateur est déjà connecté sur le Dashboard Web ( app.circuy.com ) , l'extension peut détecter cette session active sans demander à l'utilisateur de se réauthentifier :

  1. Lors de l'ouverture de l'extension, le background script interroge le backend /api/v1/auth/me.
  2. Grâce à la permission cookies spécifiée dans le Manifest V3 pour le domaine app.circuy.com, l'extension envoie la session active de manière sécurisée.
  3. L'utilisateur est connecté instantanément dans l'extension ( Zero Friction ).

3. Matrice de Sécurité & Conformité RGPD

ComposantSolution SécuritéImpact RGPD / Souveraineté
Passkey / WebAuthnBiométrie traitée localement sur l'appareil (Enclave Sécurisée)100% Conforme : Aucune donnée biométrique ne quitte l'appareil.
Stockage TokensEncapsulé dans chrome.storage.local avec isolation par origineÉvite les fuites de données inter-onglets.
API BackendChiffrement TLS 1.3 + Entêtes HSTSServeurs hébergés en France/UE (Scaleway / OVHcloud).
Clés d'API SDK ClientClés publiques bridées par domaines autorisés (CORS / Domain Whitelisting)Seuls les domaines validés par le client peuvent exécuter le SDK.