defineApplication. Ela declara:
- Identidade — identificador universal, nome de exibição, descrição.
- Permissões — qual papel é usado pelas suas funções de lógica e pelos componentes de front-end.
- Variáveis (opcional) — pares chave–valor expostos ao seu código como variáveis de ambiente.
- Hooks de pré-instalação/pós-instalação/desinstalação (opcional) — consulte Funções de lógica.
src/application-config.ts
- Os campos
universalIdentifiersão IDs determinísticos que você controla. Gere-os uma vez e mantenha-os estáveis entre sincronizações. applicationVariablestornam-se variáveis de ambiente para suas funções e componentes de front-end. Em funções lógicas (no lado do servidor), elas ficam disponíveis comoprocess.env.VARIABLE_NAME. Em componentes de front-end, usegetApplicationVariable('VARIABLE_NAME')detwenty-sdk/front-component. Variáveis marcadas comisSecret: truesão injetadas apenas em funções lógicas. Componentes de front-end recebem apenas variáveis não secretas.- O papel padrão é detectado automaticamente a partir do arquivo de definição de papel marcado com
defineApplicationRole()— você não precisa referenciá-lo emdefineApplication(). - As funções de pré-instalação, pós-instalação e desinstalação são detectadas automaticamente durante a construção do manifesto — você não precisa referenciá-las em
defineApplication(). - Passar
defaultRoleUniversalIdentifierexplicitamente ainda é compatível para retrocompatibilidade, mas foi preterido em favor dedefineApplicationRole(). serverVariablessão configurações e segredos com escopo de instância (por exemplo, chaves de API). Ao contrário deapplicationVariables, eles não declaram nenhum valor no manifesto — o operador do workspace os preenche nas configurações do app, e eles são injetados nas funções de lógica somente depois de definidos.- Para renderizar uma interface de configuração personalizada na guia Configurações do app (no lugar da seção padrão de configuração de variáveis), declare um componente de front-end com
defineSettingsFrontComponent()em seu próprio arquivo. Só é permitido um por app. Seções gerenciadas pelo sistema (atualização automática, URL do app, conexões) permanecem sempre visíveis.
Tipos de variáveis
TantoapplicationVariables quanto serverVariables aceitam um type opcional (e, para SELECT / MULTI_SELECT, uma lista de options). Tipos compatíveis: TEXT (padrão), BOOLEAN, NUMBER, NUMERIC, DATE, DATE_TIME, SELECT, MULTI_SELECT, ARRAY, RAW_JSON, RICH_TEXT.
src/application-config.ts
type afeta apenas a apresentação e validação — ele seleciona a entrada correspondente na interface de configurações do workspace (um toggle, campo numérico, dropdown, seletor de data, editor JSON, …) e permite que o build valide a sua configuração (por exemplo, SELECT / MULTI_SELECT devem declarar options não vazias). Ele não altera a forma como o valor chega ao seu código.
Os valores são sempre injetados como strings — isso é inerente às variáveis de ambiente (process.env.* aceita apenas string). Quando a sua função de lógica é executada, o executor serializa cada valor de acordo com o type declarado ao construir o process.env, para que o formato da string seja consistente, não importa como o valor foi definido (padrão do manifesto, interface de configurações ou uma versão anterior):
Converta a string de volta para o tipo que você espera:
getApplicationVariable('VARIABLE_NAME') — o valor retornado é uma string; converta conforme necessário.
Papel de função padrão
O papel declarado comdefineApplicationRole() controla o que as funções de lógica e os componentes de front-end do aplicativo podem acessar:
- O token em tempo de execução injetado como
TWENTY_APP_ACCESS_TOKENé derivado desse papel. - O cliente de API tipado é restrito às permissões concedidas a esse papel.
- Siga o princípio do menor privilégio: declare apenas as permissões de que suas funções precisam.
src/roles/default-role.ts. Consulte Papéis e permissões para a referência completa.
Metadados do Marketplace
Se você planeja publicar seu app, estes campos opcionais controlam como seu app aparece no marketplace:logoUrl e screenshots são aliases depreciadas de logo e galleryImages. URLs absolutas externas (http:// ou https://) não são suportados para estes campos: eles são descartados com um aviso no momento da compilação. Agrupe as imagens na pasta public/ do seu aplicativo.