Manifeste et autorisations

plugin.manifest.json indique à la ville qui vous êtes, où se trouve votre expérience et ce qu’elle peut demander. Nous approuvons une combinaison précise de version, d’entrée et d’autorisations. Toute modification exige une nouvelle approbation.

Exemple

plugin.manifest.json
{
  "schema": "zenclub.plugin/v1",
  "id": "my-garden",
  "name": "My garden",
  "description": "Tend a small garden at your own pace.",
  "coverLabel": "A small garden",
  "version": "1.0.0",
  "sdkProtocol": "zenclub.rpc/1",
  "hostApi": {"major": 1, "minMinor": 2},
  "entry": "https://my-garden.example/v1.0.0/",
  "permissions": ["lifecycle.report", "storage.read", "storage.write", "session.report"],
  "optionalPermissions": ["moments.create", "header.setActions"],
  "modes": ["watch", "manual"],
  "tags": ["garden", "slow"]
}

Champs

ChampRègle
schemaToujours zenclub.plugin/v1.
idDe 1 à 80 lettres, chiffres, points, tirets bas ou traits d’union ; commence par une lettre ou un chiffre. Ne change jamais.
name, description, coverLabelTexte brut de 2048 caractères maximum par champ. coverLabel est la courte légende de votre couverture.
versionVersion sémantique, par exemple 1.4.0 ou 1.5.0-beta.1. Elle doit correspondre à la version transmise à connect().
sdkProtocolToujours zenclub.rpc/1.
hostApiLa version minimale de l’API de l’hôte nécessaire, sous la forme {major, minMinor}. Demandez la version mineure la plus basse qui convient.
entryURL HTTPS absolue de votre page, sans nom d’utilisateur, mot de passe ni fragment. HTTP simple n’est accepté que sur localhost. L’origine doit être différente de celle de la plateforme.
permissionsCapacités indispensables au fonctionnement de votre expérience. Aucun doublon.
optionalPermissionsJusqu’à 32 capacités utilisées lorsqu’elles sont accordées. Ne répétez aucune capacité requise.
milestonesFacultatif : une clé fixe, une version de règle et un niveau maximal, que l’opérateur approuve séparément en même temps que la capacité de signalement.
modesUn ou plusieurs modes parmi watch, manual et listen. Vous ne pouvez signaler qu’un mode déclaré.
tagsJusqu’à 10 étiquettes de 32 caractères maximum chacune.

Capacités

Chaque méthode du SDK correspond à une capacité. Un appel non autorisé échoue avec FORBIDDEN avant de quitter votre cadre. Vérifiez d’abord les capacités facultatives avec sdk.supports(name).

CapacitéAPI de l’hôteUtilisation
lifecycle.report1.0Signaler le chargement, l’état prêt ou l’échec.
storage.read1.0Lire un emplacement de sauvegarde.
storage.write1.0Écrire dans un emplacement avec vérification de révision.
session.report1.0Signaler si la session est en cours, en pause ou terminée pour mesurer sa durée.
runs.finish1.0Enregistrer une partie terminée ou relancée avec jusqu’à 20 mesures numériques.
moments.create1.0Proposer au visiteur une image à conserver. La plateforme peut lui demander son accord.
achievements.request1.0Demander à la plateforme de vérifier et d’attribuer un badge.
counters.add1.2Ajouter une valeur à un total partagé défini par l’opérateur pour vous.
events.report1.2Signaler un événement nommé et bref, comme la fin d’un chapitre.
shares.request1.2Ouvrir le panneau de partage de la plateforme pour un badge ou votre expérience.
navigation.exit1.2Revenir discrètement à la page de détails de votre expérience.
display.immersive1.3Demander à la plateforme de masquer le cadre qui vous entoure.
header.setActions1.4Placer vos actions dans l’en-tête de la plateforme.
milestones.report1.6Signaler une décoration approuvée pour la ville personnelle à partir d’une sauvegarde confirmée, si la personne a activé l’enregistrement.

Valider avant de faire la demande

L’outil en ligne de commande effectue les mêmes vérifications que la plateforme et confirme la disponibilité de l’API de l’hôte demandée. La validation n’accorde aucune capacité ; seule une approbation le fait.

shell
npx zenclub-plugin validate plugin.manifest.json --host=https://zenclub.app

Versions de l’API de l’hôte

L’API de l’hôte actuelle est en version 1.6 et accepte les plugins qui demandent une version de 1.0 à 1.6. Demandez la version mineure la plus basse dont vous avez besoin et vérifiez les méthodes facultatives avec sdk.supports(). Pour recevoir la préférence sonore, exigez la version 1.5 ou ultérieure dans le manifeste et dans connect(). Les anciens plugins sans déclaration d’étape conservent les mêmes autorisations et le même contexte qu’auparavant.

Étapes de la ville personnelle

Déclarez milestones.report comme capacité facultative et ajoutez exactement une entrée milestones. La première version comporte huit clés fixes : homestead, pond, clouds, bamboo, tea, stream, bell et lotus. Chaque version de règle correspond à sa clé suivie de .1, avec maxTier: 2. L’approbation fixe cette combinaison, cette version, cette entrée et cette capacité. Une déclaration rédigée par le plugin ne donne jamais accès à la fonction.

plugin.manifest.json
{
  "hostApi": {"major": 1, "minMinor": 6},
  "optionalPermissions": ["milestones.report"],
  "milestones": [{"key": "tea", "ruleVersion": "tea.1", "maxTier": 2}]
}

Un plugin créé avec le SDK 0.9 peut conserver une version minimale antérieure lorsque le signalement est facultatif. Sur un hôte 1.0–1.5, sans approbation ou avec un stockage limité à l’appareil, le jeu doit rester jouable et le signalement doit être ignoré. Les approbations des anciens hôtes doivent omettre la nouvelle autorisation. Le signalement obligatoire des étapes nécessite la version 1.6 ; l’enregistrement ne doit jamais être requis pour jouer ou se connecter.