InstallPayload ({ previousVersion?: string; newVersion: string } — previousVersion имеет значение undefined при новой установке); хук удаления получает UninstallPayload ({ version?: string } — версия, которая удаляется).
Каждое приложение может определить не более одного хука каждого типа (предустановочный, постустановочный, хук удаления). Сборка манифеста завершится ошибкой, если будет обнаружено более одного хука любого типа.
Краткий обзор
Общее практическое правило: по умолчанию используйте post-install. Обращайтесь к pre-install только тогда, когда сама миграция разрушительна и вам нужно перехватить предыдущее состояние, прежде чем оно исчезнет.
Общее поведение для обоих хуков
- Конфиг — это конфиг
defineLogicFunctionбез настроек триггера, но сshouldRunOnVersionUpgrade. - Когда запускается: по умолчанию только при чистой установке. Установите
shouldRunOnVersionUpgrade: true, чтобы также запускать его при обновлениях. ИспользуйтеpreviousVersion/newVersion, чтобы разветвлять логику в зависимости от пути обновления. - Идемпотентность имеет значение: асинхронный post-install может быть повторно выполнен, и любой хук будет запускаться повторно при обновлениях, если включён
shouldRunOnVersionUpgrade. - Обычное окружение logic-функций (
APPLICATION_ID,APP_ACCESS_TOKEN,API_URL) инъецируется, поэтому вы можете вызывать Twenty API с токеном своего приложения. - Хук автоматически прикрепляется к манифесту приложения на этапе сборки (
preInstallLogicFunction/postInstallLogicFunction) — ничего не нужно указывать вdefineApplication(). - Значение
timeoutSecondsпо умолчанию — 300, чтобы позволить выполнять более длительные задачи настройки, такие как инициализация данных. - Не выполняется в dev-режиме:
yarn twenty devпропускает процесс установки и синхронизирует файлы напрямую, поэтому хуки там никогда не запускаются. Вместо этого запускайте их вручную:
definePostInstallLogicFunction
Выполняется после применения миграции метаданных рабочего пространства
definePostInstallLogicFunction
Выполняется после применения миграции метаданных рабочего пространства
Запускается после завершения установки приложения: метаданные синхронизированы, SDK-клиент сгенерирован, новая схема доступна для запросов. Пример — инициализировать запись по умолчанию при новой установке:Флаг
src/logic-functions/post-install.ts
shouldRunSynchronously управляет моделью выполнения:false(по умолчанию) — ставится в очередь сообщений (retryLimit: 3) и выполняется воркером. Ответ установки возвращается, как только задача поставлена в очередь. Используйте для длительных операций — инициализация больших наборов данных, медленные сторонние API.true— выполняется непосредственно в процессе установки. Запрос на установку блокируется до завершения обработчика; выброшенная ошибка возвращается вызывающей стороне какPOST_INSTALL_ERROR(без повторных попыток). Используйте для быстрых операций, которые обязательно должны завершиться до ответа. На этом этапе миграция уже применена, поэтому сбой не откатывает изменения схемы — он только сообщает об ошибке.
definePreInstallLogicFunction
Выполняется до применения миграции метаданных рабочего пространства
definePreInstallLogicFunction
Выполняется до применения миграции метаданных рабочего пространства
Запускается до миграции метаданных, в контексте предыдущей схемы — подходящее место, чтобы создать резервную копию данных, которые были бы потеряны при миграции, или отклонить рискованное обновление. Перед выполнением сервер запускает чисто добавочную «урезанную синхронизацию», которая регистрирует только pre-install функцию новой версии; всё остальное — объекты, поля и данные предыдущей версии — остаётся нетронутым во время выполнения вашего обработчика.Pre-install всегда синхронный и блокирует установку. Если обработчик генерирует исключение, установка прерывается до применения каких-либо изменений схемы — рабочее пространство остаётся на предыдущей версии в согласованном состоянии. Это сделано намеренно: pre-install — ваш последний шанс отказать в рискованном обновлении.Пример — скопировать значения устаревшего поля перед тем, как миграция его удалит:
src/logic-functions/pre-install.ts
Хук удаления
defineUninstallLogicFunction объявляет хук, который выполняется, когда пользователь удаляет ваше приложение. Он выполняется до того, как метаданные, данные и код приложения будут удалены — после запуска миграции удаления уже нечему будет выполняться — поэтому ваш обработчик все еще может запрашивать объекты и записи приложения. Используйте его для очистки внешних ресурсов: отмены выделения ресурсов API, удаления оставшихся ботов, отзыва вебхуков.
Заметки:
- Хук работает по принципу «по возможности»: он выполняется синхронно, но сбой только логируется и никогда не блокирует удаление — очистка не должна делать удаление приложения невозможным.
- Он получает
UninstallPayload({ version?: string }— версия, которая удаляется). - Он не выполняется при откате неуспешной новой установки — приложение так и не было полностью установлено.
- Хук не может выполниться после того, как приложение удалено, поэтому внешняя очистка, которая зависит от данных приложения (например, ID ботов, сохраненные в записях), должна выполняться здесь, а не во внешнем запланированном задании.
- Как и установочные хуки, он не выполняется в режиме разработки — вместо этого запустите его вручную:
src/logic-functions/uninstall.ts