InstallPayload ({ previousVersion?: string; newVersion: string } — previousVersion es undefined en una instalación nueva), pero se declaran con sus propias funciones define y viven fuera del modelo de disparadores normal (HTTP, cron, eventos de base de datos).
Cada aplicación puede definir como máximo una función de preinstalación y como máximo una función de posinstalación. La compilación del manifiesto genera un error si se detecta más de una de cualquiera de las dos.
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