Pular para o conteúdo

Publicação de Plugins

Depois de criar um plugin, você pode publicá-lo no EmDash Marketplace para que outros sites possam instalá-lo a partir do painel administrativo.

Antes de publicar, certifique-se de que seu plugin:

  • Possui um package.json válido com a exportação "." apontando para a entrada do seu plugin
  • Usa definePlugin() com um id único e uma version semver válida
  • Declara suas capabilities (quais APIs ele precisa acessar)

Plugins publicados são distribuídos como arquivos .tar.gz contendo:

ArquivoObrigatórioDescrição
manifest.jsonSimMetadados do plugin extraídos de definePlugin()
backend.jsNãoCódigo do sandbox empacotado (módulo ES autocontido)
admin.jsNãoCódigo da interface administrativa empacotado
README.mdNãoDocumentação do plugin
icon.pngNãoÍcone do plugin (PNG 256x256)
screenshots/NãoAté 5 capturas de tela (PNG/JPEG, máx. 1920x1080)

O manifest.json é gerado automaticamente a partir da sua chamada definePlugin(). Ele contém o ID do plugin, versão, capacidades, nomes de hooks, nomes de rotas e configuração administrativa — mas nenhum código executável.

O comando emdash plugin bundle produz um arquivo tarball a partir do código-fonte do seu plugin:

Terminal window
cd packages/plugins/my-plugin
emdash plugin bundle

Ele irá:

  1. Ler seu package.json para encontrar os pontos de entrada
  2. Construir a entrada principal com tsdown para extrair o manifesto
  3. Empacotar backend.js (minificado, tree-shaken, autocontido)
  4. Empacotar admin.js se existir uma exportação "./admin"
  5. Coletar recursos (README, ícone, capturas de tela)
  6. Validar o pacote (limites de tamanho, sem built-ins do Node.js no backend)
  7. Escrever {id}-{version}.tar.gz em dist/

O comando bundle encontra seu código através das exportações do package.json:

json title="package.json"
{
"exports": {
".": { "import": "./dist/index.mjs" },
"./sandbox": { "import": "./dist/sandbox-entry.mjs" },
"./admin": { "import": "./dist/admin.mjs" }
}
}
ExportaçãoPropósitoConstruído como
"."Entrada principal — usada para extrair o manifestoExternals: emdash, @emdash-cms/*
"./sandbox"Código backend que executa no sandboxTotalmente autocontido (sem externals)
"./admin"Componentes da interface administrativaTotalmente autocontido

Se "./sandbox" estiver ausente, o comando procura por src/sandbox-entry.ts como fallback.

Terminal window
emdash plugin bundle [--dir <path>] [--outDir <path>]
FlagPadrãoDescrição
--dirDiretório atualDiretório do código-fonte do plugin
--outDir, -odistDiretório de saída para o tarball

O comando bundle verifica:

  • Limite de tamanho — O pacote total deve ter menos de 5MB
  • Sem built-ins do Node.js — backend.js não pode importar fs, path, child_process, etc. (o código do sandbox executa em um isolado V8, não no Node.js)
  • Dimensões do ícone — icon.png deve ser 256x256 (avisa se incorreto, ainda o inclui)
  • Limites de capturas de tela — Máx. 5 capturas, máx. 1920x1080

O comando emdash plugin publish faz upload do seu tarball para o marketplace:

Terminal window
emdash plugin publish

Ele encontrará o .tar.gz mais recente no seu diretório dist/ e o enviará. Você também pode especificar o tarball explicitamente ou construir antes de publicar:

Terminal window
# Explicit tarball path
emdash plugin publish --tarball dist/my-plugin-1.0.0.tar.gz
# Construir primeiro, depois publicar
emdash plugin publish --build

Na primeira vez que você publica, o CLI autentica você via GitHub:

  1. O CLI abre seu navegador para a página de autorização de dispositivo do GitHub
  2. Você insere o código exibido no seu terminal
  3. O GitHub emite um token de acesso
  4. O CLI o troca por um JWT do marketplace (armazenado em ~/.config/emdash/auth.json)

O token dura 30 dias. Após expirar, você será solicitado a reautenticar na próxima publicação.

Você também pode gerenciar a autenticação separadamente:

Terminal window
# Log in without publishing
emdash plugin login
# Sair (limpar token armazenado)
emdash plugin logout

Se o ID do seu plugin ainda não existir no marketplace, emdash plugin publish o registra automaticamente antes de enviar a primeira versão.

Cada versão publicada deve ter um número semver maior que a última. Você não pode sobrescrever ou republicar uma versão existente.

Cada versão publicada passa por uma auditoria de segurança automatizada. O marketplace escaneia seu backend.js e admin.js em busca de:

  • Padrões de exfiltração de dados
  • Coleta de credenciais via configurações
  • Código ofuscado
  • Abuso de recursos (mineração de criptomoeda, etc.)
  • Atividade de rede suspeita

A auditoria produz um veredito de aprovado, aviso ou reprovado, que é exibido na listagem do plugin no marketplace. Dependendo do nível de aplicação do marketplace, um veredito reprovado pode bloquear a publicação completamente.

Terminal window
emdash plugin publish [--tarball <path>] [--build] [--dir <path>] [--registry <url>]
FlagPadrãoDescrição
--tarballÚltimo .tar.gz em dist/Caminho explícito do tarball
--buildfalseExecutar emdash plugin bundle antes de publicar
--dirDiretório atualDiretório do plugin (usado com --build)
--registryhttps://marketplace.emdashcms.comURL do marketplace

Aqui está o ciclo típico de publicação:

Terminal window
# 1. Make your changes
# 2. Bump the version in definePlugin() and package.json
# 3. Bundle and publish in one step
emdash plugin publish --build

Ou se você preferir inspecionar o pacote primeiro:

Terminal window
# Build the tarball
emdash plugin bundle
# Verificar a saída
tar tzf dist/my-plugin-1.1.0.tar.gz
# Publicar
emdash plugin publish