Documentation J+SERVICES Guides Référence API

Contrat API — Capacités du déploiement

Route publique

Cette route permet à la PWA et aux surfaces en marque blanche de savoir quelles parties de l’interface afficher avant connexion. La réponse ne contient ni secret, ni clé, ni donnée client.

Artefact public de licence du nœud

Cette route sert le backend PWA du partenaire quand il configure PWA_LICENSE_URL. L’artefact ne contient pas de secret : il contient un payload public et sa signature Ed25519. Un client doit vérifier la signature avec la clé publique du master avant d’en déduire des droits.

Réponse

Exemple fictif pour un nœud partenaire VPN :

{
  "success": true,
  "data": {
    "role": "node",
    "api_version": "2.9.3",
    "build": "a1b2c3d",
    "modules": {
      "vpn": true,
      "radius": false,
      "tiketmomo": false,
      "pwa": true
    },
    "features": {
      "vpn_sales": true,
      "tiketmomo_store": false,
      "radius_hotspot": false,
      "radius_pppoe": false
    },
    "licence": {
      "status": "valid",
      "expires_at": "2026-10-05T12:00:00.000Z",
      "service_expires_at": {
        "vpn": "2027-10-01T00:00:00.000Z",
        "pwa": "2027-10-01T00:00:00.000Z"
      }
    }
  }
}

En mode master, licence.status vaut not_applicable.

Règles d’affichage PWA

La PWA doit afficher uniquement les modules et fonctionnalités dont la valeur est true. Elle ne doit pas déduire TiketMOMO, RADIUS ou la vente VPN à partir du nom du partenaire, du domaine ou d’une ancienne configuration locale.

features.vpn_sales vaut true seulement si le module VPN est disponible, si au moins un provider de paiement actif sait vendre des licences et si le catalogue local contient une offre VPN active. Le champ pwa est contrôlé par la licence, même s’il n’ajoute pas de tables de schéma.

Cycle de vie côté nœud

En mode node, le backend télécharge périodiquement son artefact depuis le master via GET /api/v1/silo/license avec le jeton de nœud Tier-2, vérifie la signature avec la clé publique du master, puis écrit le fichier local de façon atomique à SILO_LICENSE_ARTIFACT_PATH.

La route /api/v1/capabilities ne contacte jamais le master : elle lit uniquement l’artefact local et utilise son cache court. Quand un nouvel artefact est écrit, ce cache est invalidé.

Si le master est temporairement injoignable, le dernier artefact signé reste en place et la période de grâce éventuelle continue à s’appliquer. Si le master refuse le nœud (401 ou 403), l’ancien artefact est remplacé par un état non signé : les capacités deviennent non licenciées et /api/v1/capabilities/license répond 503.