Skip to main content
Todo app deve ter exatamente uma chamada a 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
Notas:
  • Os campos universalIdentifier são IDs determinísticos que você controla. Gere-os uma vez e mantenha-os estáveis entre sincronizações.
  • applicationVariables tornam-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 como process.env.VARIABLE_NAME. Em componentes de front-end, use getApplicationVariable('VARIABLE_NAME') de twenty-sdk/front-component. Variáveis marcadas com isSecret: true sã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 em defineApplication().
  • 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 defaultRoleUniversalIdentifier explicitamente ainda é compatível para retrocompatibilidade, mas foi preterido em favor de defineApplicationRole().
  • serverVariables são configurações e segredos com escopo de instância (por exemplo, chaves de API). Ao contrário de applicationVariables, 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

Tanto applicationVariables 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
O 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:
O mesmo se aplica a componentes de front-end que leem valores via getApplicationVariable('VARIABLE_NAME') — o valor retornado é uma string; converta conforme necessário.

Papel de função padrão

O papel declarado com defineApplicationRole() 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.
Ao criar um novo app com o scaffold, a CLI cria um arquivo de papel inicial em 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.