Runbook — Connecteurs
title: Runbook — Connecteurs description: Exploitation des connecteurs d’infrastructure : messagerie, KV, limites, crédits Marketplace.
Décision :
ADR 0016. Architecture : Connecteurs Studio. Ce runbook grandit à chaque étape du plan des connecteurs ; il décrit aujourd'hui l'étape C2 (messagerie, KV et limites), amendée le 2026-09-28 (infrastructure par le Marketplace).Statut (migration Orbit, 2026-10) : runbook d'exploitation du projet Vercel d'Orbit (
https://orbit.easyconnector.app), repris de l'ancien dépôt Studio.
Toutes les actions ci-dessous se font en clics, dans Vercel ou chez le fournisseur. Aucune valeur secrète ne passe par le dépôt, une PR ou une conversation. Un changement de variable Vercel n'atteint que les nouveaux déploiements : chaque action qui pose ou supprime une variable finit par « redéployer ».
Messagerie
Liaison studio.mailer de products/connectors.json : adaptateur resend, crédit Marketplace
{ "marketplace": "resend" }, expéditeur config.from. Depuis l'amendement du 2026-09-28 de l'ADR 0016,
l'infrastructure d'Orbit (Neon, Upstash, Resend) passe par les intégrations du Vercel Marketplace, qui
injectent leurs variables ; Vercel Connect est réservé aux connecteurs que les membres branchent sur un
produit (GitHub, analytics, réseaux). Il n'y a donc plus de connecteur resend/studio ni de variable de
secours pour la messagerie.
| Où tourne le studio | Ce qui envoie un e-mail |
|---|---|
Déploiement Vercel (VERCEL_ENV production ou preview) | Resend, avec RESEND_API_KEY injectée par l'intégration Resend |
Partout ailleurs (pnpm dev, next start sur un poste, la suite e2e) | la console : une ligne [mail:console] par message dans le journal serveur, quelles que soient les variables posées |
Mise en place :
- Dans Vercel, Integrations, Marketplace : installer Resend et connecter le projet d'Orbit pour
Production et Preview. L'intégration injecte
RESEND_API_KEY; aucune valeur n'est copiée à la main. - Chez Resend : vérifier le domaine d'envoi de
config.from(Orbit <orbit@easyconnector.app>). - Redéployer, puis se connecter une fois : un code doit arriver.
- Si une ancienne
STUDIO_MAIL_FROMest encore posée, la supprimer (le registre porteconfig.from), puis redéployer.
Lire une panne : le journal serveur dit Mail unavailable (<raison>): <correction>.
| Raison | Ce que ça veut dire | Où corriger |
|---|---|---|
not-configured | RESEND_API_KEY absente : l'intégration n'est pas connectée au projet pour cet environnement (ou config.from manque au registre) | Vercel, Integrations, Resend, puis redéployer ; ou products/connectors.json par une PR |
rejected | Resend refuse la clé (révoquée ou remplacée) | Resend, puis l'intégration Resend dans Vercel ; redéployer |
forbidden | Resend refuse l'opération (domaine non vérifié, droits de la clé) | Resend, domaines et clé |
rate-limited | quota Resend atteint | attendre |
Chat en direct (/auth et /onboarding)
Le widget de chat d'Orbit (le chargeur est porté de l'ancienne application d'origine), sur /auth et
/onboarding seulement. Dans Vercel, poser
NEXT_PUBLIC_SUPPORT_CHAT_PROVIDER (heyo, crisp ou none, défaut none) et l'id du fournisseur choisi :
NEXT_PUBLIC_HEYO_PROJECT_ID ou NEXT_PUBLIC_CRISP_WEBSITE_ID (ids publics : ceux du compte de chat d'Orbit, jamais ceux d'un autre produit).
Variables inlinées au build : redéployer. Sans id, rien ne se charge et le CSP n'ouvre rien.
Si personne ne peut plus se connecter
Le code de connexion part par e-mail : sans messagerie, personne n'entre, le fondateur compris.
- Dans Vercel, Integrations, Resend : vérifier que le projet d'Orbit est connecté pour Production, et que
RESEND_API_KEYfigure dans Settings, Environment Variables. - Si la clé est révoquée : en régénérer une depuis l'intégration (ou chez Resend, puis la reconnecter).
- Redéployer la production, puis se connecter.
KV et limites
Liaison studio.kv : adaptateur upstash, crédit Marketplace (l'intégration Upstash injecte KV_REST_API_URL
et KV_REST_API_TOKEN, lus au premier usage puis gardés pour la vie de l'instance). Ports KeyValue (verrouillage
des codes, « une seule fois ») et RateLimiter (limites de demande de code, retours).
| Où | KV |
|---|---|
| Déploiement Vercel | Upstash ; les limites passent en mémoire 30 s après une panne d'Upstash, puis réessaient |
| Partout ailleurs | la mémoire de l'instance |
Vérification (action fondateur F6) : dans Integrations, Neon et Upstash sont reliés au projet pour Production et Preview seulement ; détacher Development s'il y est (le poste utilise le Postgres local et le KV en mémoire). Une rotation chez Upstash ou Neon se termine par un redéploiement.
Sans Upstash sur un déploiement, le journal serveur dit une fois par instance
[connectors] studio.kv unavailable (not-configured) : les limites et les verrous ne valent alors que par
instance.
Analytics DataFast (studio/26)
Porté de l'ancienne application d'origine (son module d'analytics, le chargeur du layout et ses rewrites) :
apps/web/src/lib/analytics/datafast.ts. Le script est servi en première partie (/js/script.js, événements sur
/datafast-events, tous deux réécrits vers datafa.st) : la CSP ne nomme aucune origine DataFast. Variante
sans cookie (script.cookieless.js) : pas de checkout Stripe ici, donc pas d'attribution de revenu, pas de
cookie datafast_visitor_id, pas de bandeau de consentement à prévoir. Conséquence : aucun goal côté serveur
(l'API POST /api/v1/goals exige ce visiteur), tous les goals partent du navigateur par le bus services/events.
Goals émis : auth_otp_requested, auth_signin, onboarding_completed, generation_launched (avec gesture),
qc_approved.
Variables Vercel (projet Orbit, Production seulement ; le script ne charge jamais hors build de production) :
| Variable | Valeur | Secret |
|---|---|---|
DATAFAST_WEBSITE_ID | l'id du site DataFast d'Orbit (orbit.easyconnector.app), jamais celui d'un autre produit (ni easyconnector.app, produit distinct, ni l'ancienne plateforme) | non |
DATAFAST_WEBSITE | facultatif : le domaine suivi ; vide, l'hôte de ORBIT_PUBLIC_URL puis de NEXTAUTH_URL | non |
Sans DATAFAST_WEBSITE_ID, rien ne charge et rien ne part (datafast.test.ts). Mise en place : créer chez DataFast
un site pour orbit.easyconnector.app, coller son id dans DATAFAST_WEBSITE_ID, redéployer.