@sonenta/cli
Une ligne de commande légère et scriptable pour tout ce que vous feriez autrement dans le dashboard : importer un projet i18next existant, pousser et tirer des traductions, comparer la CI au distant, publier une release CDN, et faire un snapshot des bundles pour un build offline-first. MIT, sur npm.
Installation
npm uniquement, il n'y a pas de formule Homebrew pour la CLI. Nécessite Node 18 ou plus récent, et installe la commande sonenta.
terminal
1# installer une fois, globalement2npm i -g @sonenta/cli 4# ou exécuter sans installer5npx @sonenta/cli <command>
S'authentifier
Chaque appel envoie Authorization: ApiKey <prefix>.<secret> au scope mcp:*. Connectez-vous une fois pour stocker la clé dans ~/.sonenta/credentials, ou définissez SONENTA_TOKEN en CI.
terminal
1# interactif, stocke la clé par hôte dans ~/.sonenta/credentials (0600)2sonenta login --host https://api.sonenta.dev --token snt_live_<prefix>.<secret>3Logged in as user@example.com (Acme Inc) on https://api.sonenta.dev. 5# CI, sans invite, la clé est lue depuis l'environnement6export SONENTA_TOKEN=snt_live_<prefix>.<secret>7sonenta push
Ordre de résolution, le premier l'emporte : la variable d'environnement SONENTA_TOKEN, puis ~/.sonenta/credentials pour l'hôte actif. Générez la clé sous Org Settings → API Keys au scope mcp:*.
Configurer
sonenta init écrit un sonenta.config.json dans votre dépôt (résolu en remontant depuis le répertoire courant). Les identifiants vivent à part, par utilisateur, et ne sont jamais committés.
sonenta.config.json
1# committé dans votre dépôt, aucun secret ici2{3 "host": "https://api.sonenta.dev",4 "project_uuid": "<project_uuid>",5 "version_slug": "main"6}
~/.sonenta/credentials
1# ~/.sonenta/credentials, mode 0600, par utilisateur, ne jamais committer2{ "default": "https://api.sonenta.dev",3 "hosts": {4 "https://api.sonenta.dev": { "api_key": "snt_live_<prefix>.<secret>" }5 } }
version_slug vaut main par défaut. Gardez la clé API hors du sonenta.config.json, elle n'a sa place que dans le fichier d'identifiants ou dans SONENTA_TOKEN.
Commandes
Regroupées par usage, configurer l'authentification et la config, inspecter un projet, ou synchroniser les traductions. Chaque commande passe par la surface MCP et respecte sonenta.config.json.
Auth & config
sonenta login Stocker une clé API pour un hôte. Options
-
--host <url> Hôte API contre lequel s'authentifier. -
--token <key> Passer la clé sans invite plutôt qu'au prompt. -
--email <email> cmd_login_flag_email -
--default cmd_login_flag_default
Exemple
sonenta login --host https://api.sonenta.dev --token snt_live_<prefix>.<secret> sonenta logout Supprimer les identifiants stockés d'un hôte. sonenta whoami Afficher l'hôte actif et une clé masquée. sonenta init Générer sonenta.config.json pour un projet. Options
-
--project <uuid> UUID du projet à écrire dans la config (obligatoire). -
--version <slug> Slug de version à cibler (défaut main). -
--force Écraser un fichier de config existant.
Exemple
sonenta init --project <uuid> --version main Inspecter
sonenta projects list Lister les projets accessibles à votre clé.
Exemple
sonenta projects list sonenta keys list Lister les clés sous la forme namespace_slug/key_name. Options
-
--namespace <slug> Restreindre à un namespace.
Exemple
sonenta keys list --namespace common sonenta status Comparer votre locales/ local au distant. Options
-
--language <code> Limiter la comparaison à une langue. -
--namespace <slug> Limiter la comparaison à un namespace. -
--src <dir> Répertoire source (défaut locales).
Exemple
sonenta status sonenta missing Lister les clés manquantes détectées à l'exécution. Options
-
--language <code> Filtrer par langue. -
--namespace <slug> Filtrer par namespace. -
--limit <n> Plafonner le nombre de lignes.
Exemple
sonenta missing --limit 50 Import & synchronisation
sonenta import <files...> Import i18next en une passe, imbriqué ou plat ; crée les clés, met à jour les traductions, idempotent. Options
-
--dry-run Prévisualisation seule ; n'envoie rien. -
--status <draft|translated> Statut entrant (défaut translated). -
--language <code> Forcer la langue au lieu de la déduire du chemin. -
--namespace <slug> Forcer le namespace (obligatoire pour un <lang>.json nu). -
--version <slug> Cibler une version non par défaut.
Exemple
sonenta import locales/fr/common.json sonenta push Pousser tout l'arbre locales/ local en un seul appel d'import. Options
-
--src <dir> Répertoire source (défaut locales). -
--dry-run Prévisualisation seule ; n'envoie rien. -
--status <state> Statut entrant (défaut translated).
Exemple
sonenta push --dry-run sonenta pull Écrire les traductions distantes dans locales/<lang>/<namespace>.json (plat). Options
-
--language <code> Limiter à une langue. -
--namespace <slug> Limiter à un namespace. -
--dest <dir> Répertoire de destination (défaut locales).
Exemple
sonenta pull --language fr sonenta export Exporter en JSON i18next, plat par défaut, --nested pour des arbres. Options
-
--nested Émettre des arbres imbriqués au lieu de clés plates. -
--out <dir> Écrire des fichiers dans un répertoire plutôt que sur stdout.
Exemple
sonenta export --nested --out ./dump sonenta releases publish Déclencher une release CDN ; les bundles publiés sont servis à vos apps depuis le CDN. Options
-
--version <slug> Version à publier (défaut main). -
--dry-run Prévisualisation seule ; ne publie rien.
Exemple
sonenta releases publish sonenta snapshot Récupérer les bundles CDN publics dans un module de build pour le fallback offline-first du SDK. Options
-
--format <ts|json> Format de sortie : ts (défaut) ou json. -
--out <file> Écrire dans un fichier plutôt que sur stdout. -
--cdn <base> Base CDN (défaut https://cdn.sonenta.com).
Exemple
sonenta snapshot --out src/sonenta-bundles.ts Chaque commande accepte aussi --host <url> pour surcharger l'hôte API configuré le temps d'une exécution.