Runbooks OrbitRunbook — Connecteurs

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 studioCe 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 :

  1. 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.
  2. Chez Resend : vérifier le domaine d'envoi de config.from (Orbit <orbit@easyconnector.app>).
  3. Redéployer, puis se connecter une fois : un code doit arriver.
  4. Si une ancienne STUDIO_MAIL_FROM est encore posée, la supprimer (le registre porte config.from), puis redéployer.

Lire une panne : le journal serveur dit Mail unavailable (<raison>): <correction>.

RaisonCe que ça veut direOù corriger
not-configuredRESEND_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
rejectedResend refuse la clé (révoquée ou remplacée)Resend, puis l'intégration Resend dans Vercel ; redéployer
forbiddenResend refuse l'opération (domaine non vérifié, droits de la clé)Resend, domaines et clé
rate-limitedquota Resend atteintattendre

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.

  1. Dans Vercel, Integrations, Resend : vérifier que le projet d'Orbit est connecté pour Production, et que RESEND_API_KEY figure dans Settings, Environment Variables.
  2. Si la clé est révoquée : en régénérer une depuis l'intégration (ou chez Resend, puis la reconnecter).
  3. 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 VercelUpstash ; les limites passent en mémoire 30 s après une panne d'Upstash, puis réessaient
Partout ailleursla 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) :

VariableValeurSecret
DATAFAST_WEBSITE_IDl'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_WEBSITEfacultatif : le domaine suivi ; vide, l'hôte de ORBIT_PUBLIC_URL puis de NEXTAUTH_URLnon

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.