defineConnectionProvider({ type: 'oauth', ... }) não precisarão migrar.
defineConnectionProvider
Declare como as conexões do seu app são obtidas
defineConnectionProvider
Declare como as conexões do seu app são obtidas
Um provedor de conexão descreve o handshake OAuth de que seu app precisa. O usuário clica em “Adicionar conexão” nas configurações do seu app, conclui a tela de consentimento do provedor e uma linha Pontos-chave:
ConnectedAccount é criada no seu workspace.Uma configuração funcional precisa de dois arquivos — o provedor de conexão e uma declaração correspondente de serverVariables em defineApplication que contém as credenciais do cliente OAuth.src/connection-providers/linear-connection.ts
src/application.config.ts
nameé a string de identificador exclusivo usada emlistConnections({ providerName })(kebab-case, deve corresponder a^[a-z][a-z0-9-]*$).displayNameaparece na aba de configurações do app e na lista de ferramentas de IA.clientIdVariable/clientSecretVariablesão nomes, não valores — devem corresponder às chaves declaradas emdefineApplication.serverVariables. Osclient_ideclient_secretreais são inseridos pelo administrador do servidor por meio da interface de registro do app e nunca são versionados no seu repositório.- Use
serverVariables(nãoapplicationVariables) — as credenciais OAuth são do servidor como um todo e há um app OAuth por servidor do Twenty. - Até que ambos os
serverVariablessejam preenchidos, a aba de configurações do app mostra uma dica “precisa de administrador do servidor” e o botão “Adicionar conexão” fica desativado. type: 'oauth'é o único valor compatível atualmente. O discriminador é compatível com versões futuras: tipos futuros ('pat','api-key', …) adicionarão novos blocos de subconfiguração ao lado deoauth.
Execute uma função lógica ao conectar
Reaja no momento em que uma conexão é estabelecida
Execute uma função lógica ao conectar
Reaja no momento em que uma conexão é estabelecida
Alguns provedores fornecem dados no momento da conexão que você precisa manter antes que a conexão possa ser usada — o exemplo clássico é o Slack, em que a resposta OAuth identifica o O hook é executado de forma assíncrona no workspace que está se conectando (ele é enfileirado, não aguardado), portanto um hook lento ou com falha nunca bloqueia ou quebra o callback OAuth — torne-o idempotente e faça com que ele mesmo gerencie suas próprias novas tentativas. O manipulador recebe:A partir daí, use
team_id do workspace pelo qual os eventos de entrada serão indexados. Defina onConnectLogicFunction para fazer referência a uma função lógica no mesmo app (pelo seu universalIdentifier), e ela será executada logo após o ConnectedAccount ser criado.src/connection-providers/slack-connection.ts
getConnection(connectedAccountId) para ler o token de acesso atualizado e chamar a API do provedor (por exemplo, Slack auth.test) ou persistir um mapeamento com o armazenamento de chave-valor.listConnections / getConnection
Use conexões a partir de uma função de lógica
listConnections / getConnection
Use conexões a partir de uma função de lógica
Dentro de um handler de função de lógica, Cada conexão tem:
listConnections({ providerName }) retorna as linhas ConnectedAccount deste app para o provedor fornecido, com tokens de acesso atualizados.src/logic-functions/handlers/create-linear-issue-handler.ts
Pontos-chave:
- Passe
{ providerName }para filtrar por provedor; omita para obter todas as conexões que este app possui em todos os provedores. - O servidor atualiza transparentemente o token de acesso antes de retornar. Seu handler sempre vê um token utilizável (ou
authFailedAtdefinido). getConnection(id)é o equivalente de uma única linha.
Visibilidade por usuário vs. compartilhada no workspace
Como os usuários escolhem entre credenciais privadas e compartilhadas
Visibilidade por usuário vs. compartilhada no workspace
Como os usuários escolhem entre credenciais privadas e compartilhadas
Quando um usuário clica em “Adicionar conexão”, é solicitado que escolha uma visibilidade:Várias conexões por (usuário, provedor) são permitidas, então o mesmo usuário pode manter “Linear pessoal” e “Linear de trabalho” lado a lado.
- Apenas para mim — a credencial é privada para o usuário que a conectou. Qualquer função de lógica chamada em seu nome (gatilho de rota HTTP com
isAuthRequired: true) a vê; gatilhos cron e eventos de banco de dados não. - Compartilhada no workspace — qualquer membro do workspace pode usar a credencial. Gatilhos de cron / banco de dados também a veem, pois não há um usuário da requisição.
Configuração única do provedor
Registre seu app OAuth no serviço de terceiros
Configuração única do provedor
Registre seu app OAuth no serviço de terceiros
Para cada provedor de conexão, o administrador do servidor precisa primeiro registrar um app OAuth no serviço de terceiros.
- Acesse as configurações de desenvolvedor do provedor (por exemplo, https://linear.app/settings/api/applications/new).
- Defina a URI de redirecionamento como
\<SERVER_URL>/auth/apps/callback. - Copie o ID do cliente e o Segredo do cliente gerados.
- Abra o app instalado no Twenty como administrador do servidor → defina os valores nos
serverVariablescorrespondentes. - Os membros do workspace podem então adicionar conexões na seção Conexões de cada app.