Aller au contenu

API

Routes HTTP du module de licences, fonctions serveur importables, connecteurs et sous-entrée de l'espace client.

Sous-entrées du paquet

Sous-entréeContenu
.Le manifeste, register(), createTables, dropTables, migrations.
./clientLa page d'admin, chargée par le manifeste client du projet.
./accountLa section « Projets » de l'espace client (icon, Component et Summary), chargée par app/.fraza/account.server.js.
./serverLes fonctions serveur pour le projet et les autres modules.
./verdaccioLe plugin Verdaccio, d'authentification et middleware, en CommonJS. Voir Le plugin Verdaccio.

Fonctions serveur

import {
  registerLicenseConnector, getLicenseConnector, getActiveConnector, listLicenseConnectors,
  getLicenseBySubscriptionId, listLicenseProjects,
  accountOverview, hasAccountLicense, getAccountLicenseSummary,
  LICENSE_STATUSES, PROJECT_STATUSES, CREDENTIAL_STATES, USABLE_LICENSE_STATUSES,
  getLicensesConfig, isLicensesEnabled,
} from '@fraza-pro/module-licenses/server';
FonctionRôle
registerLicenseConnector(connector, { source })Enregistre un connecteur. Voir Écrire son propre connecteur.
getLicenseConnector(key), getActiveConnector()Un connecteur par sa clé, ou celui de FRAZA_MODULE_LICENSES_CONNECTOR. null s'il n'existe pas.
listLicenseConnectors(){ key, label, source } de chaque connecteur.
getLicenseBySubscriptionId(id)La licence d'un abonnement de Facturation, ou null.
listLicenseProjects(licenseId)Les projets d'une licence, chacun avec son identifiant en service, sans clé ni hachage.
accountOverview(billingClient){ licenses } d'une fiche de facturation, révoquées exceptées, comme les montre la section « Projets » : offre, statut, quota, nombre de projets actifs, abonnement, descente programmée, et projets (sans clé ni hachage, des jours plutôt que des instants). { licenses: [] } pour null.
hasAccountLicense(billingClient)true si la fiche a une licence non révoquée : le test de visibilité de la section.
getAccountLicenseSummary(userId)La licence principale d'un compte, en quelques chiffres : { id, plan_name, status, quota, active_count, grace_ends_on }, ou null sans fiche de facturation ni licence non révoquée. La fiche est celle liée au compte. Une licence active ou en retard passe avant les autres, puis la plus récente. quota vaut null sans limite ; grace_ends_on est un jour civil, renseigné en retard de paiement.

Un composant serveur appelle ces fonctions directement, jamais les routes /za/api/* du site.

Routes HTTP

Toutes sous /za/api. Les réponses d'erreur suivent le format du core : { error, code, message }, avec un message en français.

Espace client

auth: 'user'. Chaque route résout la session en fiche de facturation liée au compte : une licence ou un projet d'un autre client répond 404.

MéthodeCheminRôle
GET/licenses/account/overviewLes licences du compte, révoquées exceptées, avec leurs projets et l'identifiant de chacun (external_id, fz-… avec Verdaccio). Jamais la clé, ni de lignes .npmrc.
POST/licenses/account/projectsCrée un projet. Corps { license_id, name }. Rend { project, credential: { externalId, secret, instructions: { npmrc, note } } }, le seul moment où la clé paraît : secret est la clé fzk_…, npmrc les lignes à coller dans le .npmrc du projet.
DELETE/licenses/account/projects/:idRetire un projet.
POST/licenses/account/projects/:id/regenerateRégénère la clé. Rend { credential }, de même forme, la nouvelle clé montrée une fois. L'ancienne est refusée tout de suite.

Registre

MéthodeCheminRôle
POST/licenses/registry/authenticateLa question du plugin Verdaccio. Voir La route que le plugin appelle.

Admin

MéthodeCheminPermissionRôle
GET/licenses/admin/configlicenses.viewLe connecteur choisi, les connecteurs enregistrés, l'adresse du registre, la présence du secret.
GET/licenses/admin/licenseslicenses.viewListe paginée. Paramètres : status, search, page, limit, sortBy (client, status, projects, created, updated), sortOrder. Rend aussi stats.
GET/licenses/admin/licenses/:idlicenses.viewLa licence, ses projets avec leur état de synchronisation, son historique.
POST/licenses/admin/licenses/:id/revokelicenses.manageRévoque une licence suspendue.
POST/licenses/admin/projects/:id/:actionlicenses.managesuspend, restore, revoke ou regenerate. Une clé régénérée ici n'est pas rendue.
POST/licenses/admin/jobs/:name/runlicenses.manageLance licenses-sync ou licenses-maintenance tout de suite.
GET/licenses/admin/planslicenses.viewChaque offre de Facturation et ce qu'elle donne.
PUT/licenses/admin/plans/:planIdlicenses.manage{ granted: true, project_quota, fair_use_alert }, une valeur vide valant illimité ou aucune alerte, ou { granted: false }.

Codes d'erreur

CodeStatutSens
invalid_name400Nom de projet vide ou de plus de 100 caractères.
license_not_found, project_not_found404Inexistant, ou hors de la portée du compte.
license_inactive409La licence n'est ni active ni grace.
quota_reached409Le quota de l'offre est atteint.
project_revoked, project_not_active, project_not_suspended409L'action ne s'applique pas au statut du projet.
license_not_suspended409Seule une licence suspendue se révoque.
connector_unavailable503Aucun connecteur ne porte la clé de FRAZA_MODULE_LICENSES_CONNECTOR.
plan_not_found404Offre inconnue.
plan_has_licenses409Des licences utilisent l'offre : changer son quota plutôt que la retirer.
invalid_quota400Le quota ou le seuil n'est pas un entier positif.

Sur cette page