OrbitWake API
Authentification
OrbitWake utilise plusieurs mécanismes d’authentification selon la surface appelée. L’API produit web utilise une session cookie HttpOnly, l’API IDE utilise un Bearer token dédié, certaines routes sont publiques, et les routes internes ou webhooks utilisent des secrets séparés.
Choisir le bon mécanisme
| Surface | Credential actuel | À utiliser pour |
|---|---|---|
| API produit web | orbitwake_session | Clients web OrbitWake authentifiés. |
| API IDE | Authorization: Bearer <ide-token> | Extension VS Code pairée. |
| Routes publiques | Aucun credential | Endpoints explicitement publics. |
| Admin interne | Bearer secret serveur privé | Automatisation/admin interne uniquement. |
| Webhooks | Secret fournisseur ou webhook | Callbacks entrants approuvés. |
Session web OrbitWake
Après une authentification réussie, OrbitWake crée un token aléatoire de 32 octets encodé en base64url.
Le token brut est envoyé au navigateur dans le cookie :
orbitwake_session
Côté base de données, OrbitWake stocke uniquement le hash SHA-256 du token de session.
Validation d’une session
Les routes protégées appellent généralement getCurrentUser().
Cette fonction :
- lit le cookie
orbitwake_session; - calcule son hash SHA-256 ;
- cherche une session correspondante non expirée ;
- charge l’utilisateur et son workspace principal.
Si le cookie est absent, inconnu ou expiré, la route protégée répond généralement :
401
{
"error": "Authentication required."
}
Routes d’authentification web
Le routeur actuel expose les actions suivantes sous /api/auth/:action :
| Méthode | Route | Usage |
|---|---|---|
| GET | /api/auth/session | Lire l’utilisateur courant. |
| POST | /api/auth/sign-up | Créer un compte. |
| POST | /api/auth/sign-in | Créer une session. |
| POST | /api/auth/sign-out | Supprimer la session courante. |
| POST | /api/auth/profile | Mettre à jour le profil authentifié. |
| POST | /api/auth/complete-onboarding | Marquer l’onboarding terminé. |
| POST | /api/auth/request-password-reset | Demander un lien de reset. |
| POST | /api/auth/resend-verification | Renvoyer l’email de vérification. |
| POST | /api/auth/verify-email | Consommer un token de vérification. |
| POST | /api/auth/reset-password | Consommer un token de reset et changer le mot de passe. |
Turnstile sur les actions sensibles
Les actions suivantes passent actuellement par la vérification Cloudflare Turnstile :
sign-up;sign-in;request-password-reset;resend-verification.
Le backend transmet aussi l’adresse IP cliente résolue via Cloudflare ou x-forwarded-for au mécanisme de vérification Turnstile.
Mots de passe
Le mot de passe utilisateur est hashé avec scrypt, un sel aléatoire de 16 octets et une sortie de 64 octets.
La longueur minimale actuelle est de 8 caractères.
Le hash stocké utilise un format interne qui inclut le schéma, le sel et le hash dérivé. Le mot de passe brut n’est pas stocké.
Vérification email
Après inscription, OrbitWake crée un token aléatoire à usage unique pour la vérification email.
Le token :
- est généré à partir de 32 octets aléatoires ;
- est stocké côté serveur sous forme de hash SHA-256 ;
- expire après 30 minutes ;
- est marqué utilisé après consommation.
Une vérification réussie crée aussi une nouvelle session web pour l’utilisateur.
Réinitialisation du mot de passe
Le token de reset suit le même principe : valeur aléatoire côté client, hash SHA-256 côté serveur.
La durée actuelle est de 20 minutes.
Après un reset réussi, OrbitWake supprime toutes les sessions web existantes de l’utilisateur.
Un cooldown de 60 secondes est appliqué avant de recréer certains tokens de vérification ou de reset pour le même compte.
Déconnexion web
POST /api/auth/sign-out :
- lit le token du cookie courant ;
- supprime la session serveur correspondante ;
- réécrit le cookie avec une durée de vie nulle.
Cette déconnexion web ne révoque pas automatiquement une session IDE VS Code déjà pairée.
Authentification IDE
Les routes Ask et Agent de l’extension VS Code n’utilisent pas le cookie orbitwake_session.
Elles utilisent :
Authorization: Bearer <ide-token>
Le token IDE est généré à partir de 32 octets aléatoires. Le serveur stocke uniquement son hash SHA-256 dans ide_sessions.
Pairing IDE
Le flux est composé de deux étapes :
- une session web authentifiée crée un pairing code via
POST /api/ide/pairing; - VS Code réclame le code via
POST /api/ide/pairing/claim.
Le code est à usage unique, expire après 10 minutes et son hash SHA-256 est stocké côté serveur.
Le claim retourne un sessionId, le workspaceId et le token IDE brut.
Validation et révocation IDE
À chaque requête IDE protégée, OrbitWake :
- lit le Bearer token ;
- calcule son hash ;
- cherche une session avec
status = activeetrevoked_at IS NULL; - met à jour
last_seen_at.
Les sessions sont listées depuis le web avec :
GET /api/ide/sessions
La révocation utilise :
DELETE /api/ide/sessions/:sessionId
Expiration du token IDE
Dans le runtime actuel, la session IDE ne possède pas de date d’expiration autonome explicitement vérifiée comme la session web.
Elle reste utilisable tant que son statut est actif et qu’elle n’a pas été révoquée.
Cette différence doit être prise en compte lorsque l’on compare session web et session IDE.
Routes sans authentification
Certaines routes sont volontairement publiques, par exemple la recherche de domaine ou certains catalogues/configurations publiques.
L’absence de credential sur une route précise ne signifie pas que les autres routes sous /api/ sont publiques.
Vérifiez toujours le contrat de l’endpoint concerné.
Bearer interne admin
Le repo possède aussi une route interne beta qui lit :
Authorization: Bearer <internal-admin-token>
Le secret attendu provient de la configuration serveur et est comparé en temps constant.
Secrets de webhooks
Les webhooks entrants peuvent utiliser un mécanisme spécifique au provider.
Le webhook Brevo actuel compare par exemple un token fourni dans l’URL avec le secret attendu côté serveur, en utilisant une comparaison en temps constant.
Les secrets de webhook sont destinés à vérifier l’origine d’un callback ; ils ne donnent pas accès à l’API produit.
Ce qui n’est pas une clé API
| Credential | Peut servir de clé API générale ? |
|---|---|
orbitwake_session | Non. Session web navigateur. |
| Token IDE | Non. Limité aux endpoints IDE. |
| Token admin interne | Non. Secret serveur privé. |
| Token webhook | Non. Vérification de callback. |
| Token de vérification email | Non. Token à usage unique. |
| Token de reset password | Non. Token à usage unique. |
Appels API depuis le navigateur OrbitWake
Les clients web officiels peuvent appeler les routes protégées dans le contexte de la session OrbitWake, le navigateur envoyant le cookie selon ses règles normales.
La documentation actuelle ne recommande pas de copier ou extraire le cookie pour l’utiliser avec des scripts externes.
Intégrations externes
OrbitWake ne propose pas encore de mécanisme d’authentification public pour applications tierces comparable à une clé API utilisateur ou à un OAuth développeur public.
Pour cette raison, les routes produit actuelles ne doivent pas être présentées comme une API externe stable à consommer avec un script serveur indépendant.
Erreurs d’authentification courantes
| Réponse | Signification courante |
|---|---|
401 Authentication required. | Session web absente ou invalide. |
401 IDE authentication required. | Token IDE absent, invalide ou session révoquée. |
401 Unauthorized. | Secret interne/webhook invalide selon la route. |
403 OrbitWake AI is not available... | Compte authentifié mais non autorisé à utiliser AI. |
400 Pairing code is invalid or expired. | Pairing IDE incorrect, expiré ou déjà consommé. |
Frontières de sécurité à respecter
- ne jamais envoyer le cookie web dans un dépôt, un log ou un service tiers ;
- ne jamais utiliser un token IDE pour appeler des routes web générales ;
- ne jamais exposer un token admin ou webhook dans du JavaScript client ;
- ne jamais stocker un token de pairing ou de reset comme credential permanent ;
- ne pas confondre authentification et autorisation de fonctionnalité.
Limites actuelles
Il n’existe pas encore de clé API publique, OAuth développeur public, scopes API externes ou endpoint public de rotation de clés.
La session web reste orientée produit navigateur, tandis que le Bearer token IDE est une credential spécialisée pour l’éditeur.
Une future API publique devra définir séparément son format de credential, ses scopes, sa rotation, sa révocation et son versioning.
Étape suivante
La page Requêtes détaillera les méthodes HTTP, JSON, paramètres, pièces jointes, idempotency et conventions actuellement observées dans les routes OrbitWake.