Prezentare generală
Hook-urile de instalare sunt funcții logice speciale care rulează în timpul ciclului de viață de instalare, actualizare sau dezinstalare. Acestea folosesc același runtime de handler ca și funcțiile logice obișnuite, dar sunt declarate cu propriile lor funcții de definire și există în afara modelului obișnuit de declanșatori (HTTP, cron, evenimente de bază de date). Hook-urile de instalare primesc unInstallPayload ({ 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:
twenty app 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