Skip to main content
O CNP (Custom Node Protocol) é o protocolo HTTP usado pelo Triglit para se comunicar com seus servidores e executar custom nodes. Ele define como o Triglit envia requisições e como você deve responder.

O que é o CNP?

O CNP é um protocolo simples baseado em HTTP/JSON que permite:
  • ✅ Executar lógica customizada nos seus próprios servidores
  • ✅ Receber dados do workflow (inputs, config, metadata)
  • ✅ Retornar resultados para o workflow
  • ✅ Autenticação segura via HMAC SHA256
  • ✅ Suporte a heartbeat para verificação de saúde

Por que usar CNP?

Execute qualquer lógica nos seus servidores, sem limitações do Triglit.
Conecte workflows diretamente com sua infraestrutura existente.
Autenticação via HMAC garante que apenas o Triglit pode chamar seus endpoints.

Como Funciona

Fluxo de Execução

  1. Workflow executa: Um workflow chega em um custom node
  2. Triglit prepara requisição: Monta payload e gera assinatura HMAC
  3. Requisição HTTP: POST para seu endpoint CNP
  4. Você valida e processa: Valida assinatura e executa lógica
  5. Resposta: Retorna resultado ou erro
  6. Workflow continua: Triglit usa o resultado para continuar o workflow

Configuração

1. Configurar Endpoint no Triglit

No painel do Triglit, configure seu endpoint CNP:
  1. Acesse ConfiguraçõesCNP
  2. Configure o Custom Nodes Endpoint: https://api.seudominio.com/triglit/cnp
  3. O secret será gerado automaticamente (ou você pode usar um existente)

2. Implementar Servidor CNP

Seu servidor deve expor um endpoint POST que aceita requisições CNP:

Estrutura da Requisição

Quando o Triglit executa um custom node, ele envia uma requisição POST com:

Headers

Body (Payload)

Campos do Payload

  • nodeType: Tipo do custom node sendo executado
  • runId: ID da execução (run) atual
  • tenantId: ID do tenant
  • subTenantId: ID do sub-tenant (opcional)
  • inputs: Dados de entrada do workflow (output do node anterior)
  • config: Configuração do node no workflow
  • metadata: Metadados da execução (timestamp, versão do node)

Estrutura da Resposta

Sucesso

Erro

Heartbeat

Autenticação HMAC

Como Funciona

  1. Triglit serializa o payload como JSON string
  2. Gera assinatura HMAC SHA256 usando o secret do tenant
  3. Envia no header X-Triglit-Signature no formato sha256=<base64>
  4. Você valida recalculando a assinatura e comparando (ou usando o SDK TypeScript)

Algoritmo de Validação

A assinatura é enviada no formato sha256=<base64>:
Formato da assinatura:
  • Algoritmo: HMAC SHA256
  • Encoding: Base64 (com prefixo sha256=)
  • Header: X-Triglit-Signature
  • Valor: String no formato sha256=<base64> (ex: sha256=a1b2c3d4e5f6...)
Sempre use comparação time-safe (timing-safe comparison) para validar assinaturas. Comparações normais podem ser vulneráveis a timing attacks.

Heartbeat

O Triglit pode enviar requisições de heartbeat para verificar se seu servidor está online:
Responda com:
Heartbeats não requerem processamento de lógica. Apenas valide a assinatura e retorne { status: "ok" }.

Timeout e Retries

Timeout

Cada custom node tem um timeout configurável (padrão: 30 segundos). Se seu servidor não responder dentro do timeout, o Triglit considera como falha.

Retries

O Triglit retenta automaticamente em caso de falha:
  • Máximo de tentativas: Configurável por node (padrão: 3)
  • Backoff: Exponencial entre tentativas
  • Falhas que disparam retry: Timeout, erro 5xx, erro de rede

Boas Práticas

Sempre valide a assinatura antes de processar. Use comparação time-safe.
Torne seus handlers idempotentes usando runId para evitar processamento duplicado.
Retorne rapidamente (dentro do timeout). Processe operações longas de forma assíncrona.
Sempre retorne erros estruturados com mensagens claras.
Logue todas as requisições usando runId para rastreabilidade.
Use sempre HTTPS em produção para proteger dados em trânsito.

Exemplo Completo

Servidor CNP Completo

Limitações

  • Timeout máximo: 5 minutos por requisição (configurável por node)
  • Tamanho de payload: 1MB máximo
  • Retries: Máximo de 10 tentativas (configurável por node)

Troubleshooting

Erro: Invalid Signature

  1. Verifique se o secret está correto
  2. Certifique-se de serializar o payload exatamente como recebido
  3. Use comparação time-safe
  4. Verifique se está usando o formato correto: sha256=<base64> (não hexadecimal)
  5. Recomendado: Use o SDK TypeScript com validateCNPSignature para evitar erros de implementação

Erro: Timeout

  1. Otimize seu código para responder rapidamente
  2. Processe operações longas de forma assíncrona
  3. Aumente o timeout do node se necessário

Erro: Connection Refused

  1. Verifique se seu servidor está acessível
  2. Confirme que o endpoint está correto no Triglit
  3. Verifique firewall e configurações de rede
Use o painel do Triglit para testar seu endpoint CNP antes de usar em produção. O painel oferece ferramentas de validação e teste.