From e623d6fd8832bd633784f479b0e2a680846ccbe8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 4 Aug 2026 05:39:19 +0200 Subject: [PATCH] i18n - docs translations (#23729) Created by Github action Co-authored-by: github-actions --- .../extend/apps/logic/connections.mdx | 39 +++++++++++++++++++ .../extend/apps/logic/connections.mdx | 39 +++++++++++++++++++ .../extend/apps/logic/connections.mdx | 39 +++++++++++++++++++ .../extend/apps/logic/connections.mdx | 39 +++++++++++++++++++ .../extend/apps/logic/connections.mdx | 39 +++++++++++++++++++ .../extend/apps/logic/connections.mdx | 39 +++++++++++++++++++ .../extend/apps/logic/connections.mdx | 39 +++++++++++++++++++ .../extend/apps/logic/connections.mdx | 39 +++++++++++++++++++ .../extend/apps/logic/connections.mdx | 39 +++++++++++++++++++ .../extend/apps/logic/connections.mdx | 39 +++++++++++++++++++ 10 files changed, 390 insertions(+) diff --git a/packages/twenty-docs/l/ar/developers/extend/apps/logic/connections.mdx b/packages/twenty-docs/l/ar/developers/extend/apps/logic/connections.mdx index ec9c7ae3e6..3843ee096f 100644 --- a/packages/twenty-docs/l/ar/developers/extend/apps/logic/connections.mdx +++ b/packages/twenty-docs/l/ar/developers/extend/apps/logic/connections.mdx @@ -45,6 +45,9 @@ export default defineConnectionProvider({ // Optional: a logic function in this app to run right after a connection is // established. See "Run a logic function on connect". // onConnectLogicFunction: { universalIdentifier: '3a2b1c0d-...-...' }, + // Optional: a logic function in this app to run right after a connection is + // removed. See "Run a logic function on disconnect". + // onDisconnectLogicFunction: { universalIdentifier: '4d5e6f70-...-...' }, }); ``` @@ -124,6 +127,42 @@ type OnConnectPayload = { + + +أي شيء يطالب به تطبيق ما وقت الاتصال يجب تحريره عندما يزول الاتصال. على سبيل المثال، يجب على تكامل Slack الذي يطالب بـ `team_id` عند الاتصال تحرير تلك المطالبة حتى تتمكن مساحة عمل أخرى من ربط فريق Slack نفسه. عيِّن `onDisconnectLogicFunction` للإشارة إلى دالة منطقية في التطبيق نفسه، وسيتم تشغيلها مباشرة بعد حذف `ConnectedAccount`. + +```ts src/connection-providers/slack-connection.ts +export default defineConnectionProvider({ + universalIdentifier: '...', + name: 'slack', + displayName: 'Slack', + type: 'oauth', + oauth: { + /* ... */ + }, + // Runs releaseSlackTeam after every Slack disconnection. + onDisconnectLogicFunction: { + universalIdentifier: '4470aba8-5ff5-4800-88db-2a427cd8677c', + }, +}); +``` + +تمامًا مثل خطاف on-connect، يتم تشغيله **بشكل غير متزامن في مساحة العمل التي يتم قطع اتصالها** ولا يمنع عملية قطع الاتصال أبدًا. يتلقى المعالج نفس شكل الحمولة: + +```ts +type OnDisconnectPayload = { + connectionProviderId: string; + connectionProviderName: string; // e.g. 'slack' + connectedAccountId: string; +}; +``` + +يكون `ConnectedAccount` قد أُزيل بالفعل عندما يتم تشغيل الخطاف، لذلك لم يعد `getConnection(connectedAccountId)` يُرجع نتيجة. أي شيء يحتاجه إجراء التنظيف (مثل `team_id` أو معرّف اشتراك خارجي) يجب أن يكون قد كُتب في [مخزن القيم المفتاحية](/l/ar/developers/extend/apps/logic/key-value-store) في وقت الاتصال، مع استخدام `connectedAccountId` كمفتاح. + +يتم إطلاق الخطاف عندما تتم إزالة اتصال بمفرده. يؤدي إلغاء تثبيت التطبيق إلى حذف اتصالاته عبر حذف متسلسل في قاعدة البيانات، لذلك لا يتم تشغيل الخطاف في هذه الحالة. صرّح عن `uninstallLogicFunction` على `defineApplication` لذلك المسار: يتم تشغيله قبل حذف بيانات التعريف الخاصة بالتطبيق، لذا لا يزال بإمكانه استدعاء `listConnections` وتنظيف أي شيء متبقٍّ. + + + داخل معالج دالة منطقية، تُرجِع `listConnections({ providerName })` صفوف `ConnectedAccount` الخاصة بهذا التطبيق للمزوّد المحدَّد، مع رموز وصول محدَّثة. diff --git a/packages/twenty-docs/l/cs/developers/extend/apps/logic/connections.mdx b/packages/twenty-docs/l/cs/developers/extend/apps/logic/connections.mdx index 9a6fc75f02..51740ba889 100644 --- a/packages/twenty-docs/l/cs/developers/extend/apps/logic/connections.mdx +++ b/packages/twenty-docs/l/cs/developers/extend/apps/logic/connections.mdx @@ -45,6 +45,9 @@ export default defineConnectionProvider({ // Optional: a logic function in this app to run right after a connection is // established. See "Run a logic function on connect". // onConnectLogicFunction: { universalIdentifier: '3a2b1c0d-...-...' }, + // Optional: a logic function in this app to run right after a connection is + // removed. See "Run a logic function on disconnect". + // onDisconnectLogicFunction: { universalIdentifier: '4d5e6f70-...-...' }, }); ``` @@ -124,6 +127,42 @@ Odtud použijte `getConnection(connectedAccountId)` ke čtení čerstvého pří + + +Cokoli, co aplikace nárokuje v čase připojení, musí být uvolněno, jakmile připojení zanikne. Integrace Slacku, která si například při připojení nárokuje `team_id`, musí tento nárok uvolnit, aby se mohl jiný pracovní prostor připojit ke stejnému týmu ve Slacku. Nastavte `onDisconnectLogicFunction` tak, aby odkazovala na logickou funkci ve stejné aplikaci, a ta se spustí hned poté, co je `ConnectedAccount` smazán. + +```ts src/connection-providers/slack-connection.ts +export default defineConnectionProvider({ + universalIdentifier: '...', + name: 'slack', + displayName: 'Slack', + type: 'oauth', + oauth: { + /* ... */ + }, + // Runs releaseSlackTeam after every Slack disconnection. + onDisconnectLogicFunction: { + universalIdentifier: '4470aba8-5ff5-4800-88db-2a427cd8677c', + }, +}); +``` + +Stejně jako hook pro připojení běží **asynchronně v odpojovaném pracovním prostoru** a nikdy neblokuje odpojení. Handler dostává stejný tvar payloadu: + +```ts +type OnDisconnectPayload = { + connectionProviderId: string; + connectionProviderName: string; // e.g. 'slack' + connectedAccountId: string; +}; +``` + +`ConnectedAccount` už v době spuštění hooku neexistuje, takže `getConnection(connectedAccountId)` už nic nevrátí. Všechno, co čištění potřebuje (například `team_id`, externí ID předplatného), muselo být při připojení zapsáno do [key-value store](/l/cs/developers/extend/apps/logic/key-value-store) pod klíčem `connectedAccountId`. + +Hook se spustí, když se připojení odstraní samostatně. Odinstalace aplikace zruší její připojení pomocí kaskádového mazání v databázi, takže se hook v tomto případě nespustí. Pro tento případ deklarujte `uninstallLogicFunction` na `defineApplication`: spustí se před tím, než jsou smazána metadata aplikace, takže může stále volat `listConnections` a dočistit vše, co zůstalo. + + + Uvnitř handleru logické funkce vrací `listConnections({ providerName })` řádky `ConnectedAccount` této aplikace pro daného poskytovatele s obnovenými přístupovými tokeny. diff --git a/packages/twenty-docs/l/de/developers/extend/apps/logic/connections.mdx b/packages/twenty-docs/l/de/developers/extend/apps/logic/connections.mdx index 9643d47c3c..4927967804 100644 --- a/packages/twenty-docs/l/de/developers/extend/apps/logic/connections.mdx +++ b/packages/twenty-docs/l/de/developers/extend/apps/logic/connections.mdx @@ -45,6 +45,9 @@ export default defineConnectionProvider({ // Optional: a logic function in this app to run right after a connection is // established. See "Run a logic function on connect". // onConnectLogicFunction: { universalIdentifier: '3a2b1c0d-...-...' }, + // Optional: a logic function in this app to run right after a connection is + // removed. See "Run a logic function on disconnect". + // onDisconnectLogicFunction: { universalIdentifier: '4d5e6f70-...-...' }, }); ``` @@ -124,6 +127,42 @@ Verwenden Sie von dort `getConnection(connectedAccountId)`, um das aktuelle Zugr + + +Alles, was eine App zum Zeitpunkt des Verbindungsaufbaus beansprucht, muss freigegeben werden, wenn die Verbindung endet. Eine Slack-Integration, die zum Beispiel beim Verbindungsaufbau eine `team_id` für sich beansprucht, muss diesen Anspruch wieder freigeben, damit ein anderer Arbeitsbereich dasselbe Slack-Team verbinden kann. Setze `onDisconnectLogicFunction` so, dass auf eine Logikfunktion in derselben App verwiesen wird; sie wird direkt nach dem Löschen des `ConnectedAccount` ausgeführt. + +```ts src/connection-providers/slack-connection.ts +export default defineConnectionProvider({ + universalIdentifier: '...', + name: 'slack', + displayName: 'Slack', + type: 'oauth', + oauth: { + /* ... */ + }, + // Runs releaseSlackTeam after every Slack disconnection. + onDisconnectLogicFunction: { + universalIdentifier: '4470aba8-5ff5-4800-88db-2a427cd8677c', + }, +}); +``` + +Wie der On-Connect-Hook läuft er **asynchron im Workspace, in dem die Trennung erfolgt**, und blockiert die Trennung nie. Der Handler erhält dieselbe Payload-Struktur: + +```ts +type OnDisconnectPayload = { + connectionProviderId: string; + connectionProviderName: string; // e.g. 'slack' + connectedAccountId: string; +}; +``` + +Der `ConnectedAccount` ist bereits entfernt, wenn der Hook ausgeführt wird, daher wird `getConnection(connectedAccountId)` nicht mehr aufgelöst. Alles, was die Bereinigung benötigt (eine `team_id`, eine externe Abonnement-ID), muss zum Zeitpunkt des Verbindungsaufbaus im [Key-Value-Store](/l/de/developers/extend/apps/logic/key-value-store) gespeichert worden sein, indiziert nach `connectedAccountId`. + +Der Hook wird ausgelöst, wenn eine Verbindung eigenständig entfernt wird. Die Deinstallation der App entfernt ihre Verbindungen hingegen über eine Datenbankkaskade, sodass der Hook dort nicht ausgeführt wird. Deklariere eine `uninstallLogicFunction` in `defineApplication` für diesen Pfad: Sie wird ausgeführt, bevor die Metadaten der App gelöscht werden, sodass sie weiterhin `listConnections` aufrufen und den verbleibenden Rest bereinigen kann. + + + Innerhalb eines Logikfunktions-Handlers gibt `listConnections({ providerName })` die `ConnectedAccount`-Zeilen dieser App für den angegebenen Anbieter zurück, mit aktualisierten Zugriffstoken. diff --git a/packages/twenty-docs/l/es/developers/extend/apps/logic/connections.mdx b/packages/twenty-docs/l/es/developers/extend/apps/logic/connections.mdx index 89e561b44c..540ab69f69 100644 --- a/packages/twenty-docs/l/es/developers/extend/apps/logic/connections.mdx +++ b/packages/twenty-docs/l/es/developers/extend/apps/logic/connections.mdx @@ -45,6 +45,9 @@ export default defineConnectionProvider({ // Optional: a logic function in this app to run right after a connection is // established. See "Run a logic function on connect". // onConnectLogicFunction: { universalIdentifier: '3a2b1c0d-...-...' }, + // Optional: a logic function in this app to run right after a connection is + // removed. See "Run a logic function on disconnect". + // onDisconnectLogicFunction: { universalIdentifier: '4d5e6f70-...-...' }, }); ``` @@ -124,6 +127,42 @@ A partir de ahí, usa `getConnection(connectedAccountId)` para leer el token de + + +Todo lo que una aplicación reclame en el momento de la conexión debe liberarse cuando la conexión se termina. Una integración de Slack que reclame un `team_id` al conectarse, por ejemplo, debe liberar esa reserva para que otro espacio de trabajo pueda conectar ese mismo espacio de trabajo de Slack. Establece `onDisconnectLogicFunction` para que haga referencia a una función de lógica en la misma aplicación, y se ejecutará justo después de que se elimine el `ConnectedAccount`. + +```ts src/connection-providers/slack-connection.ts +export default defineConnectionProvider({ + universalIdentifier: '...', + name: 'slack', + displayName: 'Slack', + type: 'oauth', + oauth: { + /* ... */ + }, + // Runs releaseSlackTeam after every Slack disconnection. + onDisconnectLogicFunction: { + universalIdentifier: '4470aba8-5ff5-4800-88db-2a427cd8677c', + }, +}); +``` + +Al igual que el hook de conexión, se ejecuta **de forma asíncrona en el espacio de trabajo que se está desconectando** y nunca bloquea la desconexión. El controlador recibe la misma estructura de payload: + +```ts +type OnDisconnectPayload = { + connectionProviderId: string; + connectionProviderName: string; // e.g. 'slack' + connectedAccountId: string; +}; +``` + +El `ConnectedAccount` ya ha desaparecido cuando se ejecuta el hook, por lo que `getConnection(connectedAccountId)` ya no se resuelve. Cualquier cosa que la limpieza necesite (un `team_id`, un id de suscripción externa) debe haberse escrito en el [almacén de claves y valores](/l/es/developers/extend/apps/logic/key-value-store) en el momento de la conexión, usando `connectedAccountId` como clave. + +El hook se dispara cuando una conexión se elimina por sí sola. Desinstalar la app elimina sus conexiones mediante una cascada de base de datos, por lo que el hook no se ejecuta en ese caso. Declara una `uninstallLogicFunction` en `defineApplication` para esa ruta: se ejecuta antes de que se eliminen los metadatos de la app, por lo que todavía puede llamar a `listConnections` y limpiar lo que quede. + + + Dentro de un controlador de función de lógica, `listConnections({ providerName })` devuelve las filas `ConnectedAccount` de esta aplicación para el proveedor indicado, con tokens de acceso actualizados. diff --git a/packages/twenty-docs/l/fr/developers/extend/apps/logic/connections.mdx b/packages/twenty-docs/l/fr/developers/extend/apps/logic/connections.mdx index 29bedf5e91..4a9872a56d 100644 --- a/packages/twenty-docs/l/fr/developers/extend/apps/logic/connections.mdx +++ b/packages/twenty-docs/l/fr/developers/extend/apps/logic/connections.mdx @@ -45,6 +45,9 @@ export default defineConnectionProvider({ // Optional: a logic function in this app to run right after a connection is // established. See "Run a logic function on connect". // onConnectLogicFunction: { universalIdentifier: '3a2b1c0d-...-...' }, + // Optional: a logic function in this app to run right after a connection is + // removed. See "Run a logic function on disconnect". + // onDisconnectLogicFunction: { universalIdentifier: '4d5e6f70-...-...' }, }); ``` @@ -124,6 +127,42 @@ type OnConnectPayload = { + + +Tout ce qu’une application revendique au moment de la connexion doit être libéré lorsque la connexion est supprimée. Une intégration Slack qui revendique un `team_id` lors de la connexion, par exemple, doit libérer cette revendication afin qu’un autre espace de travail puisse connecter la même équipe Slack. Définissez `onDisconnectLogicFunction` pour référencer une fonction logique dans la même application, et elle s’exécute juste après la suppression du `ConnectedAccount`. + +```ts src/connection-providers/slack-connection.ts +export default defineConnectionProvider({ + universalIdentifier: '...', + name: 'slack', + displayName: 'Slack', + type: 'oauth', + oauth: { + /* ... */ + }, + // Runs releaseSlackTeam after every Slack disconnection. + onDisconnectLogicFunction: { + universalIdentifier: '4470aba8-5ff5-4800-88db-2a427cd8677c', + }, +}); +``` + +Comme le hook on-connect, il s’exécute **de manière asynchrone dans l’espace de travail en cours de déconnexion** et ne bloque jamais la déconnexion. Le gestionnaire reçoit la même structure de payload : + +```ts +type OnDisconnectPayload = { + connectionProviderId: string; + connectionProviderName: string; // e.g. 'slack' + connectedAccountId: string; +}; +``` + +Le `ConnectedAccount` n’existe déjà plus au moment où le hook s’exécute, donc `getConnection(connectedAccountId)` ne se résout plus. Tout ce dont le nettoyage a besoin (un `team_id`, un identifiant d’abonnement externe) doit avoir été écrit dans le [key-value store](/l/fr/developers/extend/apps/logic/key-value-store) au moment de la connexion, indexé par `connectedAccountId`. + +Le hook est déclenché lorsqu’une connexion est supprimée directement. La désinstallation de l’application supprime ses connexions via une cascade de base de données à la place, donc le hook ne s’exécute pas dans ce cas. Déclarez un `uninstallLogicFunction` sur `defineApplication` pour ce cas : il s’exécute avant que les métadonnées de l’application ne soient supprimées, ce qui lui permet encore d’appeler `listConnections` et de nettoyer tout ce qui reste. + + + Dans un gestionnaire de fonction logique, `listConnections({ providerName })` renvoie les lignes `ConnectedAccount` de cette application pour le fournisseur donné, avec des jetons d'accès actualisés. diff --git a/packages/twenty-docs/l/it/developers/extend/apps/logic/connections.mdx b/packages/twenty-docs/l/it/developers/extend/apps/logic/connections.mdx index 0f94a5b1ab..a185d6ed3b 100644 --- a/packages/twenty-docs/l/it/developers/extend/apps/logic/connections.mdx +++ b/packages/twenty-docs/l/it/developers/extend/apps/logic/connections.mdx @@ -45,6 +45,9 @@ export default defineConnectionProvider({ // Optional: a logic function in this app to run right after a connection is // established. See "Run a logic function on connect". // onConnectLogicFunction: { universalIdentifier: '3a2b1c0d-...-...' }, + // Optional: a logic function in this app to run right after a connection is + // removed. See "Run a logic function on disconnect". + // onDisconnectLogicFunction: { universalIdentifier: '4d5e6f70-...-...' }, }); ``` @@ -124,6 +127,42 @@ Da lì usa `getConnection(connectedAccountId)` per leggere il token di accesso a + + +Qualsiasi elemento che un'app rivendica al momento della connessione deve essere rilasciato quando la connessione viene meno. Un'integrazione Slack che, ad esempio, rivendica un `team_id` al momento della connessione deve rilasciare tale rivendicazione, in modo che un'altra area di lavoro possa connettere lo stesso team Slack. Imposta `onDisconnectLogicFunction` per fare riferimento a una funzione logica nella stessa app, e questa verrà eseguita subito dopo l'eliminazione di `ConnectedAccount`. + +```ts src/connection-providers/slack-connection.ts +export default defineConnectionProvider({ + universalIdentifier: '...', + name: 'slack', + displayName: 'Slack', + type: 'oauth', + oauth: { + /* ... */ + }, + // Runs releaseSlackTeam after every Slack disconnection. + onDisconnectLogicFunction: { + universalIdentifier: '4470aba8-5ff5-4800-88db-2a427cd8677c', + }, +}); +``` + +Come l'hook on-connect, viene eseguito **in modo asincrono nell'area di lavoro in fase di disconnessione** e non blocca mai la disconnessione. L'handler riceve la stessa struttura del payload: + +```ts +type OnDisconnectPayload = { + connectionProviderId: string; + connectionProviderName: string; // e.g. 'slack' + connectedAccountId: string; +}; +``` + +Il `ConnectedAccount` è già stato rimosso quando l'hook viene eseguito, quindi `getConnection(connectedAccountId)` non restituisce più alcun risultato. Tutto ciò di cui la procedura di cleanup ha bisogno (un `team_id`, un id di sottoscrizione esterna) deve essere stato scritto nello [store chiave-valore](/l/it/developers/extend/apps/logic/key-value-store) al momento della connessione, con chiave `connectedAccountId`. + +L'hook viene attivato quando una connessione viene rimossa autonomamente. La disinstallazione dell'app elimina le sue connessioni tramite una cascata del database, quindi in questo caso l'hook non viene eseguito. Dichiara una `uninstallLogicFunction` su `defineApplication` per quel percorso: viene eseguita prima che i metadati dell'app vengano eliminati, così può ancora chiamare `listConnections` ed eseguire il cleanup di ciò che resta. + + + All'interno di un gestore di funzione di logica, `listConnections({ providerName })` restituisce le righe `ConnectedAccount` di questa app per il provider indicato, con token di accesso aggiornati. diff --git a/packages/twenty-docs/l/ja/developers/extend/apps/logic/connections.mdx b/packages/twenty-docs/l/ja/developers/extend/apps/logic/connections.mdx index 92c4353daa..bde012bb3b 100644 --- a/packages/twenty-docs/l/ja/developers/extend/apps/logic/connections.mdx +++ b/packages/twenty-docs/l/ja/developers/extend/apps/logic/connections.mdx @@ -45,6 +45,9 @@ export default defineConnectionProvider({ // Optional: a logic function in this app to run right after a connection is // established. See "Run a logic function on connect". // onConnectLogicFunction: { universalIdentifier: '3a2b1c0d-...-...' }, + // Optional: a logic function in this app to run right after a connection is + // removed. See "Run a logic function on disconnect". + // onDisconnectLogicFunction: { universalIdentifier: '4d5e6f70-...-...' }, }); ``` @@ -124,6 +127,42 @@ type OnConnectPayload = { + + +アプリが接続時に確保したものは、接続が解除されたときに必ず解放しなければなりません。 例えば、接続時に `team_id` を確保する Slack 連携は、その確保を解放して、別のワークスペースが同じ Slack チームを接続できるようにしなければなりません。 同じアプリ内のロジック関数を参照するように `onDisconnectLogicFunction` を設定すると、`ConnectedAccount` が削除された直後にその関数が実行されます。 + +```ts src/connection-providers/slack-connection.ts +export default defineConnectionProvider({ + universalIdentifier: '...', + name: 'slack', + displayName: 'Slack', + type: 'oauth', + oauth: { + /* ... */ + }, + // Runs releaseSlackTeam after every Slack disconnection. + onDisconnectLogicFunction: { + universalIdentifier: '4470aba8-5ff5-4800-88db-2a427cd8677c', + }, +}); +``` + +on-connect フックと同様に、**切断処理中のワークスペースで非同期に実行され**、切断をブロックすることはありません。 ハンドラーは同じペイロード構造を受け取ります: + +```ts +type OnDisconnectPayload = { + connectionProviderId: string; + connectionProviderName: string; // e.g. 'slack' + connectedAccountId: string; +}; +``` + +フックが実行される時点では `ConnectedAccount` はすでに削除されているため、`getConnection(connectedAccountId)` はもう解決されません。 クリーンアップに必要なもの(`team_id` や外部サブスクリプション ID など)は、接続時に `connectedAccountId` をキーとして [key-value store](/l/ja/developers/extend/apps/logic/key-value-store) に書き込まれている必要があります。 + +このフックは、接続が単独で削除されたときに発火します。 アプリをアンインストールすると、代わりにデータベースのカスケードによって接続が削除されるため、その場合はこのフックは実行されません。 その経路用に `defineApplication` 上で `uninstallLogicFunction` を宣言します。これはアプリのメタデータが削除される前に実行されるため、まだ `listConnections` を呼び出して残っているものをクリーンアップできます。 + + + ロジック関数ハンドラー内では、`listConnections({ providerName })` が指定したプロバイダーに対するこのアプリの `ConnectedAccount` 行を、更新済みのアクセストークン付きで返します。 diff --git a/packages/twenty-docs/l/ko/developers/extend/apps/logic/connections.mdx b/packages/twenty-docs/l/ko/developers/extend/apps/logic/connections.mdx index 06a58b0a41..3493a0af29 100644 --- a/packages/twenty-docs/l/ko/developers/extend/apps/logic/connections.mdx +++ b/packages/twenty-docs/l/ko/developers/extend/apps/logic/connections.mdx @@ -45,6 +45,9 @@ export default defineConnectionProvider({ // Optional: a logic function in this app to run right after a connection is // established. See "Run a logic function on connect". // onConnectLogicFunction: { universalIdentifier: '3a2b1c0d-...-...' }, + // Optional: a logic function in this app to run right after a connection is + // removed. See "Run a logic function on disconnect". + // onDisconnectLogicFunction: { universalIdentifier: '4d5e6f70-...-...' }, }); ``` @@ -124,6 +127,42 @@ type OnConnectPayload = { + + +앱이 연결 시점에 확보(클레임)한 모든 항목은 연결이 해제될 때 반드시 해제되어야 합니다. 예를 들어, 연결 시점에 `team_id`를 확보(클레임)하는 Slack 연동은, 동일한 Slack 팀에 다른 워크스페이스가 연결될 수 있도록 그 클레임을 해제해야 합니다. `onDisconnectLogicFunction`을 동일한 앱의 로직 함수를 참조하도록 설정하면, `ConnectedAccount`가 삭제된 직후 해당 로직 함수가 실행됩니다. + +```ts src/connection-providers/slack-connection.ts +export default defineConnectionProvider({ + universalIdentifier: '...', + name: 'slack', + displayName: 'Slack', + type: 'oauth', + oauth: { + /* ... */ + }, + // Runs releaseSlackTeam after every Slack disconnection. + onDisconnectLogicFunction: { + universalIdentifier: '4470aba8-5ff5-4800-88db-2a427cd8677c', + }, +}); +``` + +on-connect 훅과 마찬가지로 **연결이 끊기는 워크스페이스에서 비동기적으로 실행**되며, 연결 해제를 차단(block)하지 않습니다. 핸들러는 동일한 형태의 페이로드를 전달받습니다: + +```ts +type OnDisconnectPayload = { + connectionProviderId: string; + connectionProviderName: string; // e.g. 'slack' + connectedAccountId: string; +}; +``` + +훅이 실행될 때는 `ConnectedAccount`가 이미 제거된 상태이므로 `getConnection(connectedAccountId)`는 더 이상 해결(resolve)되지 않습니다. 정리(cleanup)에 필요한 모든 것(예: `team_id`, 외부 구독 ID)은 연결 시점에 `connectedAccountId`를 키로 사용해 [key-value store](/l/ko/developers/extend/apps/logic/key-value-store)에 미리 기록되어 있어야 합니다. + +이 훅은 연결이 자체적으로 제거될 때 실행됩니다. 앱을 제거(uninstall)하면, 데이터베이스의 CASCADE를 통해 연결이 삭제되므로 해당 경우에는 이 훅이 실행되지 않습니다. 그 경로에 대해 `defineApplication`에 `uninstallLogicFunction`을 선언하세요. 이 함수는 앱의 메타데이터가 삭제되기 전에 실행되므로, 아직 `listConnections`를 호출해 남은 항목을 정리(clean up)할 수 있습니다. + + + 로직 함수 핸들러 내부에서 `listConnections({ providerName })`는 지정된 제공자에 대한 이 앱의 `ConnectedAccount` 행을 갱신된 액세스 토큰과 함께 반환합니다. diff --git a/packages/twenty-docs/l/ro/developers/extend/apps/logic/connections.mdx b/packages/twenty-docs/l/ro/developers/extend/apps/logic/connections.mdx index 874f842ffb..52e7f660c4 100644 --- a/packages/twenty-docs/l/ro/developers/extend/apps/logic/connections.mdx +++ b/packages/twenty-docs/l/ro/developers/extend/apps/logic/connections.mdx @@ -45,6 +45,9 @@ export default defineConnectionProvider({ // Optional: a logic function in this app to run right after a connection is // established. See "Run a logic function on connect". // onConnectLogicFunction: { universalIdentifier: '3a2b1c0d-...-...' }, + // Optional: a logic function in this app to run right after a connection is + // removed. See "Run a logic function on disconnect". + // onDisconnectLogicFunction: { universalIdentifier: '4d5e6f70-...-...' }, }); ``` @@ -124,6 +127,42 @@ De acolo folosește `getConnection(connectedAccountId)` pentru a citi tokenul de + + +Orice revendică o aplicație la momentul conectării trebuie eliberat atunci când conexiunea este eliminată. O integrare Slack care revendică un `team_id` la conectare, de exemplu, trebuie să elibereze acea revendicare astfel încât un alt spațiu de lucru să poată conecta aceeași echipă Slack. Setează `onDisconnectLogicFunction` pentru a face referire la o funcție logică din aceeași aplicație, iar aceasta rulează imediat după ce `ConnectedAccount` este șters. + +```ts src/connection-providers/slack-connection.ts +export default defineConnectionProvider({ + universalIdentifier: '...', + name: 'slack', + displayName: 'Slack', + type: 'oauth', + oauth: { + /* ... */ + }, + // Runs releaseSlackTeam after every Slack disconnection. + onDisconnectLogicFunction: { + universalIdentifier: '4470aba8-5ff5-4800-88db-2a427cd8677c', + }, +}); +``` + +La fel ca hook-ul on-connect, acesta rulează **asincron în spațiul de lucru care se deconectează** și nu blochează niciodată deconectarea. Handler-ul primește aceeași structură de payload: + +```ts +type OnDisconnectPayload = { + connectionProviderId: string; + connectionProviderName: string; // e.g. 'slack' + connectedAccountId: string; +}; +``` + +`ConnectedAccount` nu mai există atunci când rulează hook-ul, astfel încât `getConnection(connectedAccountId)` nu se mai rezolvă. Tot ceea ce îi este necesar procesului de curățare (un `team_id`, un ID extern de abonament) trebuie să fi fost scris în [key-value store](/l/ro/developers/extend/apps/logic/key-value-store) la momentul conectării, indexat după `connectedAccountId`. + +Hook-ul este declanșat atunci când o conexiune este eliminată în mod direct. Dezinstalarea aplicației elimină conexiunile acesteia printr-un mecanism în cascadă în baza de date, astfel încât hook-ul nu rulează în acest caz. Declară un `uninstallLogicFunction` pe `defineApplication` pentru acel flux: acesta rulează înainte ca metadatele aplicației să fie șterse, astfel încât poate apela în continuare `listConnections` și poate curăța tot ce a mai rămas. + + + În interiorul unui handler de funcție logică, `listConnections({ providerName })` returnează înregistrările `ConnectedAccount` ale acestei aplicații pentru furnizorul dat, cu tokenuri de acces reîmprospătate. diff --git a/packages/twenty-docs/l/tr/developers/extend/apps/logic/connections.mdx b/packages/twenty-docs/l/tr/developers/extend/apps/logic/connections.mdx index 029f72148e..f20bafb96f 100644 --- a/packages/twenty-docs/l/tr/developers/extend/apps/logic/connections.mdx +++ b/packages/twenty-docs/l/tr/developers/extend/apps/logic/connections.mdx @@ -45,6 +45,9 @@ export default defineConnectionProvider({ // Optional: a logic function in this app to run right after a connection is // established. See "Run a logic function on connect". // onConnectLogicFunction: { universalIdentifier: '3a2b1c0d-...-...' }, + // Optional: a logic function in this app to run right after a connection is + // removed. See "Run a logic function on disconnect". + // onDisconnectLogicFunction: { universalIdentifier: '4d5e6f70-...-...' }, }); ``` @@ -124,6 +127,42 @@ Buradan `getConnection(connectedAccountId)` kullanarak yeni erişim belirtecini + + +Bir uygulamanın bağlanma anında talep ettiği her şey, bağlantı sona erdiğinde serbest bırakılmalıdır. Örneğin, bağlanırken bir `team_id` talep eden bir Slack entegrasyonu, başka bir çalışma alanının aynı Slack ekibini bağlayabilmesi için bu talebi serbest bırakmak zorundadır. Aynı uygulamadaki bir mantık fonksiyonuna referans vermesi için `onDisconnectLogicFunction` değerini ayarlayın; böylece `ConnectedAccount` silindikten hemen sonra çalışır. + +```ts src/connection-providers/slack-connection.ts +export default defineConnectionProvider({ + universalIdentifier: '...', + name: 'slack', + displayName: 'Slack', + type: 'oauth', + oauth: { + /* ... */ + }, + // Runs releaseSlackTeam after every Slack disconnection. + onDisconnectLogicFunction: { + universalIdentifier: '4470aba8-5ff5-4800-88db-2a427cd8677c', + }, +}); +``` + +Bağlanma kancası gibi, **bağlantısı kesilmekte olan çalışma alanında eşzamansız olarak** çalışır ve bağlantı kesme işlemini asla engellemez. İşleyici aynı payload biçimini alır: + +```ts +type OnDisconnectPayload = { + connectionProviderId: string; + connectionProviderName: string; // e.g. 'slack' + connectedAccountId: string; +}; +``` + +Kanca çalıştığında `ConnectedAccount` zaten kaldırılmıştır, bu yüzden `getConnection(connectedAccountId)` artık sonuç döndürmez. Temizliğin ihtiyaç duyduğu her şey (`team_id`, harici abonelik kimliği gibi) bağlanma sırasında, `connectedAccountId` anahtarıyla [key-value store](/l/tr/developers/extend/apps/logic/key-value-store) içine yazılmış olmalıdır. + +Kanca, bir bağlantı kendi başına kaldırıldığında tetiklenir. Uygulamanın kaldırılması, bağlantılarını bunun yerine bir veritabanı zincirleme silme işlemiyle kaldırır, bu nedenle kanca burada çalışmaz. Bu yol için `defineApplication` üzerinde bir `uninstallLogicFunction` bildirin: bu işlev, uygulamanın meta verileri silinmeden önce çalışır, böylece hâlâ `listConnections` çağırabilir ve geride kalan her şeyi temizleyebilir. + + + Bir mantık işlevi işleyicisi içinde, `listConnections({ providerName })`, verilen sağlayıcı için bu uygulamanın `ConnectedAccount` satırlarını, yenilenmiş erişim belirteçleriyle döndürür.