Skip to main content
Ogni app deve avere esattamente una chiamata a defineApplication. Dichiara:
  • Identità — identificatore universale, nome visualizzato, descrizione.
  • Autorizzazioni — il ruolo sotto il quale vengono eseguite le sue funzioni logiche e i componenti front-end.
  • Variabili (opzionali) — coppie chiave–valore esposte al tuo codice come variabili d’ambiente.
  • Hook di pre-installazione / post-installazione / disinstallazione (opzionali) — vedi Funzioni logiche.
src/application-config.ts
Note:
  • I campi universalIdentifier sono ID deterministici che possiedi. Generali una volta e mantienili stabili tra una sincronizzazione e l’altra.
  • applicationVariables diventano variabili d’ambiente per le tue funzioni e i componenti front-end. Nelle funzioni di logica (lato server), sono disponibili come process.env.VARIABLE_NAME. Nei componenti front-end, usa getApplicationVariable('VARIABLE_NAME') da twenty-sdk/front-component. Le variabili contrassegnate con isSecret: true vengono iniettate solo nelle funzioni di logica. I componenti front-end ricevono solo variabili non segrete.
  • Il ruolo predefinito viene rilevato automaticamente dal file di ruolo contrassegnato con defineApplicationRole(): non è necessario farvi riferimento da defineApplication().
  • Le funzioni di pre-installazione, post-installazione e disinstallazione vengono rilevate automaticamente durante il build del manifest — non è necessario farne riferimento in defineApplication().
  • Il passaggio esplicito di defaultRoleUniversalIdentifier è ancora supportato per garantire la compatibilità con le versioni precedenti, ma è deprecato a favore di defineApplicationRole().
  • serverVariables sono configurazioni e segreti con ambito di istanza (ad esempio chiavi API). A differenza di applicationVariables, non dichiarano alcun valore nel manifest — l’operatore dello spazio di lavoro li compila dalle impostazioni dell’app e vengono iniettati nelle funzioni di logica solo una volta impostati.
  • Per eseguire il rendering di un’interfaccia di configurazione personalizzata all’interno della scheda Settings dell’app (al posto della sezione predefinita di configurazione delle variabili), dichiara un front component con defineSettingsFrontComponent() in un proprio file. Ne è consentito solo uno per app. Le sezioni gestite dal sistema (auto-upgrade, App URL, connessioni) rimangono sempre visibili.

Tipi di variabili

Sia applicationVariables che serverVariables accettano un type opzionale (e, per SELECT / MULTI_SELECT, un elenco di options). Tipi supportati: TEXT (predefinito), BOOLEAN, NUMBER, NUMERIC, DATE, DATE_TIME, SELECT, MULTI_SELECT, ARRAY, RAW_JSON, RICH_TEXT.
src/application-config.ts
Il type influisce solo su presentazione e convalida: seleziona l’input corrispondente nell’interfaccia delle impostazioni dell’area di lavoro (un interruttore, campo numerico, menu a discesa, selettore di data, editor JSON, …) e consente alla build di convalidare la tua configurazione (ad esempio, SELECT / MULTI_SELECT devono dichiarare options non vuote). Non cambia il modo in cui il valore arriva al tuo codice. I valori sono sempre inseriti come stringhe: ciò è intrinseco alle variabili di ambiente (process.env.* accetta solo stringhe). Quando la tua funzione di logica viene eseguita, l’executor serializza ogni valore in base al type dichiarato mentre costruisce process.env, quindi il formato della stringa è coerente indipendentemente da come è stato impostato il valore (valore predefinito del manifest, interfaccia delle impostazioni o una versione precedente): Analizza nuovamente la stringa nel tipo che ti aspetti:
Lo stesso vale per i componenti front-end che leggono i valori tramite getApplicationVariable('VARIABLE_NAME'): il valore restituito è una stringa; analizzalo secondo le necessità.

Ruolo funzione predefinito

Il ruolo dichiarato con defineApplicationRole() controlla a cosa possono accedere le funzioni di logica e i componenti di interfaccia dell’app:
  • Il token di runtime iniettato come TWENTY_APP_ACCESS_TOKEN è derivato da questo ruolo.
  • Il client API tipizzato è limitato alle autorizzazioni concesse a quel ruolo.
  • Segui il principio del privilegio minimo: dichiara solo le autorizzazioni necessarie alle tue funzioni.
Quando esegui lo scaffolding di una nuova app, la CLI crea un file di ruolo iniziale in src/roles/default-role.ts. Per la documentazione completa, vedi Ruoli e autorizzazioni.

Metadati del marketplace

Se prevedi di pubblicare la tua app, questi campi opzionali controllano come appare nel marketplace:
logoUrl e screenshots sono alias deprecati di logo e galleryImages. Gli URL assoluti esterni (http:// o https://) non sono supportati per questi campi: vengono eliminati con un avviso al momento della generazione. Raccogli invece le immagini nella cartella public/ della tua app.