Skip to main content
Hooks de instalação são funções de lógica especiais que são executadas durante o ciclo de vida de instalação, atualização ou desinstalação. Elas compartilham o mesmo runtime de handler que as logic functions normais, mas são declaradas com suas próprias funções de definição e ficam fora do modelo de gatilhos normal (HTTP, cron, eventos de banco de dados). Hooks de instalação recebem um InstallPayload ({ previousVersion?: string; newVersion: string }previousVersion é undefined em uma instalação nova); o hook de desinstalação recebe um UninstallPayload ({ version?: string } — a versão que está sendo removida). Cada app pode definir no máximo um de cada hook (pre-instalação, pós-instalação, desinstalação). A geração do manifesto apresentará erro se mais de um de qualquer tipo for detectado.

Visão geral

Regra geral: use post-install como padrão. Recurra à pré-instalação somente quando a própria migração for destrutiva e você precisar interceptar o estado anterior antes que ele desapareça.

Comportamento compartilhado por ambos os hooks

  • A configuração é uma config de defineLogicFunction menos as configurações de gatilho, mais shouldRunOnVersionUpgrade.
  • Quando é executado: apenas em instalações novas, por padrão. Defina shouldRunOnVersionUpgrade: true para também executar em atualizações. Use previousVersion / newVersion para ramificar com base no caminho de atualização.
  • Idempotência é importante: o post-install assíncrono pode ser executado novamente, e qualquer um dos hooks é reexecutado em atualizações quando shouldRunOnVersionUpgrade está ativado.
  • O ambiente usual de logic-function (APPLICATION_ID, APP_ACCESS_TOKEN, API_URL) é injetado, para que você possa chamar a Twenty API com o token do seu app.
  • O hook é anexado automaticamente ao manifesto da aplicação em tempo de build (preInstallLogicFunction / postInstallLogicFunction) — nada para referenciar em defineApplication().
  • O timeoutSeconds padrão é 300 para permitir tarefas de configuração mais longas, como o pré-carregamento de dados.
  • Não é executado em modo de desenvolvimento: yarn twenty dev ignora o fluxo de instalação e sincroniza os arquivos diretamente, portanto os hooks nunca são executados ali. Em vez disso, acione-os manualmente:
É executado depois que seu app termina de ser instalado: metadados sincronizados, cliente SDK gerado, novo esquema disponível para consulta. Exemplo — popular um registro padrão em instalações novas:
src/logic-functions/post-install.ts
A flag shouldRunSynchronously controla o modelo de execução:
  • false (padrão) — colocado em fila na message queue (retryLimit: 3) e executado por um worker. A resposta da instalação retorna assim que o job é colocado na fila. Use para trabalhos de longa duração — popular grandes conjuntos de dados, APIs lentas de terceiros.
  • true — executado inline durante o fluxo de instalação. A requisição de instalação fica bloqueada até que o handler termine; um erro lançado aparece como POST_INSTALL_ERROR para o chamador (sem novas tentativas). Use para trabalhos rápidos que precisam ser concluídos antes da resposta. A migração já foi aplicada neste ponto, portanto uma falha não reverte as alterações de esquema — ela apenas expõe o erro.
É executado antes da migração de metadados, contra o esquema anterior — o lugar certo para fazer backup de dados que uma migração poderia perder ou para recusar uma atualização arriscada. Antes de executar, o servidor realiza uma “sincronização simplificada” puramente aditiva que registra apenas a função de pré-instalação da nova versão; todo o resto — objetos, campos e dados da versão anterior — permanece intocado quando seu handler é executado.A pré-instalação é sempre síncrona e bloqueia a instalação. Se o handler lançar uma exceção, a instalação é abortada antes de qualquer alteração de esquema — o workspace permanece na versão anterior em um estado consistente. Isto é intencional: a pré-instalação é sua última chance de recusar uma atualização arriscada.Exemplo — copiar os valores de um campo legado antes que a migração o remova:
src/logic-functions/pre-install.ts

Hook de desinstalação

defineUninstallLogicFunction declara um hook que é executado quando um usuário desinstala seu app. Ele é executado antes que os metadados, dados e código do app sejam removidos — depois que a migration de exclusão é executada, não sobra nada para executar — portanto, seu handler ainda pode consultar os objetos e registros do app. Use-o para limpar recursos externos: desprovisionar recursos de API, excluir bots remanescentes, revogar webhooks. Notas:
  • O hook é de melhor esforço: ele é executado de forma síncrona, mas uma falha é registrada em log e nunca bloqueia a desinstalação — a limpeza não deve tornar impossível remover um app.
  • Ele recebe UninstallPayload ({ version?: string } — a versão que está sendo removida).
  • Ele não é executado quando uma instalação nova com falha é revertida — o app nunca chegou a ser totalmente instalado.
  • O hook não pode ser executado depois que o app foi removido, então a limpeza externa que depende de dados do app (por exemplo, IDs de bots armazenados em registros) deve ser feita aqui, não em um job externo agendado.
  • Assim como os hooks de instalação, ele não é executado no modo de desenvolvimento — em vez disso, acione-o manualmente:
src/logic-functions/uninstall.ts