Um plugin hospedado no Novus CRM pode ser publicado sem abrir a tela de versões. Os endpoints v1/plugins da API pública recebem o pacote e publicam a versão, e a CLI novus-plugin empacota a pasta e chama esses endpoints por você.
A CLI (@novuscrm/plugin) e o SDK do protocolo (@novuscrm/wlclient) não estão publicados no npm. Publique pela API com curl, como mostra API pública de publicação.

Credenciais

A publicação usa a chave da API pública da conta, a mesma de Autenticação. Na pipeline, cadastre as duas primeiras como variáveis secretas. Nunca grave a chave no repositório.
A API de publicação não aprova permissão nova. Se a versão pede qualquer permissão que a versão ativa não tinha aprovada, a publicação é recusada com 409, e um administrador precisa aprovar na tela. Isso inclui a primeira publicação de um plugin que declara alguma permissão. Faça a primeira publicação pela tela e deixe a pipeline cuidar das seguintes.

CLI

O template vanilla fala com o host direto por postMessage, sem biblioteca. O react-vite é um projeto Vite com React. No projeto com Vite, novus-plugin dev só orienta a rodar npm run dev, porque o servidor do Vite já cuida do CORS e do recarregamento. validar, pack e publish usam as mesmas extensões, limites e mensagens descritos em Estrutura do pacote, então um pacote aceito pela CLI é aceito pelo Novus CRM. O zip é determinístico: a mesma pasta gera o mesmo arquivo, e reenviar sem mudança devolve a versão que já existe. publish segue estes passos e para no primeiro que falhar:
1

Valida e empacota a pasta

Os erros saem todos de uma vez, e nada é enviado.
2

Envia o pacote

Mostra o número da versão criada e os avisos de possível credencial nos arquivos.
3

Publica, com --ativar

Sem --ativar, a versão fica enviada e a versão ativa não muda. Se a versão pede permissão nova, a CLI lista as permissões, mostra o link de aprovação e termina com erro.
4

Mostra os endereços

A URL ativa, https://{slug}.novusplugin.com/, e a de pré-visualização da versão enviada.
O --plugin recebe o id do plugin no Novus CRM. Para descobrir o id, liste os plugins da conta com GET v1/plugins.

Pipeline de CI

Cadastre NOVUS_CHAVE_API, NOVUS_AMBIENTE e NOVUS_PLUGIN_ID como variáveis secretas da pipeline. Gere a pasta dist/ com o build do seu projeto e crie o pacote a partir do conteúdo dessa pasta:
Use os comandos da API pública de publicação na etapa seguinte. O primeiro envia o pacote. O segundo publica a versão recebida. Com curl -f, a etapa falha se a API recusar o envio ou a publicação.

API pública de publicação

Os endpoints usam os mesmos cabeçalhos de toda a API pública e só enxergam os plugins da conta da chave. A versão volta com Numero, VersaoDoManifesto, Situacao, Ativa, PermissoesNovas, Avisos e UrlDePreVisualizacao, entre outros campos.
Os erros seguem o formato ProblemDetails, com a lista completa de mensagens em erros:
409
Cada item de permissoesNovas tem o formato tipo:valor: host:, dominio:, segredo: ou superficie:. Toda operação feita pela API fica na auditoria da conta, marcada como vinda da API pública.

SDK do protocolo

Enquanto @novuscrm/wlclient não sai no npm, você tem duas opções:
  • Protocolo direto. O plugin fala com o host por postMessage e MessageChannel, sem biblioteca. É o que fazem o template vanilla e o repositório de exemplo.
  • SDK servido pelo Novus CRM. Baixe o script, inclua-o no projeto e use o objeto global WlExtension, como nos exemplos de Plugins.
O arquivo está em https://app.novuscrm.com.br/libs/wlclient.js. Inclua-o no pacote do plugin. O Studio recusa scripts carregados de outro domínio.