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 / posinstalación / desinstalació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, posinstalación y desinstalació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.- Ambos tipos de variable aceptan
isDeprecated: true. Úsala para retirar una variable en lugar de eliminarla: mantener la clave declarada conserva el valor almacenado (eliminarla destruye el valor que el operador introdujo), y la variable sigue siendo inyectada, por lo que tu código puede recurrir a ella —process.env.NEW_API_KEY ?? process.env.API_KEY. Una variable obsoleta desaparece de la configuración de la app una vez que no tiene ningún valor y nunca cuenta para la verificación de configuración de la app, por lo queisDeprecatedtiene prioridad sobreisRequired. - Para mostrar una interfaz de configuración personalizada dentro de la pestaña Settings de la aplicación (en lugar de la sección predeterminada de configuración de variables), declara un componente de frontend con
defineSettingsFrontComponent()en su propio archivo. Solo se permite uno por aplicación. Las secciones gestionadas por el sistema (actualización automática, App URL, conexiones) siempre permanecen visibles.
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:
- Los tokens en tiempo de ejecución inyectados en tus funciones de lógica se derivan de este rol. Una llamada que actúa como una persona se limita aún más a lo que esa persona puede hacer, por lo que nunca puede superar ninguno de los dos. Consulta Qué acceso usa una llamada.
- 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.