Compare commits

..
Author SHA1 Message Date
Charles Bochet 9e02573c41 fix: make LayoutRenderingContext optional in FrontComponentRenderer
The settings custom tab doesn't operate within a page layout, so forcing
a LayoutRenderingProvider wrapper with an arbitrary layout type is wrong.
Instead, make the context optional in useFrontComponentExecutionContext
so consumers without a page layout simply get recordId: null.

Made-with: Cursor
2026-04-15 19:04:50 +02:00
Charles Bochet 386e2af3c5 Merge branch 'main' into fix/settings-custom-tab-layout-context 2026-04-15 18:50:40 +02:00
Lazare-42andClaude Opus 4.6 3b530d0e79 fix: wrap settings custom tab FrontComponentRenderer with LayoutRenderingProvider
FrontComponentRenderer uses useFrontComponentExecutionContext which calls
useLayoutRenderingContext(). Every other render site (side panel, command
menu, record pages) provides this context, but SettingsApplicationCustomTab
was missing it, causing a crash when opening the Custom tab in app settings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 12:53:15 +02:00
74 changed files with 89 additions and 606 deletions
@@ -87,7 +87,7 @@ jest.mock('@/ui/utilities/state/jotai/hooks/useSetAtomFamilyState', () => ({
}));
jest.mock('@/ui/layout/contexts/LayoutRenderingContext', () => ({
useLayoutRenderingContext: () => ({
useOptionalLayoutRenderingContext: () => ({
targetRecordIdentifier: mockTargetRecordIdentifier,
}),
}));
@@ -14,7 +14,7 @@ import { useNavigateSidePanel } from '@/side-panel/hooks/useNavigateSidePanel';
import { useSidePanelMenu } from '@/side-panel/hooks/useSidePanelMenu';
import { sidePanelSearchState } from '@/side-panel/states/sidePanelSearchState';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { useLayoutRenderingContext } from '@/ui/layout/contexts/LayoutRenderingContext';
import { useOptionalLayoutRenderingContext } from '@/ui/layout/contexts/LayoutRenderingContext';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { useSetAtomFamilyState } from '@/ui/utilities/state/jotai/hooks/useSetAtomFamilyState';
import { assertUnreachable, isDefined } from 'twenty-shared/utils';
@@ -123,12 +123,12 @@ export const useFrontComponentExecutionContext = ({
}
};
const { targetRecordIdentifier } = useLayoutRenderingContext();
const layoutRenderingContext = useOptionalLayoutRenderingContext();
const executionContext: FrontComponentExecutionContext = {
frontComponentId,
userId: currentUser?.id ?? null,
recordId: targetRecordIdentifier?.id ?? null,
recordId: layoutRenderingContext?.targetRecordIdentifier?.id ?? null,
};
const unmountFrontComponent: FrontComponentHostCommunicationApi['unmountFrontComponent'] =
@@ -1,3 +1,5 @@
import React, { useContext } from 'react';
import { type PageLayoutType } from '~/generated-metadata/graphql';
import { createRequiredContext } from '~/utils/createRequiredContext';
import { type TargetRecordIdentifier } from './TargetRecordIdentifier';
@@ -13,5 +15,26 @@ export type LayoutRenderingContextType = {
isInSidePanel: boolean;
};
export const [LayoutRenderingProvider, useLayoutRenderingContext] =
createRequiredContext<LayoutRenderingContextType>('LayoutRenderingContext');
const LayoutRenderingContext = React.createContext<
LayoutRenderingContextType | undefined
>(undefined);
export const LayoutRenderingProvider = LayoutRenderingContext.Provider;
export const useLayoutRenderingContext = (): LayoutRenderingContextType => {
const context = useContext(LayoutRenderingContext);
if (context === undefined) {
throw new Error(
'LayoutRenderingContext not found. Please wrap your component tree with <LayoutRenderingProvider>.',
);
}
return context;
};
export const useOptionalLayoutRenderingContext = ():
| LayoutRenderingContextType
| undefined => {
return useContext(LayoutRenderingContext);
};
@@ -2202,11 +2202,6 @@ msgstr "Misluk"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Funksiekode is onveranderd."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Te veel rekords om gelyktydig op te dateer."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Te veel versoeke. Probeer asseblief later weer."
@@ -2202,11 +2202,6 @@ msgstr "فشل"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "لم تتغير شيفرة الدالة."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "عدد السجلات المراد تحديثها دفعة واحدة كبير جداً."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "عدد كبير جداً من الطلبات. يُرجى المحاولة لاحقاً."
@@ -2202,11 +2202,6 @@ msgstr "Error"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "El codi de la funció no ha canviat."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Massa registres per actualitzar d'una vegada."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Massa sol·licituds. Torna-ho a provar més tard."
@@ -2202,11 +2202,6 @@ msgstr "Selhalo"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Kód funkce se nezměnil."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Příliš mnoho záznamů k aktualizaci najednou."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Příliš mnoho požadavků. Zkuste to prosím později."
@@ -2202,11 +2202,6 @@ msgstr "Mislykkedes"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Funktionskoden er uændret."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "For mange poster at opdatere på én gang."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "For mange forespørgsler. Prøv igen senere."
@@ -2202,11 +2202,6 @@ msgstr "Fehlgeschlagen"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Funktionscode ist unverändert."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Zu viele Datensätze, um sie auf einmal zu aktualisieren."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Zu viele Anfragen. Bitte versuchen Sie es später erneut."
@@ -2202,11 +2202,6 @@ msgstr "Απέτυχε"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Ο κώδικας της συνάρτησης δεν έχει αλλάξει."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Πάρα πολλές εγγραφές για ενημέρωση ταυτόχρονα."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Πάρα πολλά αιτήματα. Δοκιμάστε ξανά αργότερα."
@@ -2197,11 +2197,6 @@ msgstr "Failed"
msgid "Failed Insufficient Permissions"
msgstr "Failed Insufficient Permissions"
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr "Failed to build function dependencies."
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2751,11 +2746,6 @@ msgstr "Function code failed to compile."
msgid "Function code is unchanged."
msgstr "Function code is unchanged."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr "Function execution failed."
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7230,7 +7220,6 @@ msgid "Too many records to update at once."
msgstr "Too many records to update at once."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Too many requests. Please try again later."
@@ -2202,11 +2202,6 @@ msgstr "Fallido"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "El código de la función no ha cambiado."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Demasiados registros para actualizar de una sola vez."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Demasiadas solicitudes. Por favor, inténtelo de nuevo más tarde."
@@ -2202,11 +2202,6 @@ msgstr "Epäonnistui"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Funktion koodia ei ole muutettu."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Liian monta tietuetta päivitettäväksi kerralla."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Liian monta pyyntöä. Yritä myöhemmin uudelleen."
@@ -2202,11 +2202,6 @@ msgstr "Échec"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Le code de la fonction est inchangé."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Trop d'enregistrements à mettre à jour en une seule fois."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Trop de requêtes. Veuillez réessayer plus tard."
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -2202,11 +2202,6 @@ msgstr "<span dir=\"rtl\">נכשל</span>"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "קוד הפונקציה לא השתנה."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "יותר מדי רשומות לעדכון בבת אחת."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "יותר מדי בקשות. נא לנסות שוב מאוחר יותר."
@@ -2202,11 +2202,6 @@ msgstr "Sikertelen"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "A függvénykód nem változott."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Túl sok rekordot próbált frissíteni egyszerre."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Túl sok kérés. Kérjük, próbálja meg később."
@@ -2202,11 +2202,6 @@ msgstr ""
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Il codice della funzione è invariato."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Troppi record da aggiornare in una sola volta."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Troppe richieste. Per favore riprova più tardi."
@@ -2202,11 +2202,6 @@ msgstr "失敗"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "関数コードは変更されていません。"
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "一度に更新するレコードが多すぎます。"
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "リクエストが多すぎます。後でもう一度お試しください。"
@@ -2202,11 +2202,6 @@ msgstr "실패"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "함수 코드가 변경되지 않았습니다."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "한 번에 업데이트할 레코드가 너무 많습니다."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "요청이 너무 많습니다. 나중에 다시 시도해 주세요."
@@ -2202,11 +2202,6 @@ msgstr "Mislukt"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Functiecode is ongewijzigd."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Te veel records om in één keer bij te werken."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Te veel aanvragen. Probeer het later opnieuw."
@@ -2202,11 +2202,6 @@ msgstr "Mislyktes"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Funksjonskode er uendret."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "For mange oppføringer å oppdatere på én gang."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "For mange forespørsler. Vennligst prøv igjen senere."
@@ -2202,11 +2202,6 @@ msgstr "Niepowodzenie"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Kod funkcji nie został zmieniony."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Zbyt wiele rekordów do jednoczesnej aktualizacji."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Zbyt wiele żądań. Spróbuj ponownie później."
@@ -2197,11 +2197,6 @@ msgstr ""
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2751,11 +2746,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr ""
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7230,7 +7220,6 @@ msgid "Too many records to update at once."
msgstr ""
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr ""
@@ -2202,11 +2202,6 @@ msgstr ""
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "O código da função não foi alterado."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Muitos registros para atualizar de uma só vez."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Muitas solicitações. Tente novamente mais tarde."
@@ -2202,11 +2202,6 @@ msgstr "Falhou"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "O código da função não foi alterado."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Muitos registros para atualizar de uma só vez."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Muitas solicitações. Tente novamente mais tarde."
@@ -2202,11 +2202,6 @@ msgstr "Eșuat"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Codul funcției nu s-a schimbat."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Prea multe înregistrări de actualizat deodată."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Prea multe cereri. Vă rugăm să încercați mai târziu."
@@ -2202,11 +2202,6 @@ msgstr "Не удалось"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Код функции не изменился."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Слишком много записей для обновления за один раз."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Слишком много запросов. Пожалуйста, попробуйте позже."
@@ -2202,11 +2202,6 @@ msgstr ""
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Код функције је непромењен."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Превише записа за ажурирање одједном."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Превише захтева. Покушајте поново касније."
@@ -2202,11 +2202,6 @@ msgstr "Misslyckades"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Funktionskoden är oförändrad."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7241,7 +7231,6 @@ msgid "Too many records to update at once."
msgstr "För många poster att uppdatera på en gång."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "För många förfrågningar. Försök igen senare."
@@ -2202,11 +2202,6 @@ msgstr "Başarısız"
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "İşlev kodu değiştirilmemiş."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Tek seferde güncellenecek çok fazla kayıt var."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Çok fazla istek. Lütfen daha sonra tekrar deneyin."
@@ -2202,11 +2202,6 @@ msgstr ""
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Код функції не змінено."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Надто багато записів для одночасного оновлення."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Надто багато запитів. Будь ласка, спробуйте пізніше."
@@ -2202,11 +2202,6 @@ msgstr ""
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "Mã hàm không thay đổi."
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "Quá nhiều bản ghi cần cập nhật cùng lúc."
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "Quá nhiều yêu cầu. Vui lòng thử lại sau."
@@ -2202,11 +2202,6 @@ msgstr ""
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "函数代码未更改。"
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "一次更新的记录过多。"
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "请求过多。请稍后再试。"
@@ -2202,11 +2202,6 @@ msgstr ""
msgid "Failed Insufficient Permissions"
msgstr ""
#. js-lingui-id: rl11Jd
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Failed to build function dependencies."
msgstr ""
#. js-lingui-id: E7Dsiq
#: src/engine/metadata-modules/ai/ai-agent-monitor/resolvers/agent-turn.resolver.ts
msgid "Failed to create evaluation. Please try again."
@@ -2756,11 +2751,6 @@ msgstr ""
msgid "Function code is unchanged."
msgstr "函式程式碼未變更。"
#. js-lingui-id: rqDhd1
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution failed."
msgstr ""
#. js-lingui-id: Ho3UAo
#: src/engine/metadata-modules/logic-function/logic-function.exception.ts
msgid "Function execution limit reached."
@@ -7235,7 +7225,6 @@ msgid "Too many records to update at once."
msgstr "一次要更新的記錄過多。"
#. js-lingui-id: M68C8m
#: src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception.ts
#: src/engine/core-modules/email-verification/email-verification.exception.ts
msgid "Too many requests. Please try again later."
msgstr "請求過多。請稍後再試。"
@@ -25,7 +25,6 @@ import {
import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
import { AssumeRoleCommand, STSClient } from '@aws-sdk/client-sts';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
import { Logger } from '@nestjs/common';
import { isDefined } from 'twenty-shared/utils';
import {
@@ -65,7 +64,7 @@ const YARN_INSTALL_LAMBDA_MEMORY_MB = 1024;
const COMMON_LAYER_NAME_PREFIX = 'twenty-common-layer';
const BUILDER_LAMBDA_TIMEOUT_SECONDS = 60;
const BUILDER_LAMBDA_MEMORY_MB = 512;
const LAMBDA_EPHEMERAL_STORAGE_MB = 4096;
const LAMBDA_EPHEMERAL_STORAGE_MB = 2048;
const YARN_INSTALL_HANDLER_PATH = resolve(
__dirname,
join(
@@ -123,7 +122,6 @@ export interface LambdaDriverOptions extends LambdaClientConfig {
}
export class LambdaDriver implements LogicFunctionDriver {
private readonly logger = new Logger(LambdaDriver.name);
private lambdaClient: Lambda | undefined;
private assumeRoleCredentials:
| { accessKeyId: string; secretAccessKey: string; sessionToken: string }
@@ -1004,41 +1002,15 @@ export class LambdaDriver implements LogicFunctionDriver {
applicationUniversalIdentifier: string;
lambdaExecutor: GetFunctionCommandOutput | undefined;
}) {
let depsLayerArn: string;
const depsLayerArn = await this.getLayerArn({
flatApplication,
applicationUniversalIdentifier,
});
try {
depsLayerArn = await this.getLayerArn({
flatApplication,
applicationUniversalIdentifier,
});
} catch (error) {
this.logger.error(
`Failed to get dependency layer for function ${flatLogicFunction.id}: ${error instanceof Error ? error.message : String(error)}`,
error instanceof Error ? error.stack : undefined,
);
throw new LogicFunctionException(
`Failed to get dependency layer for function '${flatLogicFunction.id}': ${error instanceof Error ? error.message : 'Unknown error'}`,
LogicFunctionExceptionCode.LOGIC_FUNCTION_LAYER_BUILD_FAILED,
);
}
let sdkLayerArn: string;
try {
sdkLayerArn = await this.ensureSdkLayer({
flatApplication,
applicationUniversalIdentifier,
});
} catch (error) {
this.logger.error(
`Failed to get SDK layer for function ${flatLogicFunction.id}: ${error instanceof Error ? error.message : String(error)}`,
error instanceof Error ? error.stack : undefined,
);
throw new LogicFunctionException(
`Failed to get SDK layer for function '${flatLogicFunction.id}': ${error instanceof Error ? error.message : 'Unknown error'}`,
LogicFunctionExceptionCode.LOGIC_FUNCTION_LAYER_BUILD_FAILED,
);
}
const sdkLayerArn = await this.ensureSdkLayer({
flatApplication,
applicationUniversalIdentifier,
});
if (!isDefined(lambdaExecutor)) {
await this.createLambdaExecutor({
@@ -1186,26 +1158,13 @@ export class LambdaDriver implements LogicFunctionDriver {
status: LogicFunctionExecutionStatus.SUCCESS,
};
} catch (error) {
this.logger.error(
`Lambda invocation failed for function ${flatLogicFunction.id}: ${error instanceof Error ? error.message : String(error)}`,
error instanceof Error ? error.stack : undefined,
);
if (error instanceof ResourceNotFoundException) {
throw new LogicFunctionException(
`Function '${flatLogicFunction.id}' does not exist`,
LogicFunctionExceptionCode.LOGIC_FUNCTION_NOT_FOUND,
);
}
if (error instanceof LogicFunctionException) {
throw error;
}
throw new LogicFunctionException(
`Lambda invocation failed for function '${flatLogicFunction.id}': ${error instanceof Error ? error.message : 'Unknown error'}`,
LogicFunctionExceptionCode.LOGIC_FUNCTION_EXECUTION_FAILED,
);
throw error;
}
}
}
@@ -1,4 +1,4 @@
import { Injectable, Logger } from '@nestjs/common';
import { Injectable } from '@nestjs/common';
import {
DEFAULT_API_KEY_NAME,
@@ -50,8 +50,6 @@ export enum LogicFunctionExecutionExceptionCode {
@Injectable()
export class LogicFunctionExecutorService {
private readonly logger = new Logger(LogicFunctionExecutorService.name);
constructor(
private readonly logicFunctionDriverFactory: LogicFunctionDriverFactory,
private readonly throttlerService: ThrottlerService,
@@ -89,28 +87,14 @@ export class LogicFunctionExecutorService {
const driver = this.logicFunctionDriverFactory.getCurrentDriver();
let resultLogicFunction: LogicFunctionExecuteResult;
try {
resultLogicFunction = await driver.execute({
flatLogicFunction,
flatApplication,
applicationUniversalIdentifier: flatApplication.universalIdentifier,
payload,
env: envVariables,
timeoutMs: flatLogicFunction.timeoutSeconds * 1_000,
});
} catch (error) {
this.logger.error(
`Logic function execution failed: ` +
`functionId=${logicFunctionId}, ` +
`workspaceId=${workspaceId}, ` +
`driver=${driver.constructor.name}: ` +
`${error instanceof Error ? error.message : String(error)}`,
error instanceof Error ? error.stack : undefined,
);
throw error;
}
const resultLogicFunction = await driver.execute({
flatLogicFunction,
flatApplication,
applicationUniversalIdentifier: flatApplication.universalIdentifier,
payload,
env: envVariables,
timeoutMs: flatLogicFunction.timeoutSeconds * 1_000,
});
await this.handleExecutionResult({
result: resultLogicFunction,
@@ -39,12 +39,6 @@ export class RouteTriggerRestApiExceptionFilter implements ExceptionFilter {
response,
403,
);
case RouteTriggerExceptionCode.RATE_LIMIT_EXCEEDED:
return this.httpExceptionHandlerService.handleError(
exception as CustomException,
response,
429,
);
case RouteTriggerExceptionCode.LOGIC_FUNCTION_EXECUTION_ERROR:
return this.httpExceptionHandlerService.handleError(
exception as CustomException,
@@ -13,7 +13,6 @@ export enum RouteTriggerExceptionCode {
ROUTE_PATH_ALREADY_EXIST = 'ROUTE_PATH_ALREADY_EXIST',
FORBIDDEN_EXCEPTION = 'FORBIDDEN_EXCEPTION',
LOGIC_FUNCTION_EXECUTION_ERROR = 'LOGIC_FUNCTION_EXECUTION_ERROR',
RATE_LIMIT_EXCEEDED = 'RATE_LIMIT_EXCEEDED',
}
const getRouteTriggerExceptionUserFriendlyMessage = (
@@ -36,8 +35,6 @@ const getRouteTriggerExceptionUserFriendlyMessage = (
return msg`You do not have permission to perform this action.`;
case RouteTriggerExceptionCode.LOGIC_FUNCTION_EXECUTION_ERROR:
return msg`Logic function execution failed.`;
case RouteTriggerExceptionCode.RATE_LIMIT_EXCEEDED:
return msg`Too many requests. Please try again later.`;
default:
assertUnreachable(code);
}
@@ -1,4 +1,4 @@
import { Injectable, Logger } from '@nestjs/common';
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Request } from 'express';
@@ -14,22 +14,11 @@ import {
RouteTriggerExceptionCode,
} from 'src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/exceptions/route-trigger.exception';
import { buildLogicFunctionEvent } from 'src/engine/core-modules/logic-function/logic-function-trigger/triggers/route/utils/build-logic-function-event.util';
import {
LogicFunctionException,
LogicFunctionExceptionCode,
} from 'src/engine/metadata-modules/logic-function/logic-function.exception';
import { LogicFunctionEntity } from 'src/engine/metadata-modules/logic-function/logic-function.entity';
import {
LogicFunctionExecutionException,
LogicFunctionExecutionExceptionCode,
LogicFunctionExecutorService,
} from 'src/engine/core-modules/logic-function/logic-function-executor/logic-function-executor.service';
import { CustomException } from 'src/utils/custom-exception';
import { LogicFunctionExecutorService } from 'src/engine/core-modules/logic-function/logic-function-executor/logic-function-executor.service';
@Injectable()
export class RouteTriggerService {
private readonly logger = new Logger(RouteTriggerService.name);
constructor(
private readonly accessTokenService: AccessTokenService,
private readonly logicFunctionExecutorService: LogicFunctionExecutorService,
@@ -129,28 +118,6 @@ export class RouteTriggerService {
return authContext;
}
private mapErrorToRouteTriggerCode(
error: unknown,
): RouteTriggerExceptionCode {
if (error instanceof LogicFunctionExecutionException) {
switch (error.code) {
case LogicFunctionExecutionExceptionCode.LOGIC_FUNCTION_NOT_FOUND:
return RouteTriggerExceptionCode.LOGIC_FUNCTION_NOT_FOUND;
case LogicFunctionExecutionExceptionCode.RATE_LIMIT_EXCEEDED:
return RouteTriggerExceptionCode.RATE_LIMIT_EXCEEDED;
}
}
if (
error instanceof LogicFunctionException &&
error.code === LogicFunctionExceptionCode.LOGIC_FUNCTION_NOT_FOUND
) {
return RouteTriggerExceptionCode.LOGIC_FUNCTION_NOT_FOUND;
}
return RouteTriggerExceptionCode.LOGIC_FUNCTION_EXECUTION_ERROR;
}
async handle({
request,
httpMethod,
@@ -179,37 +146,11 @@ export class RouteTriggerService {
forwardedRequestHeaders: httpRouteSettings?.forwardedRequestHeaders ?? [],
});
let result;
try {
result = await this.logicFunctionExecutorService.execute({
logicFunctionId: logicFunction.id,
workspaceId: logicFunction.workspaceId,
payload: event,
});
} catch (error) {
if (error instanceof RouteTriggerException) {
throw error;
}
this.logger.error(
`Unexpected error executing logic function ${logicFunction.id}: ${error instanceof Error ? error.message : String(error)}`,
error instanceof Error ? error.stack : undefined,
);
const code = this.mapErrorToRouteTriggerCode(error);
throw new RouteTriggerException(
`Logic function execution failed for ${logicFunction.id}`,
code,
{
userFriendlyMessage:
error instanceof CustomException
? error.userFriendlyMessage
: undefined,
},
);
}
const result = await this.logicFunctionExecutorService.execute({
logicFunctionId: logicFunction.id,
workspaceId: logicFunction.workspaceId,
payload: event,
});
if (!isDefined(result)) {
return result;
@@ -1,66 +0,0 @@
import { transformPhonesValue } from 'src/engine/core-modules/record-transformer/utils/transform-phones-value.util';
describe('transformPhonesValue', () => {
it('should return undefined when input is undefined', () => {
const result = transformPhonesValue({ input: undefined });
expect(result).toBeUndefined();
});
it('should return null when input is null', () => {
const result = transformPhonesValue({ input: null });
expect(result).toBeNull();
});
it('should return null for primaryPhoneNumber when it is empty string', () => {
const result = transformPhonesValue({
input: {
primaryPhoneNumber: '',
primaryPhoneCountryCode: '',
primaryPhoneCallingCode: '',
additionalPhones: null,
},
});
expect(result?.primaryPhoneNumber).toBeNull();
});
it('should return undefined for primaryPhoneNumber when it is not provided', () => {
const result = transformPhonesValue({
input: {
additionalPhones: null,
},
});
expect(result?.primaryPhoneNumber).toBeUndefined();
});
it('should validate and return a valid phone number', () => {
const result = transformPhonesValue({
input: {
primaryPhoneNumber: '612345678',
primaryPhoneCountryCode: 'FR',
primaryPhoneCallingCode: '+33',
additionalPhones: null,
},
});
expect(result?.primaryPhoneNumber).toBe('612345678');
expect(result?.primaryPhoneCountryCode).toBe('FR');
expect(result?.primaryPhoneCallingCode).toBe('+33');
});
it('should return null additionalPhones when empty array is provided', () => {
const result = transformPhonesValue({
input: {
primaryPhoneNumber: '',
primaryPhoneCountryCode: '',
primaryPhoneCallingCode: '',
additionalPhones: null,
},
});
expect(result?.additionalPhones).toBeNull();
});
});
@@ -169,9 +169,9 @@ const validateAndInferPhoneInput = ({
}
return {
callingCode: isNonEmptyString(callingCode) ? callingCode : undefined,
countryCode: isNonEmptyString(countryCode) ? countryCode : undefined,
number: isDefined(number) ? null : undefined,
callingCode,
countryCode,
number,
};
};
@@ -14,8 +14,6 @@ export enum LogicFunctionExceptionCode {
LOGIC_FUNCTION_CREATE_FAILED = 'LOGIC_FUNCTION_CREATE_FAILED',
LOGIC_FUNCTION_COMPILATION_FAILED = 'LOGIC_FUNCTION_COMPILATION_FAILED',
LOGIC_FUNCTION_EXECUTION_TIMEOUT = 'LOGIC_FUNCTION_EXECUTION_TIMEOUT',
LOGIC_FUNCTION_EXECUTION_FAILED = 'LOGIC_FUNCTION_EXECUTION_FAILED',
LOGIC_FUNCTION_LAYER_BUILD_FAILED = 'LOGIC_FUNCTION_LAYER_BUILD_FAILED',
LOGIC_FUNCTION_DISABLED = 'LOGIC_FUNCTION_DISABLED',
LOGIC_FUNCTION_INVALID_SEED_PROJECT = 'LOGIC_FUNCTION_INVALID_SEED_PROJECT',
}
@@ -42,10 +40,6 @@ const getLogicFunctionExceptionUserFriendlyMessage = (
return msg`Function code failed to compile.`;
case LogicFunctionExceptionCode.LOGIC_FUNCTION_EXECUTION_TIMEOUT:
return msg`Function execution timed out.`;
case LogicFunctionExceptionCode.LOGIC_FUNCTION_EXECUTION_FAILED:
return msg`Function execution failed.`;
case LogicFunctionExceptionCode.LOGIC_FUNCTION_LAYER_BUILD_FAILED:
return msg`Failed to build function dependencies.`;
case LogicFunctionExceptionCode.LOGIC_FUNCTION_DISABLED:
return msg`Logic function execution is disabled.`;
case LogicFunctionExceptionCode.LOGIC_FUNCTION_INVALID_SEED_PROJECT:
@@ -29,8 +29,6 @@ export const logicFunctionGraphQLApiExceptionHandler = (error: any) => {
case LogicFunctionExceptionCode.LOGIC_FUNCTION_CODE_UNCHANGED:
case LogicFunctionExceptionCode.LOGIC_FUNCTION_CREATE_FAILED:
case LogicFunctionExceptionCode.LOGIC_FUNCTION_INVALID_SEED_PROJECT:
case LogicFunctionExceptionCode.LOGIC_FUNCTION_EXECUTION_FAILED:
case LogicFunctionExceptionCode.LOGIC_FUNCTION_LAYER_BUILD_FAILED:
throw error;
case LogicFunctionExceptionCode.LOGIC_FUNCTION_COMPILATION_FAILED:
throw new UserInputError(error);