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 (opzionali) — vedi Funzioni logiche.
src/application-config.ts
- I campi
universalIdentifiersono ID deterministici che possiedi. Generali una volta e mantienili stabili tra una sincronizzazione e l’altra. applicationVariablesdiventano variabili d’ambiente per le tue funzioni e i componenti front-end. Nelle funzioni di logica (lato server), sono disponibili comeprocess.env.VARIABLE_NAME. Nei componenti front-end, usagetApplicationVariable('VARIABLE_NAME')datwenty-sdk/front-component. Le variabili contrassegnate conisSecret: truevengono 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 dadefineApplication(). - Le funzioni di pre-installazione e post-installazione 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 didefineApplicationRole(). serverVariablessono configurazioni e segreti con ambito di istanza (ad esempio chiavi API). A differenza diapplicationVariables, 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.
Tipi di variabili
SiaapplicationVariables 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
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):
| Tipo | stringa di process.env |
|---|---|
TEXT, SELECT, DATE, DATE_TIME | il valore grezzo ("eu", "2026-01-01") |
BOOLEAN | "true" / "false" |
NUMBER, NUMERIC | stringa decimale ("10", "2.5") |
MULTI_SELECT, ARRAY | array JSON ('["email","postcard"]') |
RAW_JSON, RICH_TEXT | oggetto JSON ('{"retries":3}') |
getApplicationVariable('VARIABLE_NAME'): il valore restituito è una stringa; analizzalo secondo le necessità.
Ruolo funzione predefinito
Il ruolo dichiarato condefineApplicationRole() 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.
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:| Campo | Descrizione |
|---|---|
author | Nome dell’autore o dell’azienda |
category | Categoria dell’app per il filtraggio nel marketplace |
logo | Percorso del logo dell’app in bundle in public/ (ad esempio, public/logo.png) |
galleryImages | Array dei percorsi delle immagini della galleria raggruppati in public/ (ad esempio, public/screenshot-1.png) |
aboutDescription | Descrizione markdown più lunga per la scheda “Informazioni”. Se omesso, il marketplace utilizza il README.md del pacchetto da npm |
websiteUrl | Link al tuo sito web |
termsUrl | Link ai Termini di servizio |
emailSupport | Indirizzo email di supporto |
issueReportUrl | Link al sistema di tracciamento dei problemi |
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.