Ir para o conteúdo
NimbusNexus
Transforms · Pipelines declarativos para requisições

Filtre, reduza e remodele uma requisição,
sem escrever código.

Um pipeline é uma lista curta de etapas: descartar uma requisição que não corresponda, remover ou adicionar campos, remontar o corpo a partir de um template, definir headers. Monte um no console ou pela API, teste-o, mantenha as versões dele, execute-o pela API ou referencie-o pelo id a partir do produto que envia.

Como funciona

Monte, teste, depois execute onde for preciso.

Um pipeline é um documento JSON, verificado por inteiro ao ser salvo. Nenhuma etapa roda código seu, então nenhuma consegue entrar em loop, esperar ou fazer chamadas externas.

  1. Montar um pipeline

    Adicione etapas no formulário do console, cole-as em JSON ou comece a partir de um template: mensagens do Slack, do Discord e do Teams, Keep only these fields, Drop personal data. Um documento que nunca conseguiria rodar é recusado ao ser salvo, com a etapa, o caminho e o motivo.

  2. Testar

    Execute o que está no editor numa requisição que você colar e veja o corpo e os headers que ele enviaria, a etapa que a descartou ou por que falhou. Um teste não salva nada e não entra em nenhuma contagem.

  3. Manter as versões

    Salvar conteúdo novo cria uma versão, e uma versão nunca muda. Salvar o mesmo conteúdo de novo não cria nenhuma, e restaurar uma versão antiga é salvar o conteúdo dela de novo.

  4. Executar

    Chame a API com uma requisição e leia o que o pipeline fez, ou referencie o pipeline pelo id a partir do Webhooks, que o executa no próprio processo antes de cada entrega.

O Transforms não envia nada por conta própria e não guarda nada do que processa. Ele não é um relay: quem entrega eventos é o Webhooks, quem encaminha requisições é o Request Bins, e o Transforms executa o pipeline e responde o que ele fez.

O que um pipeline pode fazer

Seis etapas, que rodam na ordem em que você as escreve.

Elas cobrem o que a maioria das transformações existe para fazer. Um pipeline não tem loops, relógio nem rede, então o mesmo pipeline sempre faz a mesma coisa com a mesma requisição.

Filter

Mantenha uma requisição só se ela corresponder, ou descarte-a se corresponder. Teste campos, objetos aninhados e arrays, com operadores como $gte, $in e $contains, e combine-os com $and, $or e $not.

Remove fields

Remova campos do corpo pelo caminho. * corresponde a um nível e ** a qualquer profundidade, então **.email remove todos os campos email, onde quer que estejam.

Set fields

Adicione ou sobrescreva campos com valores de uma pequena linguagem de templates: {{ data.id }} insere um valor como texto, e {"$ref": "data.amount"} o insere com o tipo dele.

Reshape the body

Substitua o corpo por um que você escreve, com filtros como money(), date(), truncate() e join(). É assim que um template monta uma mensagem do Slack, do Discord ou do Teams.

Headers

Defina, remova e renomeie headers, com valores de template. Uma credencial não entra aqui, onde uma leitura do pipeline a mostraria: para isso serve a próxima etapa.

Credential

Indique que um bearer token, autenticação básica ou uma chave de API vai na requisição, e de qual slot essa credencial vem. As etapas de credencial rodam por último, então nenhuma outra etapa consegue ler uma credencial.

Templates

Mensagens do Slack, do Discord e do Teams que o texto do evento não consegue formatar nem fechar antes da hora, Keep only these fields e Drop personal data. Salvar um deles cria uma cópia que é sua.

Limites fixos

20 etapas, um corpo de 256 KiB e 100,000 valores lidos ou copiados numa execução, em todos os planos. Acima de um limite, a execução falha com um motivo claro. Ela nunca trava.

Em uma requisição

Envie uma requisição. Leia o que o pipeline fez.

Este pipeline mantém as faturas pagas de $1,000 ou mais, remove o e-mail do cliente e qualquer número de telefone, e adiciona dois campos e um header. A execução responde com o resultado e não guarda nada dele.

O pipeline

{
  "version": 1,
  "steps": [
    { "filter": { "type": "invoice.paid", "data": { "amount": { "$gte": 100000 } } } },
    { "drop": ["data.customer.email", "**.phone"] },
    { "set": {
        "event_type": "{{ type }}",
        "amount_display": "{{ data.amount | money(data.currency) }}"
    } },
    { "headers": { "set": { "X-Event-Type": "{{ type }}" } } }
  ]
}

A execução

# Execute o pipeline salvo numa requisição
curl -X POST "https://transforms.nimbusnexus.net/v1/pipelines/$PIPELINE_ID/run" \
  -H "Authorization: Bearer $TRANSFORMS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"body":{"type":"invoice.paid","data":{"id":"in_42","amount":150000,"currency":"usd","customer":{"name":"Ana Silva","email":"[email protected]","phone":"+1 202 555 0142"}}}}'

A resposta

{
  "status": "ok",
  "version": 3,
  "body": {
    "type": "invoice.paid",
    "data": {
      "id": "in_42",
      "amount": 150000,
      "currency": "usd",
      "customer": { "name": "Ana Silva" }
    },
    "event_type": "invoice.paid",
    "amount_display": "1,500.00 USD"
  },
  "body_changed": true,
  "headers": { "X-Event-Type": "invoice.paid" },
  "query": {},
  "step": null,
  "note": null,
  "reason": null,
  "error": null,
  "duration_ms": 0.4
}
Credenciais

O Transforms não guarda credenciais. Quem guarda é o produto que envia.

Um pipeline pode dizer que uma credencial vai na requisição, e uma leitura do pipeline não mostra nenhum valor, porque ele não tem nenhum. Para enviar uma, execute o pipeline por referência a partir do produto que envia.

Um slot, não um valor

Uma etapa de credencial diz que tipo de credencial vai para onde e indica um slot pelo nome. O documento traz esse nome e nada mais, então um pipeline lido de volta nunca mostra uma credencial.

Preenchido por quem envia

Um produto que executa o pipeline por referência associa o slot a um segredo no próprio armazenamento, sob a própria chave, e o envia às próprias URLs. Fora desse produto, o slot não significa nada.

Aqui ela aparece mascarada

O Test e a API de execução mostram o que a etapa adicionaria, como Authorization: Bearer ••••. Nenhum dos dois consegue enviar uma credencial, porque o Transforms não tem nenhuma para enviar.

Onde ele roda aparece primeiro

A leitura de um pipeline lista os produtos que o executam por referência e a versão que cada um executa. Uma versão nova com uma etapa de credencial, ou a exclusão do pipeline, precisa indicar cada um deles antes.

Para que serve

As tarefas para as quais ele existe, e nenhuma precisa de script.

CREDENCIAIS
Adicione o que um destino pede

A API de um parceiro espera um bearer token ou uma chave de API. Uma etapa de credencial diz isso, e o produto que envia a preenche a partir dos próprios segredos.

{"auth": {"type": "bearer", "secret": "sec_…"}}
REMODELAGEM
Envie o formato que uma API espera

Um CRM quer três campos, com os nomes dele. Uma etapa de remodelagem monta exatamente esse corpo a partir do evento, mantendo o tipo de cada valor.

{"map": {"invoice_id": "{{ data.id }}", "total": {"$ref": "data.amount"}}}
FILTROS
Descarte o que não faz falta

Uma inscrição faz a correspondência pelo tipo do evento. Um filtro também lê o payload, então “faturas pagas de $1,000 ou mais” é uma etapa só.

{"filter": {"data": {"amount": {"$gte": 100000}}}}
CHAT
Publique no Slack, no Discord ou no Teams

Cada template é uma etapa de remodelagem e um header. Ele funciona com qualquer evento, e nada no evento consegue formatar a mensagem, mencionar alguém ou fechar um bloco de código antes da hora.

Slack message · Discord message · Microsoft Teams card
DADOS PESSOAIS
Reduza a requisição antes que ela saia

Remova dados pessoais em qualquer profundidade antes que um fornecedor de analytics os veja, e aproveite para adicionar o tipo do evento a um header.

{"drop": ["data.customer.email", "**.phone"]}
UMA DEFINIÇÃO
Mantenha um só pipeline, não um por endpoint

Referencie o pipeline pelo id a partir do Webhooks. Os endpoints executam a versão atual dele no próprio processo do Webhooks, e cada versão nova chega a eles sem mudar nenhum endpoint.

pipe_8e27d40b · version 3 · destinations: webhookd
Planos

Pipelines em todos os planos, inclusive no Free.

Todo plano tem as seis etapas, os templates, o Test, a API de execução e a execução por referência. Um plano pago comporta mais pipelines e slots de credencial, mantém mais versões e executa mais por minuto.

Free

O suficiente para montar, testar e executar os seus primeiros pipelines.

$0

  • 5 pipelines
  • 5 slots de credencial
  • 10 versões mantidas por pipeline
  • 60 execuções por minuto
Começar

Starter

Para um produto que executa pipelines em produção.

$9/ mês

$86.40 / ano — economize 20%

  • 25 pipelines
  • 25 slots de credencial
  • 25 versões mantidas por pipeline
  • 600 execuções por minuto
Escolher Starter

Pro

Mais pipelines, mais versões, espaço para um time inteiro.

$29/ mês

$278.40 / ano — economize 20%

  • 100 pipelines
  • 100 slots de credencial
  • 50 versões mantidas por pipeline
  • 3,000 execuções por minuto
Escolher Pro

Custom

Compromissos de volume, limites sob medida e condições à altura.

Sob consulta

  • 1,000 pipelines
  • 1,000 slots de credencial
  • 100 versões mantidas por pipeline
  • 12,000 execuções por minuto
  • Exige uma conta de time
Vamos conversar

As execuções são contadas, não cobradas, e o console e GET /v1/usage mostram as do mês. Uma execução acima do limite por minuto do plano responde 429 com o tempo de espera, e o Test divide esse limite. Uma execução num produto que referencia o pipeline conta no uso desse produto. Uma versão que um produto fixa é mantida além do número do plano, assim como as cinco versões anteriores que um produto foi visto executando mais recentemente nos últimos 30 dias.

Em todos os planos, inclusive no Free
  • As seis etapas
  • Templates para Slack, Discord e Teams
  • Keep only these fields, Drop personal data
  • Teste antes de salvar
  • Versões que nunca mudam
  • A API de execução
  • Execução por referência a partir do Webhooks
  • Isolamento por workspace
Perguntas

Antes de montar o seu primeiro pipeline.

Não. Ele executa o pipeline e responde o que ele fez. Para enviar o resultado, chame a API e envie você mesmo, ou referencie o pipeline pelo id a partir do Webhooks, que o executa antes de cada entrega. O Transforms não é um relay e não tem URL para onde enviar.
Comece agora

Monte um pipeline e veja o que ele faz com uma requisição.

O Free inclui 5 pipelines e 60 execuções por minuto, com todas as etapas e todos os templates. Experimente um no playground primeiro, sem conta.