Empacotar e publicar

Nesta página

Assim que seu plugin sandbox funcionar, você pode publicá-lo no marketplace EmDash para que outros sites possam instalá-lo com um clique no painel administrativo. O fluxo de publicação é exclusivo para sandbox — plugins nativos são distribuídos via npm e não são empacotados em tarballs do marketplace.

Pré-requisitos

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

  • Possui um package.json com uma exportação "." (o descritor) e uma exportação "./sandbox" (a entrada do runtime).
  • Usa format: "standard" no descritor.
  • Possui um id único e uma version semver válida.
  • Declara suas capabilities e allowedHosts com precisão no descritor.

Formato do pacote

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

ArquivoObrigatórioDescrição
manifest.jsonSimMetadados do plugin extraídos do descritor e entrada sandbox
backend.jsSimCódigo sandbox empacotado (módulo ES autocontido)
admin.jsNãoCódigo UI admin empacotado (apenas se interações Block Kit fornecem JS)
README.mdNãoDocumentação do plugin
icon.pngNãoÍcone do plugin (PNG 256×256)
screenshots/NãoAté 5 capturas de tela (PNG/JPEG, máx. 1920×1080)

manifest.json é gerado automaticamente. Contém o id do plugin, versão, capabilities, hosts permitidos, nomes de hooks, nomes de rotas e configuração admin — mas nenhum código executável.

Construir um pacote

cd packages/plugins/my-plugin
emdash plugin bundle

Isso irá:

  1. Ler seu package.json para encontrar pontos de entrada.
  2. Construir a entrada do descritor para extrair id, versão, capabilities e configuração admin.
  3. Empacotar backend.js da exportação "./sandbox" — minificado, tree-shaken, totalmente autocontido.
  4. Empacotar admin.js se existir uma exportação "./admin".
  5. Coletar assets (README, ícone, capturas de tela).
  6. Validar o pacote (limites de tamanho, sem built-ins do Node.js em backend.js, verificações de capabilities).
  7. Escrever {id}-{version}.tar.gz em dist/.

Resolução de pontos de entrada

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

{
	"exports": {
		".": { "import": "./dist/index.mjs" },
		"./sandbox": { "import": "./dist/sandbox-entry.mjs" },
		"./admin": { "import": "./dist/admin.mjs" }
	}
}
ExportaçãoPropósitoConstruído como
"."Descritor — usado para extrair o manifestExternals: emdash, @emdash-cms/*
"./sandbox"Código runtime (hooks, routes) executado no sandboxTotalmente autocontido (sem externals)
"./admin"Componentes UI admin (apenas se você os fornecer)Totalmente autocontido

Se "./sandbox" estiver faltando, o comando procura por src/sandbox-entry.ts como alternativa. O empacotador mapeia caminhos dist de volta para a fonte automaticamente — se sua exportação "." aponta para ./dist/index.mjs, ele encontrará e construirá src/index.ts.

Opções

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

Validação

O comando bundle verifica:

  • Limite de tamanho — o pacote total deve ter menos de 5 MB.
  • Sem built-ins do Node.js em backend.js — código sandbox não pode importar fs, path, child_process, etc. Substitua-os por Web APIs ou mova a lógica para um plugin nativo.
  • Lista branca de capabilities — capabilities declaradas devem estar no conjunto conhecido (erros de digitação falham).
  • Nomes de capability obsoletos acionam avisos aqui e uma falha definitiva no momento da publicação.
  • network:request sem allowedHosts aciona um aviso (considere network:request:unrestricted se os hosts forem configurados pelo operador em runtime, ou liste os hosts explicitamente).
  • Dimensões do íconeicon.png deve ser 256×256 (avisa se estiver errado; ainda assim o inclui).
  • Limites de capturas de tela — máximo de 5 capturas de tela, máximo de 1920×1080.

Publicação

emdash plugin publish

Isso encontra o .tar.gz mais recente em dist/ e o carrega. Para ser explícito sobre o tarball ou para construir antes de publicar:

# Caminho de tarball explícito
emdash plugin publish --tarball dist/my-plugin-1.0.0.tar.gz

# Construir primeiro, depois publicar
emdash plugin publish --build

Autenticação

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

  1. A CLI abre a página de autorização de dispositivo do GitHub em seu navegador.
  2. Você insere o código exibido em seu terminal.
  3. O GitHub emite um token de acesso.
  4. A 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 autenticar novamente na próxima publicação.

Você pode gerenciar a autenticação separadamente:

emdash plugin login    # fazer login sem publicar
emdash plugin logout   # limpar token armazenado

Registro inicial

Se o id do seu plugin ainda não for conhecido pelo marketplace, emdash plugin publish o registra automaticamente antes de carregar a primeira versão.

Requisitos de versão

Cada versão publicada deve ter uma semver mais alta que a última. Você não pode sobrescrever ou republicar uma versão existente — aumente a versão em package.json e no descritor antes de publicar novamente.

Auditoria de segurança

Cada versão publicada passa por uma auditoria de segurança automatizada. A auditoria verifica 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 criptomoedas, etc.)
  • Atividade de rede suspeita

A auditoria produz um veredicto de pass, warn ou fail, exibido na listagem do marketplace do plugin. Dependendo do nível de aplicação do marketplace, um veredicto de fail pode bloquear completamente a publicação.

Opções

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

Fluxo completo

Ciclo de publicação típico:

# 1. Faça suas alterações
# 2. Aumente a versão em src/index.ts e package.json
# 3. Empacote e publique
emdash plugin publish --build

Se você quiser inspecionar o pacote primeiro:

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