InstallPayload ({ previousVersion?: string; newVersion: string } — previousVersion este undefined la o instalare nouă); hook-ul de dezinstalare primește un UninstallPayload ({ version?: string } — versiunea care este eliminată).
Fiecare aplicație poate defini cel mult unul din fiecare hook (pre-instalare, post-instalare, dezinstalare). Construirea manifestului va genera o eroare dacă se detectează mai mult de unul de orice tip.
Dintr-o privire
Regulă generală: folosiți implicit post-install. Apelați la pre-install doar când migrarea în sine este distructivă și trebuie să interceptați starea anterioară înainte să dispară.
Comportament partajat de ambele hook-uri
- Configurația este o configurație
defineLogicFunctionminus setările de declanșare, plusshouldRunOnVersionUpgrade. - Când rulează: doar la instalări noi, în mod implicit. Setați
shouldRunOnVersionUpgrade: truepentru a rula și la upgrade-uri. FolosițipreviousVersion/newVersionpentru a ramifica în funcție de calea de upgrade. - Idempotența contează: post-install asincron poate fi reîncercat, iar oricare hook rulează din nou la upgrade-uri când
shouldRunOnVersionUpgradeeste activat. - Mediul obișnuit al funcțiilor logice (
APPLICATION_ID,APP_ACCESS_TOKEN,API_URL) este injectat, astfel încât puteți apela API-ul Twenty cu tokenul aplicației voastre. - Hook-ul este atașat automat la manifestul aplicației la build (
preInstallLogicFunction/postInstallLogicFunction) — nu este nevoie să fie referențiat îndefineApplication(). - Valoarea implicită pentru
timeoutSecondseste 300 pentru a permite sarcini de configurare mai lungi, cum ar fi popularea datelor. - Nu este executat în modul dev:
yarn twenty devsare peste fluxul de instalare și sincronizează fișierele direct, astfel încât hook-urile nu rulează acolo. Declanșați-le manual în schimb:
definePostInstallLogicFunction
Rulează după ce migrarea metadatelor workspace-ului este aplicată
definePostInstallLogicFunction
Rulează după ce migrarea metadatelor workspace-ului este aplicată
Rulează după ce aplicația voastră a terminat instalarea: metadate sincronizate, clientul SDK generat, noua schemă poate fi interogată. Exemplu — populează o înregistrare implicită la instalări noi:Flag-ul
src/logic-functions/post-install.ts
shouldRunSynchronously controlează modelul de execuție:false(implicit) — pus în coada de mesaje (retryLimit: 3) și rulat de un worker. Răspunsul la instalare este returnat imediat ce jobul este pus în coadă. Folosiți pentru muncă de durată — popularea unor seturi mari de date, API-uri lente ale terților.true— executat inline în timpul fluxului de instalare. Cererea de instalare este blocată până când handlerul se termină; o eroare aruncată este expusă apelantului caPOST_INSTALL_ERROR(fără reîncercări). Folosiți pentru muncă rapidă, care trebuie să fie finalizată înainte de răspuns. Migrarea a fost deja aplicată în acest punct, astfel încât un eșec nu anulează modificările de schemă — doar expune eroarea.
definePreInstallLogicFunction
Rulează înainte ca migrarea metadatelor workspace-ului să fie aplicată
definePreInstallLogicFunction
Rulează înainte ca migrarea metadatelor workspace-ului să fie aplicată
Rulează înainte de migrarea metadatelor, pe schema anterioară — locul potrivit pentru a face backup datelor pe care o migrare le-ar pierde sau pentru a refuza un upgrade riscant. Înainte de execuție, serverul rulează un „sync redus”, pur aditiv, care înregistrează doar funcția de pre-instalare a versiunii noi; tot restul — obiectele, câmpurile și datele versiunii anterioare — rămâne neatins atunci când rulează handlerul.Pre-install este întotdeauna sincron și blochează instalarea. Dacă handlerul aruncă o eroare, instalarea este întreruptă înainte de orice modificare a schemei — workspace-ul rămâne la versiunea anterioară într-o stare consistentă. Acest lucru este intenționat: pre-install este ultima dvs. șansă de a refuza o actualizare riscantă.Exemplu — copiați valorile unui câmp vechi înainte ca migrarea să îl elimine:
src/logic-functions/pre-install.ts
Hook de dezinstalare
defineUninstallLogicFunction declară un hook care rulează atunci când un utilizator dezinstalează aplicația ta. Acesta este executat înainte ca metadatele, datele și codul aplicației să fie eliminate — odată ce migrarea de ștergere rulează, nu mai rămâne nimic de executat — astfel încât handler-ul tău poate încă interoga obiectele și înregistrările aplicației. Folosește-l pentru curățarea resurselor externe: deprovisionarea resurselor API, ștergerea boților rămași, revocarea webhook-urilor.
Notițe:
- Hook-ul funcționează după principiul „best-effort“: rulează sincron, dar o eroare este înregistrată și nu blochează niciodată dezinstalarea — curățarea nu trebuie să facă imposibilă eliminarea unei aplicații.
- Acesta primește
UninstallPayload({ version?: string }— versiunea care este eliminată). - Nu rulează atunci când o instalare nouă eșuată este anulată — aplicația nu a terminat niciodată instalarea.
- Hook-ul nu poate rula după ce aplicația a dispărut, astfel încât curățarea externă care depinde de datele aplicației (de ex. ID-uri de boți stocate în înregistrări) trebuie făcută aici, nu într-un job programat extern.
- La fel ca hook-urile de instalare, nu este executat în modul de dezvoltare (dev mode) — declanșează-l manual în schimb:
src/logic-functions/uninstall.ts