Cas d’usage
Migration sandbox → production (sk_test_* vers sk_live_*)
Bascule contrôlée des clés API et données métier
Scell.io expose deux environnements isolés sur le même domaine `api.scell.io`. Le préfixe de la clé API détermine la base de données utilisée : `sk_test_*` / `pk_test_*` → DB sandbox (`pgsql_sandbox`), `sk_live_*` / `pk_live_*` → DB production (`pgsql`). Aucun appel n'est facturé en sandbox, les factures sandbox ne sont PAS conformes ISCA (volontairement). Workflow de bascule : (1) tester intégration complète en sandbox, (2) générer la clé live depuis le dashboard, (3) déployer la nouvelle clé via secret manager (jamais en code), (4) lancer un smoke test sur 1 facture live, (5) bascule progressive du trafic. Les webhooks sandbox et production utilisent des secrets différents.
À retenir
- Même domaine `api.scell.io`, routage via préfixe de clé
- `sk_test_*` → DB sandbox, `sk_live_*` → DB production
- Sandbox : factures non scellées fiscalement, balance fictive, pas de facturation Scell.io
- Production : scellement fiscal actif, balance réelle, facturation Scell.io
- Webhooks sandbox et production indépendants
- Migration des clés via secret manager (Vault, AWS Secrets Manager)
Exemple de code
// lib/scell.ts — un seul client, clé injectée par environnement
import { ScellClient } from '@scell/sdk';
const apiKey = process.env.SCELL_SECRET_KEY!;
if (!/^sk_(test|live)_/.test(apiKey)) {
throw new Error('Invalid SCELL_SECRET_KEY format');
}
const environment = apiKey.startsWith('sk_live_') ? 'production' : 'sandbox';
console.log(`[scell] running in ${environment} mode`);
export const scell = new ScellClient({ apiKey });
// Smoke test post-deploy live (CI)
if (environment === 'production' && process.env.RUN_SMOKE === '1') {
const ping = await scell.health.check();
if (!ping.ok) throw new Error('Smoke test failed');
}