Skip to main content
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 un 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 defineLogicFunction minus setările de declanșare, plus shouldRunOnVersionUpgrade.
  • Când rulează: doar la instalări noi, în mod implicit. Setați shouldRunOnVersionUpgrade: true pentru a rula și la upgrade-uri. Folosiți previousVersion / newVersion pentru 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 shouldRunOnVersionUpgrade este 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 în defineApplication().
  • Valoarea implicită pentru timeoutSeconds este 300 pentru a permite sarcini de configurare mai lungi, cum ar fi popularea datelor.
  • Nu este executat în modul dev: yarn twenty dev sare peste fluxul de instalare și sincronizează fișierele direct, astfel încât hook-urile nu rulează acolo. Declanșați-le manual în schimb:
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:
src/logic-functions/post-install.ts
Flag-ul 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 ca POST_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.
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