Empaqueter et publier

Sur cette page

Une fois que votre plugin sandbox fonctionne, vous pouvez le publier sur le marketplace EmDash afin que d’autres sites puissent l’installer en un clic depuis le tableau de bord administrateur. Le flux de publication est réservé aux sandbox : les plugins natifs sont distribués via npm et ne sont pas empaquetés dans des tarballs du marketplace.

Prérequis

Avant de publier, assurez-vous que votre plugin :

  • Possède un package.json avec à la fois une exportation "." (le descripteur) et une exportation "./sandbox" (l’entrée runtime).
  • Utilise format: "standard" sur le descripteur.
  • A un id unique et une version semver valide.
  • Déclare ses capabilities et allowedHosts avec précision sur le descripteur.

Format du paquet

Les plugins publiés sont distribués sous forme de tarballs .tar.gz contenant :

FichierRequisDescription
manifest.jsonOuiMétadonnées du plugin extraites du descripteur et de l’entrée sandbox
backend.jsOuiCode sandbox empaqueté (module ES autonome)
admin.jsNonCode UI admin empaqueté (uniquement si les interactions Block Kit livrent du JS)
README.mdNonDocumentation du plugin
icon.pngNonIcône du plugin (PNG 256×256)
screenshots/NonJusqu’à 5 captures d’écran (PNG/JPEG, max 1920×1080)

manifest.json est généré automatiquement. Il contient l’id du plugin, la version, les capabilities, les hôtes autorisés, les noms des hooks, les noms des routes et la configuration admin — mais aucun code exécutable.

Construire un paquet

cd packages/plugins/my-plugin
emdash plugin bundle

Cela va :

  1. Lire votre package.json pour trouver les points d’entrée.
  2. Construire l’entrée du descripteur pour extraire l’id, la version, les capabilities et la configuration admin.
  3. Empaqueter backend.js depuis l’exportation "./sandbox" — minifié, tree-shaken, entièrement autonome.
  4. Empaqueter admin.js si une exportation "./admin" existe.
  5. Collecter les ressources (README, icône, captures d’écran).
  6. Valider le paquet (limites de taille, pas de built-ins Node.js dans backend.js, vérifications des capabilities).
  7. Écrire {id}-{version}.tar.gz dans dist/.

Résolution des points d’entrée

La commande bundle trouve votre code via les exportations de package.json :

{
	"exports": {
		".": { "import": "./dist/index.mjs" },
		"./sandbox": { "import": "./dist/sandbox-entry.mjs" },
		"./admin": { "import": "./dist/admin.mjs" }
	}
}
ExportationObjectifConstruit comme
"."Descripteur — utilisé pour extraire le manifestExternals : emdash, @emdash-cms/*
"./sandbox"Code runtime (hooks, routes) exécuté dans le sandboxEntièrement autonome (pas d’externals)
"./admin"Composants UI admin (uniquement si vous les livrez)Entièrement autonome

Si "./sandbox" est manquant, la commande recherche src/sandbox-entry.ts en repli. Le bundler mappe automatiquement les chemins dist vers la source — si votre exportation "." pointe vers ./dist/index.mjs, il trouvera et construira src/index.ts.

Options

emdash plugin bundle [--dir <path>] [--outDir <path>]
DrapeauPar défautDescription
--dirRépertoire courantRépertoire source du plugin
--outDir, -odistRépertoire de sortie pour le tarball

Validation

La commande bundle vérifie :

  • Limite de taille — le paquet total doit faire moins de 5 Mo.
  • Pas de built-ins Node.js dans backend.js — le code sandbox ne peut pas importer fs, path, child_process, etc. Remplacez-les par des Web APIs ou déplacez la logique vers un plugin natif.
  • Liste blanche des capabilities — les capabilities déclarées doivent être dans l’ensemble connu (les fautes de frappe échouent).
  • Noms de capability obsolètes déclenchent des avertissements ici et un échec dur au moment de la publication.
  • network:request sans allowedHosts déclenche un avertissement (envisagez network:request:unrestricted si les hôtes sont configurés par l’opérateur au runtime, ou listez les hôtes explicitement).
  • Dimensions de l’icôneicon.png devrait être 256×256 (avertit si incorrect ; l’inclut quand même).
  • Limites des captures d’écran — max 5 captures d’écran, max 1920×1080.

Publication

emdash plugin publish

Cela trouve le .tar.gz le plus récent dans dist/ et le télécharge. Pour être explicite sur le tarball ou pour construire avant de publier :

# Chemin de tarball explicite
emdash plugin publish --tarball dist/my-plugin-1.0.0.tar.gz

# Construire d'abord, puis publier
emdash plugin publish --build

Authentification

La première fois que vous publiez, la CLI vous authentifie via GitHub :

  1. La CLI ouvre la page d’autorisation de périphérique GitHub dans votre navigateur.
  2. Vous entrez le code affiché dans votre terminal.
  3. GitHub émet un jeton d’accès.
  4. La CLI l’échange contre un JWT marketplace (stocké dans ~/.config/emdash/auth.json).

Le jeton dure 30 jours. Après son expiration, vous serez invité à vous réauthentifier lors de la prochaine publication.

Vous pouvez gérer l’authentification séparément :

emdash plugin login    # se connecter sans publier
emdash plugin logout   # effacer le jeton stocké

Enregistrement initial

Si votre id de plugin n’est pas encore connu du marketplace, emdash plugin publish l’enregistre automatiquement avant de télécharger la première version.

Exigences de version

Chaque version publiée doit avoir une semver plus élevée que la dernière. Vous ne pouvez pas écraser ou republier une version existante — augmentez la version dans package.json et le descripteur avant de republier.

Audit de sécurité

Chaque version publiée passe par un audit de sécurité automatisé. L’audit analyse backend.js et admin.js pour :

  • Modèles d’exfiltration de données
  • Récupération de credentials via les paramètres
  • Code obfusqué
  • Abus de ressources (minage de crypto, etc.)
  • Activité réseau suspecte

L’audit produit un verdict de pass, warn ou fail, affiché sur la liste du marketplace du plugin. Selon le niveau d’application du marketplace, un verdict de fail peut bloquer complètement la publication.

Options

emdash plugin publish [--tarball <path>] [--build] [--dir <path>] [--registry <url>]
DrapeauPar défautDescription
--tarballDernier .tar.gz dans dist/Chemin de tarball explicite
--buildfalseExécuter emdash plugin bundle avant de publier
--dirRépertoire courantRépertoire du plugin (utilisé avec --build)
--registryhttps://marketplace.emdashcms.comURL du marketplace

Workflow complet

Cycle de publication typique :

# 1. Faites vos modifications
# 2. Augmentez la version dans src/index.ts et package.json
# 3. Empaquetez et publiez
emdash plugin publish --build

Si vous voulez inspecter le paquet d’abord :

emdash plugin bundle
tar tzf dist/my-plugin-1.1.0.tar.gz
emdash plugin publish