defineApplication. Declara:
- Identidad — identificador universal, nombre para mostrar, descripción.
- Permisos — bajo qué rol se ejecutan sus funciones de lógica y componentes de frontend.
- Variables (opcionales) — pares clave–valor expuestos a tu código como variables de entorno.
- Hooks de preinstalación / postinstalación (opcionales) — consulta Funciones de lógica.
src/application-config.ts
- Los campos
universalIdentifierson identificadores deterministas que te pertenecen. Genéralos una vez y mantenlos estables entre sincronizaciones. applicationVariablesse convierten en variables de entorno para tus funciones y componentes de frontend. En las funciones lógicas (del lado del servidor), están disponibles comoprocess.env.VARIABLE_NAME. En los componentes de frontend, usagetApplicationVariable('VARIABLE_NAME')detwenty-sdk/front-component. Las variables marcadas conisSecret: truesolo se inyectan en las funciones lógicas. Los componentes de frontend solo reciben variables no secretas.- El rol predeterminado se detecta automáticamente a partir del archivo de rol marcado con
defineApplicationRole(); no necesitas hacer referencia a él desdedefineApplication(). - Las funciones de preinstalación y posinstalación se detectan automáticamente durante la compilación del manifiesto; no necesitas referenciarlas en
defineApplication(). - Pasar
defaultRoleUniversalIdentifierexplícitamente sigue siendo compatible por motivos de retrocompatibilidad, pero está en desuso en favor dedefineApplicationRole(). serverVariablesson configuraciones y secretos con ámbito de instancia (por ejemplo, claves de API). A diferencia deapplicationVariables, no declaran ningún valor en el manifiesto: el operador del espacio de trabajo los completa desde la configuración de la aplicación, y se inyectan en las funciones lógicas solo una vez que se han establecido.
Tipos de variables
TantoapplicationVariables como serverVariables aceptan un type opcional (y, para SELECT / MULTI_SELECT, una lista de options). Tipos admitidos: TEXT (predeterminado), BOOLEAN, NUMBER, NUMERIC, DATE, DATE_TIME, SELECT, MULTI_SELECT, ARRAY, RAW_JSON, RICH_TEXT.
src/application-config.ts
type solo afecta a la presentación y validación: selecciona la entrada correspondiente en la interfaz de configuración del espacio de trabajo (un interruptor, campo numérico, lista desplegable, selector de fecha, editor JSON, …) y permite que la compilación valide tu configuración (por ejemplo, SELECT / MULTI_SELECT deben declarar options no vacías). No cambia cómo el valor llega a tu código.
Los valores siempre se inyectan como cadenas; esto es inherente a las variables de entorno (process.env.* solo admite cadenas). Cuando se ejecuta tu función lógica, el ejecutor serializa cada valor según su type declarado al construir process.env, por lo que el formato de cadena es coherente independientemente de cómo se haya establecido el valor (valor predeterminado del manifiesto, interfaz de configuración o una versión anterior):
Analiza la cadena para volver al tipo que esperas:
getApplicationVariable('VARIABLE_NAME'): el valor devuelto es una cadena; analízalo según sea necesario.
Rol de función predeterminado
El rol declarado condefineApplicationRole() controla a qué pueden acceder las funciones de lógica y los componentes de interfaz de la aplicación:
- El token en tiempo de ejecución inyectado como
TWENTY_APP_ACCESS_TOKENse deriva de este rol. - El cliente de API tipado está restringido a los permisos otorgados a ese rol.
- Sigue el principio de mínimo privilegio: declara solo los permisos que necesitan tus funciones.
src/roles/default-role.ts. Consulta Roles y permisos para obtener la referencia completa.
Metadatos del Marketplace
Si planeas publicar tu aplicación, estos campos opcionales controlan cómo aparece en el marketplace:logoUrl y screenshots son alias obsoletos de logo y galleryImages. Las URL absolutas externas (http:// o https://) no son compatibles para estos campos: se descartan con una advertencia en tiempo de compilación. En su lugar, incluye las imágenes en la carpeta public/ de tu aplicación.