InstallPayload ({ previousVersion?: string; newVersion: string } — previousVersion es undefined en una instalación nueva); el hook de desinstalación recibe un UninstallPayload ({ version?: string } — la versión que se está eliminando).
Cada aplicación puede definir como máximo un hook de cada tipo (preinstalación, postinstalación, desinstalación). La compilación del manifiesto genera un error si se detecta más de uno de cualquier tipo.
De un vistazo
Regla general: usa post-install de forma predeterminada. Recurra a la pre-instalación solo cuando la propia migración sea destructiva y necesite interceptar el estado anterior antes de que desaparezca.
Comportamiento compartido por ambos hooks
- La configuración es una configuración de
defineLogicFunctionmenos los ajustes de disparador, másshouldRunOnVersionUpgrade. - Cuándo se ejecuta: solo en instalaciones nuevas, de forma predeterminada. Configura
shouldRunOnVersionUpgrade: truepara que también se ejecute en las actualizaciones. UsapreviousVersion/newVersionpara ramificar según la ruta de actualización. - La idempotencia es importante: el post-install asíncrono puede reintentarse y cualquiera de los hooks se vuelve a ejecutar en las actualizaciones cuando
shouldRunOnVersionUpgradeestá activado. - El entorno habitual de las logic functions (
APPLICATION_ID,APP_ACCESS_TOKEN,API_URL) se inyecta, por lo que puedes llamar a la API de Twenty con el token de tu app. - El hook se adjunta automáticamente al manifiesto de la aplicación en tiempo de compilación (
preInstallLogicFunction/postInstallLogicFunction) — no hay nada que referenciar endefineApplication(). - El
timeoutSecondspredeterminado es 300 para permitir tareas de configuración más largas como la siembra de datos. - No se ejecuta en modo de desarrollo:
yarn twenty devomite el flujo de instalación y sincroniza los archivos directamente, por lo que los hooks nunca se ejecutan ahí. En su lugar, dispáralos manualmente:
definePostInstallLogicFunction
Se ejecuta después de que se aplique la migración de metadatos del espacio de trabajo
definePostInstallLogicFunction
Se ejecuta después de que se aplique la migración de metadatos del espacio de trabajo
Se ejecuta una vez que tu app ha terminado de instalarse: metadatos sincronizados, cliente SDK generado, nuevo esquema disponible para consulta. Ejemplo — sembrar un registro predeterminado en instalaciones nuevas:El flag
src/logic-functions/post-install.ts
shouldRunSynchronously controla el modelo de ejecución:false(predeterminado) — encolado en la cola de mensajes (retryLimit: 3) y ejecutado por un worker. La respuesta de instalación se devuelve tan pronto como el trabajo se pone en la cola. Usar para trabajo de larga duración — siembra de grandes conjuntos de datos, APIs de terceros lentas.true— se ejecuta en línea durante el flujo de instalación. La solicitud de instalación se bloquea hasta que el handler finaliza; un error lanzado aparece comoPOST_INSTALL_ERRORpara quien realiza la llamada (sin reintentos). Usar para trabajo rápido que debe completarse antes de la respuesta. La migración ya se ha aplicado en este punto, por lo que un fallo no revierte los cambios de esquema — solo expone el error.
definePreInstallLogicFunction
Se ejecuta antes de que se aplique la migración de metadatos del espacio de trabajo
definePreInstallLogicFunction
Se ejecuta antes de que se aplique la migración de metadatos del espacio de trabajo
Se ejecuta antes de la migración de metadatos, contra el esquema anterior — el lugar adecuado para hacer una copia de seguridad de los datos que una migración perdería o para rechazar una actualización arriesgada. Antes de ejecutarse, el servidor realiza una “sincronización simplificada” puramente aditiva que registra solo la función de pre-instalación de la versión nueva; todo lo demás — los objetos, campos y datos de la versión anterior — permanece sin cambios cuando se ejecuta tu handler.La pre-instalación siempre es síncrona y bloquea la instalación. Si el handler lanza una excepción, la instalación se aborta antes de cualquier cambio de esquema — el espacio de trabajo permanece en la versión anterior en un estado consistente. Esto es intencional: la pre-instalación es su última oportunidad para rechazar una actualización arriesgada.Ejemplo — copiar los valores de un campo heredado antes de que la migración lo elimine:
src/logic-functions/pre-install.ts
Hook de desinstalación
defineUninstallLogicFunction declara un hook que se ejecuta cuando un usuario desinstala tu aplicación. Se ejecuta antes de que se eliminen los metadatos, los datos y el código de la aplicación — una vez que se ejecuta la migración de eliminación ya no queda nada que ejecutar — por lo que tu controlador todavía puede consultar los objetos y registros de la aplicación. Úsalo para limpiar recursos externos: cancelar el aprovisionamiento de recursos de API, eliminar bots restantes, revocar webhooks.
Notas:
- El hook se ejecuta con el mejor esfuerzo posible: se ejecuta de forma sincrónica, pero si falla se registra el error y nunca bloquea la desinstalación; la limpieza no debe hacer que una aplicación sea imposible de eliminar.
- Recibe
UninstallPayload({ version?: string }— la versión que se está eliminando). - No se ejecuta cuando se revierte una instalación nueva fallida: la aplicación nunca terminó de instalarse.
- El hook no puede ejecutarse después de que la aplicación haya desaparecido, por lo que la limpieza externa que depende de datos de la aplicación (por ejemplo, IDs de bots almacenados en registros) debe realizarse aquí, no en una tarea programada externa.
- Al igual que los hooks de instalación, no se ejecuta en modo de desarrollo; en su lugar, actívalo manualmente:
src/logic-functions/uninstall.ts