@app-station/cli
v0.7.1
Published
CLI App Station pour lier un logiciel ou un module a AppStation/Registra ("aps init", "aps doctor", ...).
Readme
CLI officielle App Station : elle relie un depot de logiciel (ou un module
d'un logiciel existant) a votre compte App Station, puis recupere et
stocke localement la cle API Registra (X-Software-Api-Key) necessaire
pour verifier des licences depuis votre code.
Elle couvre tout le cycle de vie du developpeur : lier ou creer le projet, verifier que l'integration fonctionne, prouver cryptographiquement que le depot est bien celui declare, puis basculer vers la production des la soumission en review — sans jamais avoir besoin d'acceder a l'admin Registra.
Demarrage rapide
Node.js 18 ou superieur est requis.
# ponctuel, sans installation globale (recommande)
npx @app-station/cli@latest login
npx @app-station/cli@latest init
npx @app-station/cli@latest doctor
# ou installe globalement
npm install -g @app-station/cli
aps login
aps init
aps doctoraps init est interactif par defaut (il vous demande ce que vous voulez
faire, quel logiciel lier, etc.). Pour un usage script/CI, tous les choix
sont aussi disponibles en flags — voir la reference des commandes
ci-dessous.
Une fois lie, dans le code de votre logiciel :
# Prouver que ce depot est bien celui declare sur App Station
aps sign
aps verify appstation.manifest.signed.json
# Des que le logiciel/module est en review : basculer vers la production
aps fetch-key --productionCe que vous pouvez faire
aps login/aps logout— authentifier la CLI aupres d'App Station (navigateur, ou token pour la CI).aps init— lier ce depot a un logiciel/module App Station existant, ou en creer un, et ecrire la configuration Registra locale.aps doctor— verifier de bout en bout que la cle API resolue fonctionne reellement contre Registra.aps status— identite du lien local par defaut ;--remoteajoute le statut App Station et les releases,--secretsajoute la source des secrets.aps update— mettre a jour les metadonnees (nom, tagline, prix, essai) du logiciel/module depuis le terminal, sans passer par l'UI App Station.aps upgrade— mettre a jour la CLIapselle-meme vers la derniere version publiee sur npm.aps sign/aps verify— signer (HMAC-SHA256) et verifier un manifest prouvant la liaison depot ↔ App Station ↔ Registra, pour la soumission ou la CI.aps fetch-key— recuperer/rafraichir la cle Registra locale : environnement courant par defaut,--productionpour basculer le projet en production.aps release <file>— publier une release (upload de fichier) pour le logiciel/module lie.
Politique de version
@app-station/cli est concu pour etre installe globalement ou lance avec
npx — c'est un outil de developpeur, pas une dependance runtime de
votre logiciel. L'installer dans les dependances du projet est deconseille :
votre application finale n'a besoin que de appstation.conf.json et d'une
variable d'environnement (voir Ou sont stockees les donnees),
jamais de Node.js ni de la CLI elle-meme au runtime.
npx @app-station/cli@latest <commande> garantit toujours la derniere
version ; en installation globale, aps upgrade (ou npm update -g
@app-station/cli).
Reference des commandes
aps login
Authentifie la CLI aupres d'App Station et enregistre les identifiants localement (voir Ou sont stockees les donnees).
aps login [--token <token>] [--base-url <url>] [--dev] [--use-system-ca] [--non-interactive]| Flag | Description |
| --- | --- |
| --token <token> | Saute l'ouverture du navigateur : colle directement un token (genere dans App Station -> Parametres -> CLI). Equivalent a la variable APS_TOKEN. |
| --base-url <url> | URL de l'instance App Station a utiliser. Par defaut : https://app-station.neocode.ci. Equivalent a la variable APPSTATION_BASE_URL. |
| --dev | Raccourci pour pointer vers un environnement de test : utilise https://app-station.test par defaut et active automatiquement --use-system-ca. |
| --use-system-ca | Fait aussi confiance au magasin de certificats du systeme, en plus des CA racines integrees a Node — necessaire face a un certificat local auto-signe (Herd, Valet, mkcert...). Necessite Node 22+. |
| --non-interactive | N'affiche jamais de prompt ; echoue avec un message clair si une information manque (utile en CI). |
Sans --token, aps login ouvre votre navigateur par defaut : la CLI
demarre un petit serveur local, vous authentifie sur App Station, et recupere
le token via une redirection retour vers ce serveur — sans code a copier/coller.
Ce mecanisme est volontairement different d'un flow "device code" classique
(GitHub/Google/Docker) : App Station ne redirige jamais le token que vers un
callback strictement 127.0.0.1/localhost, ce qui le rend resistant au
phishing a distance — un attaquant ne peut pas relayer la redirection finale
vers sa propre machine, quel que soit le lien qu'il parvient a faire cliquer a
une victime. Contrepartie : ca ne fonctionne pas depuis une session SSH sans
redirection de port ; utilisez --token/APS_TOKEN dans ce cas.
aps logout
Supprime les identifiants stockes localement.
aps logoutaps init
Lie le depot courant a un logiciel ou un module App Station, puis ecrit la configuration Registra locale (cle API, URL de l'API, etc.).
aps init [--link | --create] [--type software|module] [--env development|production] \
[--software-id <id>] [--package-id <id>] [--parent-software-id <id>] \
[--name <name>] [--tagline <tagline>] [--force-link] [-y|--yes] [--non-interactive]| Flag | Description |
| --- | --- |
| --link | Lie le depot a un logiciel/module App Station existant (choix interactif ou via --software-id/--package-id). |
| --create | Cree un nouveau logiciel/module sur App Station puis lie le depot a celui-ci. |
| --type <type> | software (defaut) ou module. |
| --env <env> | development (defaut) ou production — determine quelle cle Registra est emise. |
| --software-id <id> | ID App Station du logiciel a lier (mode --link --type software). |
| --package-id <id> | ID App Station du module a lier (mode --link --type module). |
| --parent-software-id <id> | ID App Station du logiciel parent (mode --create --type module). |
| --name <name> | Nom du logiciel/module (mode --create). Detecte depuis package.json/composer.json si omis. |
| --tagline <tagline> | Description courte du logiciel (optionnel, mode --create). |
| --force-link | Force la liaison meme si ce logiciel/module est deja lie a un autre depot local. |
| -y, --yes | Ecrase appstation.conf.json existant sans confirmation. |
| --non-interactive | N'affiche jamais de prompt. |
Ecrit deux fichiers a la racine du depot :
appstation.conf.json— configuration non sensible (a versionner).appstation.conf.local.json— contient la cle API Registra et lesigningSecretde l'environnement en cours uniquement (secret, ajoute automatiquement au.gitignore). Un champenvironmentindique laquelle : ce fichier ne contient jamais dev et prod en meme temps — voiraps fetch-keypour le cas ou les deux existent a des moments differents.
aps doctor
Diagnostique la liaison App Station/Registra du depot courant : valide
appstation.conf.json, resout la cle API, puis effectue deux appels reels
contre l'API Registra pour confirmer qu'elle est acceptee.
aps doctor [--env development|production] [--non-interactive]--env force le diagnostic sur un environnement different de celui inscrit
dans appstation.conf.json (utile pour verifier une cle de production tout
en developpant en local). aps doctor exige alors que le champ
environment de appstation.conf.local.json corresponde exactement a
--env : sans aps fetch-key --production prealable, le
fichier contient encore l'identite dev, donc aps doctor --env production
echoue avec un message explicite plutot que de silencieusement tester la
mauvaise cle.
Si l'ancienne cle (avant une rotation faite cote Registra) est encore dans
sa periode de grace, aps doctor l'indique avec sa date d'expiration —
pensez alors a aps fetch-key pour passer a la nouvelle cle avant qu'elle
n'expire.
aps status
Etat en lecture seule du lien local App Station/Registra. Sans flag : identite locale uniquement (instance App Station, logiciel/module lie, environnement, fingerprint) — aucun appel reseau.
aps status [--remote] [--secrets]| Flag | Description |
| --- | --- |
| --remote | Ajoute le statut App Station courant (draft, pending_review, published, ...) et le nombre de releases deja publiees (non retirees). Seul cas avec appel API — utile pour verifier ou en est la review avant de lancer aps fetch-key --production : des pending_review, la cle de production recuperee devient reellement active cote Registra (avant ca, la commande reussit deja mais la cle n'est encore connue que d'App Station). |
| --secrets | Ajoute la source (jamais la valeur) de la cle API et du signingSecret — variable d'environnement ou appstation.conf.local.json. Signale aussi un fichier local desynchronise de appstation.conf.json (normalement seulement apres un echec partiel : aps init/aps fetch-key ecrivent toujours les deux fichiers ensemble). Utile pour deboguer "pourquoi ma variable d'environnement n'est pas prise en compte" sans lire le code. |
Pour verifier que les secrets fonctionnent reellement contre Registra, voir
aps doctor — aps status ne fait jamais d'appel a Registra.
aps update
Met a jour les metadonnees du logiciel/module lie via l'API App Station, sans passer par l'UI web.
aps update [--name <name>] [--tagline <tagline>] [--description <text>] \
[--price-per-day <xof>] [--lifetime-price <xof>] \
[--trial-period-days <n>] [--disable-trial] [--non-interactive]| Flag | Description |
| --- | --- |
| --name <name> | Nom, 120 caracteres max (software ou module). |
| --description <text> | Description, 10 000 caracteres max (software ou module). |
| --tagline <tagline> | Description courte, 180 caracteres max (software uniquement). |
| --price-per-day <xof> | Prix par jour en XOF (software uniquement). |
| --lifetime-price <xof> | Prix a vie en XOF (software uniquement). |
| --trial-period-days <n> | Active l'essai gratuit, duree entre 1 et 365 jours (software uniquement). |
| --disable-trial | Desactive l'essai gratuit (software uniquement). |
Seuls les champs passes en flag sont modifies (mise a jour partielle). Sur un
module, les flags marques "software uniquement" echouent avec un message
clair plutot que d'etre ignores silencieusement. Les limites de longueur/
plage ci-dessus sont verifiees par la CLI elle-meme, alignees sur le
formulaire App Station officiel et sur l'API /api/v1/publisher/... qu'elle
consomme — les trois appliquent desormais exactement les memes limites.
aps upgrade
Met a jour la CLI aps elle-meme (pas le logiciel/module lie) vers la
derniere version publiee sur npm. Detecte la version installee, compare a
npm registry, puis installe via le gestionnaire de paquets approprie
(npm par defaut ; pnpm/yarn/bun si detecte).
aps upgrade [--check]| Flag | Description |
| --- | --- |
| --check | Verifie seulement si une mise a jour est disponible, sans l'installer. |
Sans mise a jour disponible, la commande ne fait rien d'autre que
l'annoncer. Si vous utilisez npx @app-station/cli@latest, vous avez deja
toujours la derniere version — aps upgrade est surtout utile en
installation globale (npm install -g @app-station/cli).
aps sign
Genere un manifest signe (HMAC-SHA256) prouvant la liaison entre ce depot local, le logiciel/module App Station et l'environnement Registra. Le manifest ne contient jamais la cle API en clair, uniquement son empreinte SHA-256.
aps sign [--output <file>] # par defaut : appstation.manifest.signed.jsonSoumettez le fichier genere a App Station (dashboard editeur ou review).
aps verify <file>
Verifie un manifest signe : schema, signature HMAC-SHA256, fraicheur de
generation (30 jours par defaut). Code de sortie 0 si valide, 1 sinon.
aps verify appstation.manifest.signed.jsonNecessite le meme signingSecret que celui utilise pour signer :
appstation.conf.local.json du depot concerne, ou la variable
APS_SIGNING_SECRET (utile en CI ou pour une verification hors du depot
d'origine, par ex. cote App Station).
aps fetch-key
Recupere/rafraichit la cle Registra locale — fusionne ce qui etait
aps rotate-key, aps release-key et aps promote.
aps fetch-key [--production] [--non-interactive]Sans --production : rafraichit appstation.conf.local.json (cle API +
signingSecret) pour l'environnement deja inscrit dans appstation.conf.json
— apres une rotation de cle faite cote Registra (admin, ne declenche pas la
rotation elle-meme).
Avec --production : bascule le projet en production, en un seul geste
— appstation.conf.json et appstation.conf.local.json passent tous
les deux a production (ces deux fichiers restent toujours coherents entre
eux : jamais l'un en dev et l'autre en prod). registra/init genere la cle
de production localement cote App Station des maintenant, quel que soit
le statut du logiciel/module — meme encore draft — sans jamais
contacter Registra a cet instant : Registra ne connaitra reellement cette
cle qu'a partir de la soumission en review (pending_review), sans
attendre l'approbation admin (published). Tant que ce n'est pas le cas,
aps fetch-key --production vous le signale (avertissement, pas une
erreur), et aps doctor --env production confirmera la meme
chose sans faire echouer le diagnostic.
L'interet de --production : la release qui sert a passer la review est
forcement buildee avec la cle dev (seule disponible jusqu'ici a ce
stade). Sans aps fetch-key --production, cette meme release reste ensuite
servie aux vrais clients apres approbation — alors qu'elle n'a jamais ete
testee avec la cle prod. Ca permet de recuperer la vraie cle de production,
rebuilder, et publier la bonne release avant que quiconque ne
l'installe.
Pour revenir en developpement ensuite, aps fetch-key (sans --production)
ne suffit plus une fois le projet bascule — il rafraichit toujours
l'environnement courant du projet. Utilisez aps init --env development
pour re-lier explicitement le depot en dev.
En CI/CD, mettez a jour la valeur de REGISTRA_API_KEY avec la nouvelle cle
de production apres la bascule (meme nom de variable qu'avant, seule la
valeur change).
Flow recommande, du premier lien du depot jusqu'a la production :
aps init(environnementdevelopment) — build et testez avec la cle dev.- Soumettez le logiciel/module en review (aujourd'hui via l'UI web App Station — pas encore pilotable depuis la CLI).
aps status --remote— verifiez que le statut est bien passe apending_review.aps fetch-key --production— basculez le projet en production et recuperez la vraie cle Registra, puis rebuildez votre logiciel avec.aps release <file>— publiez ce binaire rebuilde (celui qui utilise la vraie cle prod), pas celui qui a servi a passer la review.
aps release <file>
Publie une release (upload du fichier <file>) pour le logiciel/module lie —
memes regles de validation que le formulaire App Station officiel.
aps release ./dist/mon-logiciel-1.4.0.exe --release-version 1.4.0 \
[--channel stable|beta|rc|nightly] [--platform windows|macos|linux|android|ios|universal] \
[--notes <text>] [--min-software-version <version>] [--max-software-version <version>]| Flag | Description |
| --- | --- |
| --release-version <version> | Requis. Semver strict (ex. 1.4.0, 2.0.0-beta.1), 20 caracteres max. Pas --version (reserve au numero de version de la CLI elle-meme, collision avec -V/--version de Commander). |
| --channel <channel> | stable (defaut), beta, rc ou nightly. |
| --platform <platform> | windows, macos, linux, android, ios ou universal. Omis = archive generique. |
| --notes <text> | Notes de version (markdown), 10 000 caracteres max. |
| --min-software-version / --max-software-version | Compatibilite avec le logiciel hote (module uniquement). |
Si aucun signingSecret n'existe encore pour ce logiciel, la release est
publiee sans signature (signature: null) — elle est calculee
retroactivement des que possible, pas une erreur a corriger.
Ou sont stockees les donnees
| Donnee | Emplacement | Versionne ? |
| --- | --- | --- |
| Session (token App Station) | ~/.config/app-station/credentials.json (Linux/macOS) ou %APPDATA%\app-station\credentials.json (Windows), permissions 0600 | Non — local a la machine |
| Config du projet | appstation.conf.json a la racine du depot | Oui |
| Cle API Registra + signingSecret | appstation.conf.local.json a la racine du depot | Non — ajoute au .gitignore par aps init |
Contribuer
Voir CONTRIBUTING.md pour le developpement local et le processus de publication.
