diff --git a/.github/workflows/ci-sdk.yaml b/.github/workflows/ci-sdk.yaml index 189fd98bef8..19edad563a2 100644 --- a/.github/workflows/ci-sdk.yaml +++ b/.github/workflows/ci-sdk.yaml @@ -50,7 +50,7 @@ jobs: needs: [changed-files-check, sdk-test] strategy: matrix: - task: [test:integration, test:e2e] + task: [test:integration] if: needs.changed-files-check.outputs.any_changed == 'true' services: postgres: diff --git a/packages/twenty-docs/developers/extend/capabilities/apps.mdx b/packages/twenty-docs/developers/extend/capabilities/apps.mdx index 3669d32291f..a8d81fe60b2 100644 --- a/packages/twenty-docs/developers/extend/capabilities/apps.mdx +++ b/packages/twenty-docs/developers/extend/capabilities/apps.mdx @@ -9,11 +9,11 @@ Apps are currently in alpha testing. The feature is functional but still evolvin ## What Are Apps? -Apps let you build and manage Twenty customizations **as code**. Instead of configuring everything through the UI, you define your data model and serverless functions in code — making it faster to build, maintain, and roll out to multiple workspaces. +Apps let you build and manage Twenty customizations **as code**. Instead of configuring everything through the UI, you define your data model and logic functions in code — making it faster to build, maintain, and roll out to multiple workspaces. **What you can do today:** - Define custom objects and fields as code (managed data model) -- Build serverless functions with custom triggers +- Build logic functions with custom triggers - Deploy the same app across multiple workspaces **Coming soon:** @@ -159,9 +159,9 @@ At a high level: - **README.md**: A short README in the app root with basic instructions. - **src/**: The main place where you define your application-as-code: - `application.config.ts`: Global configuration for your app (metadata and runtime wiring). See "Application config" below. - - `*.role.ts`: Role definitions used by your serverless functions. See "Default function role" below. + - `*.role.ts`: Role definitions used by your logic functions. See "Default function role" below. - `*.object.ts`: Custom object definitions. - - `*.function.ts`: Serverless function definitions. + - `*.function.ts`: Logic function definitions. - `*.front-component.tsx`: Front component definitions. Later commands will add more files and folders: @@ -214,7 +214,7 @@ The SDK provides four helper functions with built-in validation for defining you |----------|---------| | `defineApp()` | Configure application metadata | | `defineObject()` | Define custom objects with fields | -| `defineFunction()` | Define serverless functions with handlers | +| `defineFunction()` | Define logic functions with handlers | | `defineRole()` | Configure role permissions and object access | These functions validate your configuration at runtime and provide better IDE autocompletion and type safety. @@ -344,7 +344,7 @@ Notes: #### Roles and permissions -Applications can define roles that encapsulate permissions on your workspace's objects and actions. The field `functionRoleUniversalIdentifier` in `application.config.ts` designates the default role used by your app's serverless functions. +Applications can define roles that encapsulate permissions on your workspace's objects and actions. The field `functionRoleUniversalIdentifier` in `application.config.ts` designates the default role used by your app's logic functions. - The runtime API key injected as `TWENTY_API_KEY` is derived from this default function role. - The typed client will be restricted to the permissions granted to that role. @@ -405,7 +405,7 @@ Notes: - `permissionFlags` control access to platform-level capabilities. Keep them minimal; add only what you need. - See a working example in the Hello World app: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts). -### Serverless function config and entrypoint +### Logic function config and entrypoint Each function file uses `defineFunction()` to export a configuration with a handler and optional triggers. Use the `*.function.ts` file suffix for automatic detection. @@ -497,7 +497,7 @@ const handler = async (event: RoutePayload) => { **To migrate existing functions:** Update your handler to destructure from `event.body`, `event.queryStringParameters`, or `event.pathParameters` instead of directly from the params object. -When a route trigger invokes your function, it receives a `RoutePayload` object that follows the AWS HTTP API v2 format. Import the type from `twenty-sdk`: +When a route trigger invokes your logic function, it receives a `RoutePayload` object that follows the AWS HTTP API v2 format. Import the type from `twenty-sdk`: ```typescript import { defineFunction, type RoutePayload } from 'twenty-sdk'; @@ -527,7 +527,7 @@ The `RoutePayload` type has the following structure: ### Forwarding HTTP headers -By default, HTTP headers from incoming requests are **not** passed to your serverless function for security reasons. To access specific headers, explicitly list them in the `forwardedRequestHeaders` array: +By default, HTTP headers from incoming requests are **not** passed to your logic function for security reasons. To access specific headers, explicitly list them in the `forwardedRequestHeaders` array: ```typescript export default defineFunction({ @@ -581,7 +581,7 @@ const { me } = await client.query({ me: { id: true, displayName: true } }); The client is re-generated by `yarn app:generate`. Re-run after changing your objects or when onboarding to a new workspace. -#### Runtime credentials in serverless functions +#### Runtime credentials in logic functions When your function runs on Twenty, the platform injects credentials as environment variables before your code executes: @@ -590,7 +590,7 @@ When your function runs on Twenty, the platform injects credentials as environme Notes: - You do not need to pass URL or API key to the generated client. It reads `TWENTY_API_URL` and `TWENTY_API_KEY` from process.env at runtime. -- The API key's permissions are determined by the role referenced in your `application.config.ts` via `functionRoleUniversalIdentifier`. This is the default role used by serverless functions of your application. +- The API key's permissions are determined by the role referenced in your `application.config.ts` via `functionRoleUniversalIdentifier`. This is the default role used by logic functions of your application. - Applications can define roles to follow least‑privilege. Grant only the permissions your functions need, then point `functionRoleUniversalIdentifier` to that role's universal identifier. diff --git a/packages/twenty-docs/developers/self-host/capabilities/setup.mdx b/packages/twenty-docs/developers/self-host/capabilities/setup.mdx index c6757f15ac1..5bb2f81c2e9 100644 --- a/packages/twenty-docs/developers/self-host/capabilities/setup.mdx +++ b/packages/twenty-docs/developers/self-host/capabilities/setup.mdx @@ -289,19 +289,19 @@ yarn command:prod cron:workflow:automated-cron-trigger **Environment-only mode:** If you set `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, add these variables to your `.env` file instead. -## Serverless Functions +## Logic Functions -Twenty supports serverless functions for workflows and custom logic. The execution environment is configured via the `SERVERLESS_TYPE` environment variable. +Twenty supports logic functions for workflows and custom logic. The execution environment is configured via the `SERVERLESS_TYPE` environment variable. -**Security Notice:** The local serverless driver (`SERVERLESS_TYPE=LOCAL`) runs code directly on the host in a Node.js process with no sandboxing. It should only be used for trusted code in development. For production deployments handling untrusted code, we highly recommend using `SERVERLESS_TYPE=LAMBDA` or `SERVERLESS_TYPE=DISABLED`. +**Security Notice:** The local driver (`SERVERLESS_TYPE=LOCAL`) runs code directly on the host in a Node.js process with no sandboxing. It should only be used for trusted code in development. For production deployments handling untrusted code, we highly recommend using `SERVERLESS_TYPE=LAMBDA` or `SERVERLESS_TYPE=DISABLED`. ### Available Drivers | Driver | Environment Variable | Use Case | Security Level | |--------|---------------------|----------|----------------| -| Disabled | `SERVERLESS_TYPE=DISABLED` | Disable serverless functions entirely | N/A | +| Disabled | `SERVERLESS_TYPE=DISABLED` | Disable logic functions entirely | N/A | | Local | `SERVERLESS_TYPE=LOCAL` | Development and trusted environments | Low (no sandboxing) | | Lambda | `SERVERLESS_TYPE=LAMBDA` | Production with untrusted code | High (hardware-level isolation) | @@ -321,11 +321,11 @@ SERVERLESS_LAMBDA_ACCESS_KEY_ID=your-access-key SERVERLESS_LAMBDA_SECRET_ACCESS_KEY=your-secret-key ``` -**To disable serverless functions:** +**To disable logic functions:** ```bash SERVERLESS_TYPE=DISABLED ``` -When using `SERVERLESS_TYPE=DISABLED`, any attempt to execute a serverless function will return an error. This is useful if you want to run Twenty without serverless function capabilities. +When using `SERVERLESS_TYPE=DISABLED`, any attempt to execute a logic function will return an error. This is useful if you want to run Twenty without logic function capabilities. diff --git a/packages/twenty-docs/user-guide/getting-started/capabilities/glossary.mdx b/packages/twenty-docs/user-guide/getting-started/capabilities/glossary.mdx index 8599f09665a..e04f3389c96 100644 --- a/packages/twenty-docs/user-guide/getting-started/capabilities/glossary.mdx +++ b/packages/twenty-docs/user-guide/getting-started/capabilities/glossary.mdx @@ -7,7 +7,7 @@ description: Get familiar with essential terminology used in Twenty. API (Application Programming Interface) allows you to connect Twenty with other software systems and build custom integrations. ## Apps -Apps are custom extensions built as code that can define data models and serverless functions. They enable developers to create reusable customizations that can be deployed across multiple workspaces. +Apps are custom extensions built as code that can define data models and logic functions. They enable developers to create reusable customizations that can be deployed across multiple workspaces. ## Code Actions Code Actions are workflow steps that let you write custom JavaScript to transform data, make calculations, or perform complex logic that isn't possible with built-in actions. diff --git a/packages/twenty-docs/user-guide/workflows/capabilities/send-emails-from-workflows.mdx b/packages/twenty-docs/user-guide/workflows/capabilities/send-emails-from-workflows.mdx index 9138b4446c4..a162bbc93a0 100644 --- a/packages/twenty-docs/user-guide/workflows/capabilities/send-emails-from-workflows.mdx +++ b/packages/twenty-docs/user-guide/workflows/capabilities/send-emails-from-workflows.mdx @@ -135,7 +135,7 @@ You can attach files to emails sent from workflows. The attachment is a static f | **Event confirmations** | Event details or agenda | -Attachments are static—the same file is sent to all recipients. For dynamic documents (like personalized quotes), generate and attach files using a [Serverless Function](/user-guide/workflows/how-tos/connect-to-other-tools/generate-pdf-from-twenty). +Attachments are static—the same file is sent to all recipients. For dynamic documents (like personalized quotes), generate and attach files using a [Logic Function](/user-guide/workflows/how-tos/connect-to-other-tools/generate-pdf-from-twenty). ## Best Practices diff --git a/packages/twenty-docs/user-guide/workflows/capabilities/workflow-actions.mdx b/packages/twenty-docs/user-guide/workflows/capabilities/workflow-actions.mdx index a4e41a9ef83..70bdc239e59 100644 --- a/packages/twenty-docs/user-guide/workflows/capabilities/workflow-actions.mdx +++ b/packages/twenty-docs/user-guide/workflows/capabilities/workflow-actions.mdx @@ -215,7 +215,7 @@ Runs custom JavaScript within your workflow. - Test code directly in the step -If you need to use external API keys in your code, you must input them directly in the function body. You cannot configure API keys elsewhere and reference them in the serverless function. +If you need to use external API keys in your code, you must input them directly in the function body. You cannot configure API keys elsewhere and reference them in the logic function. diff --git a/packages/twenty-docs/user-guide/workflows/how-tos/connect-to-other-tools/generate-pdf-from-twenty.mdx b/packages/twenty-docs/user-guide/workflows/how-tos/connect-to-other-tools/generate-pdf-from-twenty.mdx index df001353ed6..faf463062dd 100644 --- a/packages/twenty-docs/user-guide/workflows/how-tos/connect-to-other-tools/generate-pdf-from-twenty.mdx +++ b/packages/twenty-docs/user-guide/workflows/how-tos/connect-to-other-tools/generate-pdf-from-twenty.mdx @@ -7,7 +7,7 @@ Automatically generate or fetch a PDF and attach it to a record in Twenty. This ## Overview -This workflow uses a **Manual Trigger** so users can generate a PDF on demand for any selected record. A **Serverless Function** handles: +This workflow uses a **Manual Trigger** so users can generate a PDF on demand for any selected record. A **Logic Function** handles: 1. Downloading the PDF from a URL (from a PDF generation service) 2. Uploading the file to Twenty 3. Creating an Attachment linked to the record @@ -16,7 +16,7 @@ This workflow uses a **Manual Trigger** so users can generate a PDF on demand fo Before setting up the workflow: -1. **Create an API Key**: Go to **Settings → APIs** and create a new API key. You'll need this token for the serverless function. +1. **Create an API Key**: Go to **Settings → APIs** and create a new API key. You'll need this token for the logic function. 2. **Set up a PDF generation service** (optional): If you want to dynamically generate PDFs (e.g., quotes), use a service like Carbone, PDFMonkey, or DocuSeal to create the PDF and get a download URL. ## Step-by-Step Setup @@ -31,9 +31,9 @@ Before setting up the workflow: With a Manual Trigger, users can run this workflow using a button that appears on the top right once a record is selected, to generate and attach a PDF. -### Step 2: Add a Serverless Function +### Step 2: Add a Logic Function -1. Add a **Serverless Function** action +1. Add a **Code** action (logic function) 2. Create a new function with the code below 3. Configure the input parameters @@ -44,10 +44,10 @@ With a Manual Trigger, users can run this workflow using a button that appears o | `companyId` | `{{trigger.object.id}}` | -If attaching to a different object (Person, Opportunity, etc.), rename the parameter accordingly (e.g., `personId`, `opportunityId`) and update the serverless function. +If attaching to a different object (Person, Opportunity, etc.), rename the parameter accordingly (e.g., `personId`, `opportunityId`) and update the logic function. -#### Serverless Function Code +#### Logic Function Code ```typescript export const main = async ( @@ -170,7 +170,7 @@ Update both the function parameter and the `variables.data` object in the attach If using a PDF generation service, you can: 1. First make an HTTP Request action to generate the PDF -2. Pass the returned PDF URL to the serverless function as a parameter +2. Pass the returned PDF URL to the logic function as a parameter ```typescript export const main = async ( @@ -209,7 +209,7 @@ For creating dynamic quotes or invoices: - **DocuSeal** - Document automation platform - **Documint** - API-first document generation -Each service provides an API that returns a PDF URL, which you can then pass to the serverless function. +Each service provides an API that returns a PDF URL, which you can then pass to the logic function. ## Troubleshooting @@ -222,6 +222,6 @@ Each service provides an API that returns a PDF URL, which you can then pass to ## Related - [Workflow Triggers](/user-guide/workflows/capabilities/workflow-triggers) -- [Serverless Functions](/user-guide/workflows/capabilities/workflow-actions#serverless-function) +- [Logic Functions](/user-guide/workflows/capabilities/workflow-actions#code) - [Generate a Quote or Invoice from Twenty](/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty) diff --git a/packages/twenty-docs/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx b/packages/twenty-docs/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx index a1720549fd9..7e71a5c4a46 100644 --- a/packages/twenty-docs/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx +++ b/packages/twenty-docs/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx @@ -125,7 +125,7 @@ description: Frequently asked questions about workflows in Twenty. - Code actions (serverless functions) have a **default timeout of 5 minutes** (300 seconds). + Code actions (logic functions) have a **default timeout of 5 minutes** (300 seconds). The maximum configurable timeout is **15 minutes** (900 seconds). diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index 20b27a9f5c2..303734d81b2 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -186,11 +186,10 @@ export enum AggregateOperations { export enum AllMetadataName { agent = 'agent', commandMenuItem = 'commandMenuItem', - cronTrigger = 'cronTrigger', - databaseEventTrigger = 'databaseEventTrigger', fieldMetadata = 'fieldMetadata', frontComponent = 'frontComponent', index = 'index', + logicFunction = 'logicFunction', navigationMenuItem = 'navigationMenuItem', objectMetadata = 'objectMetadata', pageLayout = 'pageLayout', @@ -198,10 +197,8 @@ export enum AllMetadataName { pageLayoutWidget = 'pageLayoutWidget', role = 'role', roleTarget = 'roleTarget', - routeTrigger = 'routeTrigger', rowLevelPermissionPredicate = 'rowLevelPermissionPredicate', rowLevelPermissionPredicateGroup = 'rowLevelPermissionPredicateGroup', - serverlessFunction = 'serverlessFunction', skill = 'skill', view = 'view', viewField = 'viewField', @@ -273,13 +270,13 @@ export type Application = { agents: Array; applicationVariables: Array; canBeUninstalled: Scalars['Boolean']; - defaultServerlessFunctionRole?: Maybe; - defaultServerlessFunctionRoleId?: Maybe; + defaultLogicFunctionRole?: Maybe; + defaultLogicFunctionRoleId?: Maybe; description: Scalars['String']; id: Scalars['UUID']; + logicFunctions: Array; name: Scalars['String']; objects: Array; - serverlessFunctions: Array; universalIdentifier: Scalars['String']; version: Scalars['String']; }; @@ -741,11 +738,11 @@ export enum ConfigVariablesGroup { GOOGLE_AUTH = 'GOOGLE_AUTH', LLM = 'LLM', LOGGING = 'LOGGING', + LOGIC_FUNCTION_CONFIG = 'LOGIC_FUNCTION_CONFIG', METERING = 'METERING', MICROSOFT_AUTH = 'MICROSOFT_AUTH', OTHER = 'OTHER', RATE_LIMITING = 'RATE_LIMITING', - SERVERLESS_CONFIG = 'SERVERLESS_CONFIG', SERVER_CONFIG = 'SERVER_CONFIG', SSL = 'SSL', STORAGE_CONFIG = 'STORAGE_CONFIG', @@ -966,6 +963,18 @@ export type CreateFrontComponentInput = { name: Scalars['String']; }; +export type CreateLogicFunctionInput = { + builtHandlerPath?: InputMaybe; + code?: InputMaybe; + description?: InputMaybe; + handlerName?: InputMaybe; + isTool?: InputMaybe; + name: Scalars['String']; + sourceHandlerPath?: InputMaybe; + timeoutSeconds?: InputMaybe; + toolInputSchema?: InputMaybe; +}; + export type CreateNavigationMenuItemInput = { folderId?: InputMaybe; name?: InputMaybe; @@ -1043,18 +1052,6 @@ export type CreateRoleInput = { label: Scalars['String']; }; -export type CreateServerlessFunctionInput = { - builtHandlerPath?: InputMaybe; - code?: InputMaybe; - description?: InputMaybe; - handlerName?: InputMaybe; - isTool?: InputMaybe; - name: Scalars['String']; - sourceHandlerPath?: InputMaybe; - timeoutSeconds?: InputMaybe; - toolInputSchema?: InputMaybe; -}; - export type CreateSkillInput = { content: Scalars['String']; description?: InputMaybe; @@ -1381,12 +1378,12 @@ export type EventWithQueryIds = { queryIds: Array; }; -export type ExecuteServerlessFunctionInput = { - /** Id of the serverless function to execute */ +export type ExecuteLogicFunctionInput = { + /** Id of the logic function to execute */ id: Scalars['UUID']; /** Payload in JSON format */ payload: Scalars['JSON']; - /** Version of the serverless function to execute */ + /** Version of the logic function to execute */ version?: Scalars['String']; }; @@ -1555,10 +1552,10 @@ export enum FileFolder { BuiltFunction = 'BuiltFunction', File = 'File', FilesField = 'FilesField', + LogicFunction = 'LogicFunction', + LogicFunctionToDelete = 'LogicFunctionToDelete', PersonPicture = 'PersonPicture', ProfilePicture = 'ProfilePicture', - ServerlessFunction = 'ServerlessFunction', - ServerlessFunctionToDelete = 'ServerlessFunctionToDelete', Source = 'Source', TemporaryFilesField = 'TemporaryFilesField', WorkspaceLogo = 'WorkspaceLogo' @@ -1639,7 +1636,7 @@ export type GetAuthorizationUrlForSsoOutput = { type: Scalars['String']; }; -export type GetServerlessFunctionSourceCodeInput = { +export type GetLogicFunctionSourceCodeInput = { /** The id of the function. */ id: Scalars['ID']; /** The version of the function */ @@ -1913,6 +1910,77 @@ export type Location = { lng?: Maybe; }; +export type LogicFunction = { + __typename?: 'LogicFunction'; + applicationId?: Maybe; + builtHandlerPath: Scalars['String']; + createdAt: Scalars['DateTime']; + cronTriggerSettings?: Maybe; + databaseEventTriggerSettings?: Maybe; + description?: Maybe; + handlerName: Scalars['String']; + httpRouteTriggerSettings?: Maybe; + id: Scalars['UUID']; + isTool: Scalars['Boolean']; + latestVersion?: Maybe; + name: Scalars['String']; + publishedVersions: Array; + runtime: Scalars['String']; + sourceHandlerPath: Scalars['String']; + timeoutSeconds: Scalars['Float']; + toolInputSchema?: Maybe; + universalIdentifier?: Maybe; + updatedAt: Scalars['DateTime']; +}; + +export type LogicFunctionExecutionResult = { + __typename?: 'LogicFunctionExecutionResult'; + /** Execution result in JSON format */ + data?: Maybe; + /** Execution duration in milliseconds */ + duration: Scalars['Float']; + /** Execution error in JSON format */ + error?: Maybe; + /** Execution Logs */ + logs: Scalars['String']; + /** Execution status */ + status: LogicFunctionExecutionStatus; +}; + +/** Status of the logic function execution */ +export enum LogicFunctionExecutionStatus { + ERROR = 'ERROR', + IDLE = 'IDLE', + SUCCESS = 'SUCCESS' +} + +export type LogicFunctionIdInput = { + /** The id of the function. */ + id: Scalars['ID']; +}; + +export type LogicFunctionLayer = { + __typename?: 'LogicFunctionLayer'; + applicationId?: Maybe; + createdAt: Scalars['DateTime']; + id: Scalars['UUID']; + updatedAt: Scalars['DateTime']; +}; + +export type LogicFunctionLogs = { + __typename?: 'LogicFunctionLogs'; + /** Execution Logs */ + logs: Scalars['String']; +}; + +export type LogicFunctionLogsInput = { + applicationId?: InputMaybe; + applicationUniversalIdentifier?: InputMaybe; + id?: InputMaybe; + name?: InputMaybe; + universalIdentifier?: InputMaybe; +}; + export type LoginTokenOutput = { __typename?: 'LoginTokenOutput'; loginToken: AuthToken; @@ -1971,10 +2039,10 @@ export type Mutation = { createOneAgent: Agent; createOneAppToken: AppToken; createOneField: Field; + createOneLogicFunction: LogicFunction; + createOneLogicFunctionLayer: LogicFunctionLayer; createOneObject: Object; createOneRole: Role; - createOneServerlessFunction: ServerlessFunction; - createOneServerlessFunctionLayer: ServerlessFunctionLayer; createPageLayout: PageLayout; createPageLayoutTab: PageLayoutTab; createPageLayoutWidget: PageLayoutWidget; @@ -2003,9 +2071,9 @@ export type Mutation = { deleteNavigationMenuItem: NavigationMenuItem; deleteOneAgent: Agent; deleteOneField: Field; + deleteOneLogicFunction: LogicFunction; deleteOneObject: Object; deleteOneRole: Scalars['String']; - deleteOneServerlessFunction: ServerlessFunction; deletePublicDomain: Scalars['Boolean']; deleteSSOIdentityProvider: DeleteSsoOutput; deleteSkill: Skill; @@ -2035,7 +2103,7 @@ export type Mutation = { enablePostgresProxy: PostgresCredentials; endSubscriptionTrialPeriod: BillingEndTrialPeriodOutput; evaluateAgentTurn: AgentTurnEvaluation; - executeOneServerlessFunction: ServerlessFunctionExecutionResult; + executeOneLogicFunction: LogicFunctionExecutionResult; generateApiKeyToken: ApiKeyToken; generateTransientToken: TransientTokenOutput; getAuthTokensFromLoginToken: AuthTokens; @@ -2046,7 +2114,7 @@ export type Mutation = { initiateOTPProvisioning: InitiateTwoFactorAuthenticationProvisioningOutput; initiateOTPProvisioningForAuthenticatedUser: InitiateTwoFactorAuthenticationProvisioningOutput; installApplication: Scalars['Boolean']; - publishServerlessFunction: ServerlessFunction; + publishLogicFunction: LogicFunction; removeQueryFromEventStream: Scalars['Boolean']; removeRoleFromAgent: Scalars['Boolean']; renewToken: AuthTokens; @@ -2089,9 +2157,9 @@ export type Mutation = { updateOneAgent: Agent; updateOneApplicationVariable: Scalars['Boolean']; updateOneField: Field; + updateOneLogicFunction: LogicFunction; updateOneObject: Object; updateOneRole: Role; - updateOneServerlessFunction: ServerlessFunction; updatePageLayout: PageLayout; updatePageLayoutTab: PageLayoutTab; updatePageLayoutWidget: PageLayoutWidget; @@ -2298,6 +2366,17 @@ export type MutationCreateOneFieldArgs = { }; +export type MutationCreateOneLogicFunctionArgs = { + input: CreateLogicFunctionInput; +}; + + +export type MutationCreateOneLogicFunctionLayerArgs = { + packageJson: Scalars['JSON']; + yarnLock: Scalars['String']; +}; + + export type MutationCreateOneObjectArgs = { input: CreateOneObjectInput; }; @@ -2308,17 +2387,6 @@ export type MutationCreateOneRoleArgs = { }; -export type MutationCreateOneServerlessFunctionArgs = { - input: CreateServerlessFunctionInput; -}; - - -export type MutationCreateOneServerlessFunctionLayerArgs = { - packageJson: Scalars['JSON']; - yarnLock: Scalars['String']; -}; - - export type MutationCreatePageLayoutArgs = { input: CreatePageLayoutInput; }; @@ -2455,6 +2523,11 @@ export type MutationDeleteOneFieldArgs = { }; +export type MutationDeleteOneLogicFunctionArgs = { + input: LogicFunctionIdInput; +}; + + export type MutationDeleteOneObjectArgs = { input: DeleteOneObjectInput; }; @@ -2465,11 +2538,6 @@ export type MutationDeleteOneRoleArgs = { }; -export type MutationDeleteOneServerlessFunctionArgs = { - input: ServerlessFunctionIdInput; -}; - - export type MutationDeletePublicDomainArgs = { domain: Scalars['String']; }; @@ -2596,8 +2664,8 @@ export type MutationEvaluateAgentTurnArgs = { }; -export type MutationExecuteOneServerlessFunctionArgs = { - input: ExecuteServerlessFunctionInput; +export type MutationExecuteOneLogicFunctionArgs = { + input: ExecuteLogicFunctionInput; }; @@ -2653,8 +2721,8 @@ export type MutationInstallApplicationArgs = { }; -export type MutationPublishServerlessFunctionArgs = { - input: PublishServerlessFunctionInput; +export type MutationPublishLogicFunctionArgs = { + input: PublishLogicFunctionInput; }; @@ -2875,6 +2943,11 @@ export type MutationUpdateOneFieldArgs = { }; +export type MutationUpdateOneLogicFunctionArgs = { + input: UpdateLogicFunctionInput; +}; + + export type MutationUpdateOneObjectArgs = { input: UpdateOneObjectInput; }; @@ -2885,11 +2958,6 @@ export type MutationUpdateOneRoleArgs = { }; -export type MutationUpdateOneServerlessFunctionArgs = { - input: UpdateServerlessFunctionInput; -}; - - export type MutationUpdatePageLayoutArgs = { id: Scalars['String']; input: UpdatePageLayoutInput; @@ -3453,7 +3521,7 @@ export type PublicWorkspaceDataOutput = { workspaceUrls: WorkspaceUrls; }; -export type PublishServerlessFunctionInput = { +export type PublishLogicFunctionInput = { /** The id of the function. */ id: Scalars['ID']; }; @@ -3478,11 +3546,11 @@ export type Query = { fields: FieldConnection; findManyAgents: Array; findManyApplications: Array; + findManyLogicFunctions: Array; findManyPublicDomains: Array; - findManyServerlessFunctions: Array; findOneAgent: Agent; findOneApplication: Application; - findOneServerlessFunction: ServerlessFunction; + findOneLogicFunction: LogicFunction; findWorkspaceFromInviteHash: Workspace; findWorkspaceInvitations: Array; frontComponent?: Maybe; @@ -3509,6 +3577,7 @@ export type Query = { getEmailingDomains: Array; getFrontComponentCode: FrontComponentCode; getIndicatorHealthStatus: AdminPanelHealthServiceData; + getLogicFunctionSourceCode?: Maybe; getMeteredProductsUsage: Array; getPageLayout?: Maybe; getPageLayoutTab: PageLayoutTab; @@ -3522,7 +3591,6 @@ export type Query = { getQueueMetrics: QueueMetricsData; getRoles: Array; getSSOIdentityProviders: Array; - getServerlessFunctionSourceCode?: Maybe; getSystemHealthStatus: SystemHealth; getTimelineCalendarEventsFromCompanyId: TimelineCalendarEventsWithTotal; getTimelineCalendarEventsFromOpportunityId: TimelineCalendarEventsWithTotal; @@ -3617,8 +3685,8 @@ export type QueryFindOneApplicationArgs = { }; -export type QueryFindOneServerlessFunctionArgs = { - input: ServerlessFunctionIdInput; +export type QueryFindOneLogicFunctionArgs = { + input: LogicFunctionIdInput; }; @@ -3647,7 +3715,7 @@ export type QueryGetAutoCompleteAddressArgs = { export type QueryGetAvailablePackagesArgs = { - input: ServerlessFunctionIdInput; + input: LogicFunctionIdInput; }; @@ -3731,6 +3799,11 @@ export type QueryGetIndicatorHealthStatusArgs = { }; +export type QueryGetLogicFunctionSourceCodeArgs = { + input: GetLogicFunctionSourceCodeInput; +}; + + export type QueryGetPageLayoutArgs = { id: Scalars['String']; }; @@ -3780,11 +3853,6 @@ export type QueryGetQueueMetricsArgs = { }; -export type QueryGetServerlessFunctionSourceCodeArgs = { - input: GetServerlessFunctionSourceCodeInput; -}; - - export type QueryGetTimelineCalendarEventsFromCompanyIdArgs = { companyId: Scalars['UUID']; page: Scalars['Int']; @@ -4183,77 +4251,6 @@ export type Sentry = { release?: Maybe; }; -export type ServerlessFunction = { - __typename?: 'ServerlessFunction'; - applicationId?: Maybe; - builtHandlerPath: Scalars['String']; - createdAt: Scalars['DateTime']; - cronTriggerSettings?: Maybe; - databaseEventTriggerSettings?: Maybe; - description?: Maybe; - handlerName: Scalars['String']; - httpRouteTriggerSettings?: Maybe; - id: Scalars['UUID']; - isTool: Scalars['Boolean']; - latestVersion?: Maybe; - name: Scalars['String']; - publishedVersions: Array; - runtime: Scalars['String']; - sourceHandlerPath: Scalars['String']; - timeoutSeconds: Scalars['Float']; - toolInputSchema?: Maybe; - universalIdentifier?: Maybe; - updatedAt: Scalars['DateTime']; -}; - -export type ServerlessFunctionExecutionResult = { - __typename?: 'ServerlessFunctionExecutionResult'; - /** Execution result in JSON format */ - data?: Maybe; - /** Execution duration in milliseconds */ - duration: Scalars['Float']; - /** Execution error in JSON format */ - error?: Maybe; - /** Execution Logs */ - logs: Scalars['String']; - /** Execution status */ - status: ServerlessFunctionExecutionStatus; -}; - -/** Status of the serverless function execution */ -export enum ServerlessFunctionExecutionStatus { - ERROR = 'ERROR', - IDLE = 'IDLE', - SUCCESS = 'SUCCESS' -} - -export type ServerlessFunctionIdInput = { - /** The id of the function. */ - id: Scalars['ID']; -}; - -export type ServerlessFunctionLayer = { - __typename?: 'ServerlessFunctionLayer'; - applicationId?: Maybe; - createdAt: Scalars['DateTime']; - id: Scalars['UUID']; - updatedAt: Scalars['DateTime']; -}; - -export type ServerlessFunctionLogs = { - __typename?: 'ServerlessFunctionLogs'; - /** Execution Logs */ - logs: Scalars['String']; -}; - -export type ServerlessFunctionLogsInput = { - applicationId?: InputMaybe; - applicationUniversalIdentifier?: InputMaybe; - id?: InputMaybe; - name?: InputMaybe; - universalIdentifier?: InputMaybe; -}; - export type SetupOidcSsoInput = { clientID: Scalars['String']; clientSecret: Scalars['String']; @@ -4332,9 +4329,14 @@ export type SubmitFormStepInput = { export type Subscription = { __typename?: 'Subscription'; + logicFunctionLogs: LogicFunctionLogs; onDbEvent: OnDbEvent; onEventSubscription?: Maybe; - serverlessFunctionLogs: ServerlessFunctionLogs; +}; + + +export type SubscriptionLogicFunctionLogsArgs = { + input: LogicFunctionLogsInput; }; @@ -4347,11 +4349,6 @@ export type SubscriptionOnEventSubscriptionArgs = { eventStreamId: Scalars['String']; }; - -export type SubscriptionServerlessFunctionLogsArgs = { - input: ServerlessFunctionLogsInput; -}; - export enum SubscriptionInterval { Month = 'Month', Year = 'Year' @@ -4606,6 +4603,24 @@ export type UpdateLabPublicFeatureFlagInput = { value: Scalars['Boolean']; }; +export type UpdateLogicFunctionInput = { + /** Id of the logic function to update */ + id: Scalars['UUID']; + /** The logic function updates */ + update: UpdateLogicFunctionInputUpdates; +}; + +export type UpdateLogicFunctionInputUpdates = { + code: Scalars['JSON']; + description?: InputMaybe; + handlerName?: InputMaybe; + isTool?: InputMaybe; + name: Scalars['String']; + sourceHandlerPath?: InputMaybe; + timeoutSeconds?: InputMaybe; + toolInputSchema?: InputMaybe; +}; + export type UpdateNavigationMenuItemInput = { folderId?: InputMaybe; name?: InputMaybe; @@ -4710,24 +4725,6 @@ export type UpdateRolePayload = { label?: InputMaybe; }; -export type UpdateServerlessFunctionInput = { - /** Id of the serverless function to update */ - id: Scalars['UUID']; - /** The serverless function updates */ - update: UpdateServerlessFunctionInputUpdates; -}; - -export type UpdateServerlessFunctionInputUpdates = { - code: Scalars['JSON']; - description?: InputMaybe; - handlerName?: InputMaybe; - isTool?: InputMaybe; - name: Scalars['String']; - sourceHandlerPath?: InputMaybe; - timeoutSeconds?: InputMaybe; - toolInputSchema?: InputMaybe; -}; - export type UpdateSkillInput = { content?: InputMaybe; description?: InputMaybe; @@ -5559,7 +5556,7 @@ export type UpdateOneApplicationVariableMutationVariables = Exact<{ export type UpdateOneApplicationVariableMutation = { __typename?: 'Mutation', updateOneApplicationVariable: boolean }; -export type ApplicationFieldsFragment = { __typename?: 'Application', id: string, name: string, description: string, version: string, universalIdentifier: string, canBeUninstalled: boolean, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIReadOnly: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isUIReadOnly?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, serverlessFunctions: Array<{ __typename?: 'ServerlessFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string }> }; +export type ApplicationFieldsFragment = { __typename?: 'Application', id: string, name: string, description: string, version: string, universalIdentifier: string, canBeUninstalled: boolean, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIReadOnly: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isUIReadOnly?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string }> }; export type FindManyApplicationsQueryVariables = Exact<{ [key: string]: never; }>; @@ -5571,7 +5568,7 @@ export type FindOneApplicationQueryVariables = Exact<{ }>; -export type FindOneApplicationQuery = { __typename?: 'Query', findOneApplication: { __typename?: 'Application', id: string, name: string, description: string, version: string, universalIdentifier: string, canBeUninstalled: boolean, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIReadOnly: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isUIReadOnly?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, serverlessFunctions: Array<{ __typename?: 'ServerlessFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string }> } }; +export type FindOneApplicationQuery = { __typename?: 'Query', findOneApplication: { __typename?: 'Application', id: string, name: string, description: string, version: string, universalIdentifier: string, canBeUninstalled: boolean, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIReadOnly: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isUIReadOnly?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string }> } }; export type UploadFileMutationVariables = Exact<{ file: Scalars['Upload']; @@ -6278,6 +6275,69 @@ export type UpdateLabPublicFeatureFlagMutationVariables = Exact<{ export type UpdateLabPublicFeatureFlagMutation = { __typename?: 'Mutation', updateLabPublicFeatureFlag: { __typename?: 'FeatureFlagDTO', key: FeatureFlagKey, value: boolean } }; +export type LogicFunctionFieldsFragment = { __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string }; + +export type CreateOneLogicFunctionItemMutationVariables = Exact<{ + input: CreateLogicFunctionInput; +}>; + + +export type CreateOneLogicFunctionItemMutation = { __typename?: 'Mutation', createOneLogicFunction: { __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string } }; + +export type DeleteOneLogicFunctionMutationVariables = Exact<{ + input: LogicFunctionIdInput; +}>; + + +export type DeleteOneLogicFunctionMutation = { __typename?: 'Mutation', deleteOneLogicFunction: { __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string } }; + +export type ExecuteOneLogicFunctionMutationVariables = Exact<{ + input: ExecuteLogicFunctionInput; +}>; + + +export type ExecuteOneLogicFunctionMutation = { __typename?: 'Mutation', executeOneLogicFunction: { __typename?: 'LogicFunctionExecutionResult', data?: any | null, logs: string, duration: number, status: LogicFunctionExecutionStatus, error?: any | null } }; + +export type PublishOneLogicFunctionMutationVariables = Exact<{ + input: PublishLogicFunctionInput; +}>; + + +export type PublishOneLogicFunctionMutation = { __typename?: 'Mutation', publishLogicFunction: { __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string } }; + +export type UpdateOneLogicFunctionMutationVariables = Exact<{ + input: UpdateLogicFunctionInput; +}>; + + +export type UpdateOneLogicFunctionMutation = { __typename?: 'Mutation', updateOneLogicFunction: { __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string } }; + +export type FindManyAvailablePackagesQueryVariables = Exact<{ + input: LogicFunctionIdInput; +}>; + + +export type FindManyAvailablePackagesQuery = { __typename?: 'Query', getAvailablePackages: any }; + +export type GetManyLogicFunctionsQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetManyLogicFunctionsQuery = { __typename?: 'Query', findManyLogicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string }> }; + +export type GetOneLogicFunctionQueryVariables = Exact<{ + input: LogicFunctionIdInput; +}>; + + +export type GetOneLogicFunctionQuery = { __typename?: 'Query', findOneLogicFunction: { __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string } }; + +export type FindOneLogicFunctionSourceCodeQueryVariables = Exact<{ + input: GetLogicFunctionSourceCodeInput; +}>; + + +export type FindOneLogicFunctionSourceCodeQuery = { __typename?: 'Query', getLogicFunctionSourceCode?: any | null }; + export type UploadWorkspaceMemberProfilePictureMutationVariables = Exact<{ file: Scalars['Upload']; }>; @@ -6428,69 +6488,6 @@ export type GetSsoIdentityProvidersQueryVariables = Exact<{ [key: string]: never export type GetSsoIdentityProvidersQuery = { __typename?: 'Query', getSSOIdentityProviders: Array<{ __typename?: 'FindAvailableSSOIDPOutput', type: IdentityProviderType, id: string, name: string, issuer: string, status: SsoIdentityProviderStatus }> }; -export type ServerlessFunctionFieldsFragment = { __typename?: 'ServerlessFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string }; - -export type CreateOneServerlessFunctionItemMutationVariables = Exact<{ - input: CreateServerlessFunctionInput; -}>; - - -export type CreateOneServerlessFunctionItemMutation = { __typename?: 'Mutation', createOneServerlessFunction: { __typename?: 'ServerlessFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string } }; - -export type DeleteOneServerlessFunctionMutationVariables = Exact<{ - input: ServerlessFunctionIdInput; -}>; - - -export type DeleteOneServerlessFunctionMutation = { __typename?: 'Mutation', deleteOneServerlessFunction: { __typename?: 'ServerlessFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string } }; - -export type ExecuteOneServerlessFunctionMutationVariables = Exact<{ - input: ExecuteServerlessFunctionInput; -}>; - - -export type ExecuteOneServerlessFunctionMutation = { __typename?: 'Mutation', executeOneServerlessFunction: { __typename?: 'ServerlessFunctionExecutionResult', data?: any | null, logs: string, duration: number, status: ServerlessFunctionExecutionStatus, error?: any | null } }; - -export type PublishOneServerlessFunctionMutationVariables = Exact<{ - input: PublishServerlessFunctionInput; -}>; - - -export type PublishOneServerlessFunctionMutation = { __typename?: 'Mutation', publishServerlessFunction: { __typename?: 'ServerlessFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string } }; - -export type UpdateOneServerlessFunctionMutationVariables = Exact<{ - input: UpdateServerlessFunctionInput; -}>; - - -export type UpdateOneServerlessFunctionMutation = { __typename?: 'Mutation', updateOneServerlessFunction: { __typename?: 'ServerlessFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string } }; - -export type FindManyAvailablePackagesQueryVariables = Exact<{ - input: ServerlessFunctionIdInput; -}>; - - -export type FindManyAvailablePackagesQuery = { __typename?: 'Query', getAvailablePackages: any }; - -export type GetManyServerlessFunctionsQueryVariables = Exact<{ [key: string]: never; }>; - - -export type GetManyServerlessFunctionsQuery = { __typename?: 'Query', findManyServerlessFunctions: Array<{ __typename?: 'ServerlessFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string }> }; - -export type GetOneServerlessFunctionQueryVariables = Exact<{ - input: ServerlessFunctionIdInput; -}>; - - -export type GetOneServerlessFunctionQuery = { __typename?: 'Query', findOneServerlessFunction: { __typename?: 'ServerlessFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, latestVersion?: string | null, publishedVersions: Array, sourceHandlerPath: string, builtHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, applicationId?: string | null, createdAt: string, updatedAt: string } }; - -export type FindOneServerlessFunctionSourceCodeQueryVariables = Exact<{ - input: GetServerlessFunctionSourceCodeInput; -}>; - - -export type FindOneServerlessFunctionSourceCodeQuery = { __typename?: 'Query', getServerlessFunctionSourceCode?: any | null }; - export type VerifyTwoFactorAuthenticationMethodForAuthenticatedUserMutationVariables = Exact<{ otp: Scalars['String']; }>; @@ -7139,8 +7136,8 @@ export const ObjectMetadataFieldsFragmentDoc = gql` } } `; -export const ServerlessFunctionFieldsFragmentDoc = gql` - fragment ServerlessFunctionFields on ServerlessFunction { +export const LogicFunctionFieldsFragmentDoc = gql` + fragment LogicFunctionFields on LogicFunction { id name description @@ -7179,13 +7176,13 @@ export const ApplicationFieldsFragmentDoc = gql` objects { ...ObjectMetadataFields } - serverlessFunctions { - ...ServerlessFunctionFields + logicFunctions { + ...LogicFunctionFields } } ${AgentFieldsFragmentDoc} ${ObjectMetadataFieldsFragmentDoc} -${ServerlessFunctionFieldsFragmentDoc}`; +${LogicFunctionFieldsFragmentDoc}`; export const AuthTokenFragmentFragmentDoc = gql` fragment AuthTokenFragment on AuthToken { token @@ -12401,6 +12398,310 @@ export function useUpdateLabPublicFeatureFlagMutation(baseOptions?: Apollo.Mutat export type UpdateLabPublicFeatureFlagMutationHookResult = ReturnType; export type UpdateLabPublicFeatureFlagMutationResult = Apollo.MutationResult; export type UpdateLabPublicFeatureFlagMutationOptions = Apollo.BaseMutationOptions; +export const CreateOneLogicFunctionItemDocument = gql` + mutation CreateOneLogicFunctionItem($input: CreateLogicFunctionInput!) { + createOneLogicFunction(input: $input) { + ...LogicFunctionFields + } +} + ${LogicFunctionFieldsFragmentDoc}`; +export type CreateOneLogicFunctionItemMutationFn = Apollo.MutationFunction; + +/** + * __useCreateOneLogicFunctionItemMutation__ + * + * To run a mutation, you first call `useCreateOneLogicFunctionItemMutation` within a React component and pass it any options that fit your needs. + * When your component renders, `useCreateOneLogicFunctionItemMutation` returns a tuple that includes: + * - A mutate function that you can call at any time to execute the mutation + * - An object with fields that represent the current status of the mutation's execution + * + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; + * + * @example + * const [createOneLogicFunctionItemMutation, { data, loading, error }] = useCreateOneLogicFunctionItemMutation({ + * variables: { + * input: // value for 'input' + * }, + * }); + */ +export function useCreateOneLogicFunctionItemMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(CreateOneLogicFunctionItemDocument, options); + } +export type CreateOneLogicFunctionItemMutationHookResult = ReturnType; +export type CreateOneLogicFunctionItemMutationResult = Apollo.MutationResult; +export type CreateOneLogicFunctionItemMutationOptions = Apollo.BaseMutationOptions; +export const DeleteOneLogicFunctionDocument = gql` + mutation DeleteOneLogicFunction($input: LogicFunctionIdInput!) { + deleteOneLogicFunction(input: $input) { + ...LogicFunctionFields + } +} + ${LogicFunctionFieldsFragmentDoc}`; +export type DeleteOneLogicFunctionMutationFn = Apollo.MutationFunction; + +/** + * __useDeleteOneLogicFunctionMutation__ + * + * To run a mutation, you first call `useDeleteOneLogicFunctionMutation` within a React component and pass it any options that fit your needs. + * When your component renders, `useDeleteOneLogicFunctionMutation` returns a tuple that includes: + * - A mutate function that you can call at any time to execute the mutation + * - An object with fields that represent the current status of the mutation's execution + * + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; + * + * @example + * const [deleteOneLogicFunctionMutation, { data, loading, error }] = useDeleteOneLogicFunctionMutation({ + * variables: { + * input: // value for 'input' + * }, + * }); + */ +export function useDeleteOneLogicFunctionMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(DeleteOneLogicFunctionDocument, options); + } +export type DeleteOneLogicFunctionMutationHookResult = ReturnType; +export type DeleteOneLogicFunctionMutationResult = Apollo.MutationResult; +export type DeleteOneLogicFunctionMutationOptions = Apollo.BaseMutationOptions; +export const ExecuteOneLogicFunctionDocument = gql` + mutation ExecuteOneLogicFunction($input: ExecuteLogicFunctionInput!) { + executeOneLogicFunction(input: $input) { + data + logs + duration + status + error + } +} + `; +export type ExecuteOneLogicFunctionMutationFn = Apollo.MutationFunction; + +/** + * __useExecuteOneLogicFunctionMutation__ + * + * To run a mutation, you first call `useExecuteOneLogicFunctionMutation` within a React component and pass it any options that fit your needs. + * When your component renders, `useExecuteOneLogicFunctionMutation` returns a tuple that includes: + * - A mutate function that you can call at any time to execute the mutation + * - An object with fields that represent the current status of the mutation's execution + * + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; + * + * @example + * const [executeOneLogicFunctionMutation, { data, loading, error }] = useExecuteOneLogicFunctionMutation({ + * variables: { + * input: // value for 'input' + * }, + * }); + */ +export function useExecuteOneLogicFunctionMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(ExecuteOneLogicFunctionDocument, options); + } +export type ExecuteOneLogicFunctionMutationHookResult = ReturnType; +export type ExecuteOneLogicFunctionMutationResult = Apollo.MutationResult; +export type ExecuteOneLogicFunctionMutationOptions = Apollo.BaseMutationOptions; +export const PublishOneLogicFunctionDocument = gql` + mutation PublishOneLogicFunction($input: PublishLogicFunctionInput!) { + publishLogicFunction(input: $input) { + ...LogicFunctionFields + } +} + ${LogicFunctionFieldsFragmentDoc}`; +export type PublishOneLogicFunctionMutationFn = Apollo.MutationFunction; + +/** + * __usePublishOneLogicFunctionMutation__ + * + * To run a mutation, you first call `usePublishOneLogicFunctionMutation` within a React component and pass it any options that fit your needs. + * When your component renders, `usePublishOneLogicFunctionMutation` returns a tuple that includes: + * - A mutate function that you can call at any time to execute the mutation + * - An object with fields that represent the current status of the mutation's execution + * + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; + * + * @example + * const [publishOneLogicFunctionMutation, { data, loading, error }] = usePublishOneLogicFunctionMutation({ + * variables: { + * input: // value for 'input' + * }, + * }); + */ +export function usePublishOneLogicFunctionMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(PublishOneLogicFunctionDocument, options); + } +export type PublishOneLogicFunctionMutationHookResult = ReturnType; +export type PublishOneLogicFunctionMutationResult = Apollo.MutationResult; +export type PublishOneLogicFunctionMutationOptions = Apollo.BaseMutationOptions; +export const UpdateOneLogicFunctionDocument = gql` + mutation UpdateOneLogicFunction($input: UpdateLogicFunctionInput!) { + updateOneLogicFunction(input: $input) { + ...LogicFunctionFields + } +} + ${LogicFunctionFieldsFragmentDoc}`; +export type UpdateOneLogicFunctionMutationFn = Apollo.MutationFunction; + +/** + * __useUpdateOneLogicFunctionMutation__ + * + * To run a mutation, you first call `useUpdateOneLogicFunctionMutation` within a React component and pass it any options that fit your needs. + * When your component renders, `useUpdateOneLogicFunctionMutation` returns a tuple that includes: + * - A mutate function that you can call at any time to execute the mutation + * - An object with fields that represent the current status of the mutation's execution + * + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; + * + * @example + * const [updateOneLogicFunctionMutation, { data, loading, error }] = useUpdateOneLogicFunctionMutation({ + * variables: { + * input: // value for 'input' + * }, + * }); + */ +export function useUpdateOneLogicFunctionMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(UpdateOneLogicFunctionDocument, options); + } +export type UpdateOneLogicFunctionMutationHookResult = ReturnType; +export type UpdateOneLogicFunctionMutationResult = Apollo.MutationResult; +export type UpdateOneLogicFunctionMutationOptions = Apollo.BaseMutationOptions; +export const FindManyAvailablePackagesDocument = gql` + query FindManyAvailablePackages($input: LogicFunctionIdInput!) { + getAvailablePackages(input: $input) +} + `; + +/** + * __useFindManyAvailablePackagesQuery__ + * + * To run a query within a React component, call `useFindManyAvailablePackagesQuery` and pass it any options that fit your needs. + * When your component renders, `useFindManyAvailablePackagesQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = useFindManyAvailablePackagesQuery({ + * variables: { + * input: // value for 'input' + * }, + * }); + */ +export function useFindManyAvailablePackagesQuery(baseOptions: Apollo.QueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(FindManyAvailablePackagesDocument, options); + } +export function useFindManyAvailablePackagesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(FindManyAvailablePackagesDocument, options); + } +export type FindManyAvailablePackagesQueryHookResult = ReturnType; +export type FindManyAvailablePackagesLazyQueryHookResult = ReturnType; +export type FindManyAvailablePackagesQueryResult = Apollo.QueryResult; +export const GetManyLogicFunctionsDocument = gql` + query GetManyLogicFunctions { + findManyLogicFunctions { + ...LogicFunctionFields + } +} + ${LogicFunctionFieldsFragmentDoc}`; + +/** + * __useGetManyLogicFunctionsQuery__ + * + * To run a query within a React component, call `useGetManyLogicFunctionsQuery` and pass it any options that fit your needs. + * When your component renders, `useGetManyLogicFunctionsQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = useGetManyLogicFunctionsQuery({ + * variables: { + * }, + * }); + */ +export function useGetManyLogicFunctionsQuery(baseOptions?: Apollo.QueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(GetManyLogicFunctionsDocument, options); + } +export function useGetManyLogicFunctionsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(GetManyLogicFunctionsDocument, options); + } +export type GetManyLogicFunctionsQueryHookResult = ReturnType; +export type GetManyLogicFunctionsLazyQueryHookResult = ReturnType; +export type GetManyLogicFunctionsQueryResult = Apollo.QueryResult; +export const GetOneLogicFunctionDocument = gql` + query GetOneLogicFunction($input: LogicFunctionIdInput!) { + findOneLogicFunction(input: $input) { + ...LogicFunctionFields + } +} + ${LogicFunctionFieldsFragmentDoc}`; + +/** + * __useGetOneLogicFunctionQuery__ + * + * To run a query within a React component, call `useGetOneLogicFunctionQuery` and pass it any options that fit your needs. + * When your component renders, `useGetOneLogicFunctionQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = useGetOneLogicFunctionQuery({ + * variables: { + * input: // value for 'input' + * }, + * }); + */ +export function useGetOneLogicFunctionQuery(baseOptions: Apollo.QueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(GetOneLogicFunctionDocument, options); + } +export function useGetOneLogicFunctionLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(GetOneLogicFunctionDocument, options); + } +export type GetOneLogicFunctionQueryHookResult = ReturnType; +export type GetOneLogicFunctionLazyQueryHookResult = ReturnType; +export type GetOneLogicFunctionQueryResult = Apollo.QueryResult; +export const FindOneLogicFunctionSourceCodeDocument = gql` + query FindOneLogicFunctionSourceCode($input: GetLogicFunctionSourceCodeInput!) { + getLogicFunctionSourceCode(input: $input) +} + `; + +/** + * __useFindOneLogicFunctionSourceCodeQuery__ + * + * To run a query within a React component, call `useFindOneLogicFunctionSourceCodeQuery` and pass it any options that fit your needs. + * When your component renders, `useFindOneLogicFunctionSourceCodeQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = useFindOneLogicFunctionSourceCodeQuery({ + * variables: { + * input: // value for 'input' + * }, + * }); + */ +export function useFindOneLogicFunctionSourceCodeQuery(baseOptions: Apollo.QueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(FindOneLogicFunctionSourceCodeDocument, options); + } +export function useFindOneLogicFunctionSourceCodeLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(FindOneLogicFunctionSourceCodeDocument, options); + } +export type FindOneLogicFunctionSourceCodeQueryHookResult = ReturnType; +export type FindOneLogicFunctionSourceCodeLazyQueryHookResult = ReturnType; +export type FindOneLogicFunctionSourceCodeQueryResult = Apollo.QueryResult; export const UploadWorkspaceMemberProfilePictureDocument = gql` mutation UploadWorkspaceMemberProfilePicture($file: Upload!) { uploadWorkspaceMemberProfilePicture(file: $file) { @@ -13138,310 +13439,6 @@ export function useGetSsoIdentityProvidersLazyQuery(baseOptions?: Apollo.LazyQue export type GetSsoIdentityProvidersQueryHookResult = ReturnType; export type GetSsoIdentityProvidersLazyQueryHookResult = ReturnType; export type GetSsoIdentityProvidersQueryResult = Apollo.QueryResult; -export const CreateOneServerlessFunctionItemDocument = gql` - mutation CreateOneServerlessFunctionItem($input: CreateServerlessFunctionInput!) { - createOneServerlessFunction(input: $input) { - ...ServerlessFunctionFields - } -} - ${ServerlessFunctionFieldsFragmentDoc}`; -export type CreateOneServerlessFunctionItemMutationFn = Apollo.MutationFunction; - -/** - * __useCreateOneServerlessFunctionItemMutation__ - * - * To run a mutation, you first call `useCreateOneServerlessFunctionItemMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateOneServerlessFunctionItemMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createOneServerlessFunctionItemMutation, { data, loading, error }] = useCreateOneServerlessFunctionItemMutation({ - * variables: { - * input: // value for 'input' - * }, - * }); - */ -export function useCreateOneServerlessFunctionItemMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateOneServerlessFunctionItemDocument, options); - } -export type CreateOneServerlessFunctionItemMutationHookResult = ReturnType; -export type CreateOneServerlessFunctionItemMutationResult = Apollo.MutationResult; -export type CreateOneServerlessFunctionItemMutationOptions = Apollo.BaseMutationOptions; -export const DeleteOneServerlessFunctionDocument = gql` - mutation DeleteOneServerlessFunction($input: ServerlessFunctionIdInput!) { - deleteOneServerlessFunction(input: $input) { - ...ServerlessFunctionFields - } -} - ${ServerlessFunctionFieldsFragmentDoc}`; -export type DeleteOneServerlessFunctionMutationFn = Apollo.MutationFunction; - -/** - * __useDeleteOneServerlessFunctionMutation__ - * - * To run a mutation, you first call `useDeleteOneServerlessFunctionMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useDeleteOneServerlessFunctionMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [deleteOneServerlessFunctionMutation, { data, loading, error }] = useDeleteOneServerlessFunctionMutation({ - * variables: { - * input: // value for 'input' - * }, - * }); - */ -export function useDeleteOneServerlessFunctionMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(DeleteOneServerlessFunctionDocument, options); - } -export type DeleteOneServerlessFunctionMutationHookResult = ReturnType; -export type DeleteOneServerlessFunctionMutationResult = Apollo.MutationResult; -export type DeleteOneServerlessFunctionMutationOptions = Apollo.BaseMutationOptions; -export const ExecuteOneServerlessFunctionDocument = gql` - mutation ExecuteOneServerlessFunction($input: ExecuteServerlessFunctionInput!) { - executeOneServerlessFunction(input: $input) { - data - logs - duration - status - error - } -} - `; -export type ExecuteOneServerlessFunctionMutationFn = Apollo.MutationFunction; - -/** - * __useExecuteOneServerlessFunctionMutation__ - * - * To run a mutation, you first call `useExecuteOneServerlessFunctionMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useExecuteOneServerlessFunctionMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [executeOneServerlessFunctionMutation, { data, loading, error }] = useExecuteOneServerlessFunctionMutation({ - * variables: { - * input: // value for 'input' - * }, - * }); - */ -export function useExecuteOneServerlessFunctionMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(ExecuteOneServerlessFunctionDocument, options); - } -export type ExecuteOneServerlessFunctionMutationHookResult = ReturnType; -export type ExecuteOneServerlessFunctionMutationResult = Apollo.MutationResult; -export type ExecuteOneServerlessFunctionMutationOptions = Apollo.BaseMutationOptions; -export const PublishOneServerlessFunctionDocument = gql` - mutation PublishOneServerlessFunction($input: PublishServerlessFunctionInput!) { - publishServerlessFunction(input: $input) { - ...ServerlessFunctionFields - } -} - ${ServerlessFunctionFieldsFragmentDoc}`; -export type PublishOneServerlessFunctionMutationFn = Apollo.MutationFunction; - -/** - * __usePublishOneServerlessFunctionMutation__ - * - * To run a mutation, you first call `usePublishOneServerlessFunctionMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `usePublishOneServerlessFunctionMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [publishOneServerlessFunctionMutation, { data, loading, error }] = usePublishOneServerlessFunctionMutation({ - * variables: { - * input: // value for 'input' - * }, - * }); - */ -export function usePublishOneServerlessFunctionMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(PublishOneServerlessFunctionDocument, options); - } -export type PublishOneServerlessFunctionMutationHookResult = ReturnType; -export type PublishOneServerlessFunctionMutationResult = Apollo.MutationResult; -export type PublishOneServerlessFunctionMutationOptions = Apollo.BaseMutationOptions; -export const UpdateOneServerlessFunctionDocument = gql` - mutation UpdateOneServerlessFunction($input: UpdateServerlessFunctionInput!) { - updateOneServerlessFunction(input: $input) { - ...ServerlessFunctionFields - } -} - ${ServerlessFunctionFieldsFragmentDoc}`; -export type UpdateOneServerlessFunctionMutationFn = Apollo.MutationFunction; - -/** - * __useUpdateOneServerlessFunctionMutation__ - * - * To run a mutation, you first call `useUpdateOneServerlessFunctionMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUpdateOneServerlessFunctionMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [updateOneServerlessFunctionMutation, { data, loading, error }] = useUpdateOneServerlessFunctionMutation({ - * variables: { - * input: // value for 'input' - * }, - * }); - */ -export function useUpdateOneServerlessFunctionMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(UpdateOneServerlessFunctionDocument, options); - } -export type UpdateOneServerlessFunctionMutationHookResult = ReturnType; -export type UpdateOneServerlessFunctionMutationResult = Apollo.MutationResult; -export type UpdateOneServerlessFunctionMutationOptions = Apollo.BaseMutationOptions; -export const FindManyAvailablePackagesDocument = gql` - query FindManyAvailablePackages($input: ServerlessFunctionIdInput!) { - getAvailablePackages(input: $input) -} - `; - -/** - * __useFindManyAvailablePackagesQuery__ - * - * To run a query within a React component, call `useFindManyAvailablePackagesQuery` and pass it any options that fit your needs. - * When your component renders, `useFindManyAvailablePackagesQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useFindManyAvailablePackagesQuery({ - * variables: { - * input: // value for 'input' - * }, - * }); - */ -export function useFindManyAvailablePackagesQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(FindManyAvailablePackagesDocument, options); - } -export function useFindManyAvailablePackagesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(FindManyAvailablePackagesDocument, options); - } -export type FindManyAvailablePackagesQueryHookResult = ReturnType; -export type FindManyAvailablePackagesLazyQueryHookResult = ReturnType; -export type FindManyAvailablePackagesQueryResult = Apollo.QueryResult; -export const GetManyServerlessFunctionsDocument = gql` - query GetManyServerlessFunctions { - findManyServerlessFunctions { - ...ServerlessFunctionFields - } -} - ${ServerlessFunctionFieldsFragmentDoc}`; - -/** - * __useGetManyServerlessFunctionsQuery__ - * - * To run a query within a React component, call `useGetManyServerlessFunctionsQuery` and pass it any options that fit your needs. - * When your component renders, `useGetManyServerlessFunctionsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetManyServerlessFunctionsQuery({ - * variables: { - * }, - * }); - */ -export function useGetManyServerlessFunctionsQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetManyServerlessFunctionsDocument, options); - } -export function useGetManyServerlessFunctionsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetManyServerlessFunctionsDocument, options); - } -export type GetManyServerlessFunctionsQueryHookResult = ReturnType; -export type GetManyServerlessFunctionsLazyQueryHookResult = ReturnType; -export type GetManyServerlessFunctionsQueryResult = Apollo.QueryResult; -export const GetOneServerlessFunctionDocument = gql` - query GetOneServerlessFunction($input: ServerlessFunctionIdInput!) { - findOneServerlessFunction(input: $input) { - ...ServerlessFunctionFields - } -} - ${ServerlessFunctionFieldsFragmentDoc}`; - -/** - * __useGetOneServerlessFunctionQuery__ - * - * To run a query within a React component, call `useGetOneServerlessFunctionQuery` and pass it any options that fit your needs. - * When your component renders, `useGetOneServerlessFunctionQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetOneServerlessFunctionQuery({ - * variables: { - * input: // value for 'input' - * }, - * }); - */ -export function useGetOneServerlessFunctionQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetOneServerlessFunctionDocument, options); - } -export function useGetOneServerlessFunctionLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetOneServerlessFunctionDocument, options); - } -export type GetOneServerlessFunctionQueryHookResult = ReturnType; -export type GetOneServerlessFunctionLazyQueryHookResult = ReturnType; -export type GetOneServerlessFunctionQueryResult = Apollo.QueryResult; -export const FindOneServerlessFunctionSourceCodeDocument = gql` - query FindOneServerlessFunctionSourceCode($input: GetServerlessFunctionSourceCodeInput!) { - getServerlessFunctionSourceCode(input: $input) -} - `; - -/** - * __useFindOneServerlessFunctionSourceCodeQuery__ - * - * To run a query within a React component, call `useFindOneServerlessFunctionSourceCodeQuery` and pass it any options that fit your needs. - * When your component renders, `useFindOneServerlessFunctionSourceCodeQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useFindOneServerlessFunctionSourceCodeQuery({ - * variables: { - * input: // value for 'input' - * }, - * }); - */ -export function useFindOneServerlessFunctionSourceCodeQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(FindOneServerlessFunctionSourceCodeDocument, options); - } -export function useFindOneServerlessFunctionSourceCodeLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(FindOneServerlessFunctionSourceCodeDocument, options); - } -export type FindOneServerlessFunctionSourceCodeQueryHookResult = ReturnType; -export type FindOneServerlessFunctionSourceCodeLazyQueryHookResult = ReturnType; -export type FindOneServerlessFunctionSourceCodeQueryResult = Apollo.QueryResult; export const VerifyTwoFactorAuthenticationMethodForAuthenticatedUserDocument = gql` mutation verifyTwoFactorAuthenticationMethodForAuthenticatedUser($otp: String!) { verifyTwoFactorAuthenticationMethodForAuthenticatedUser(otp: $otp) { diff --git a/packages/twenty-front/src/generated/graphql.ts b/packages/twenty-front/src/generated/graphql.ts index 6235a7a1875..cc011e54082 100644 --- a/packages/twenty-front/src/generated/graphql.ts +++ b/packages/twenty-front/src/generated/graphql.ts @@ -186,11 +186,10 @@ export enum AggregateOperations { export enum AllMetadataName { agent = 'agent', commandMenuItem = 'commandMenuItem', - cronTrigger = 'cronTrigger', - databaseEventTrigger = 'databaseEventTrigger', fieldMetadata = 'fieldMetadata', frontComponent = 'frontComponent', index = 'index', + logicFunction = 'logicFunction', navigationMenuItem = 'navigationMenuItem', objectMetadata = 'objectMetadata', pageLayout = 'pageLayout', @@ -198,10 +197,8 @@ export enum AllMetadataName { pageLayoutWidget = 'pageLayoutWidget', role = 'role', roleTarget = 'roleTarget', - routeTrigger = 'routeTrigger', rowLevelPermissionPredicate = 'rowLevelPermissionPredicate', rowLevelPermissionPredicateGroup = 'rowLevelPermissionPredicateGroup', - serverlessFunction = 'serverlessFunction', skill = 'skill', view = 'view', viewField = 'viewField', @@ -273,13 +270,13 @@ export type Application = { agents: Array; applicationVariables: Array; canBeUninstalled: Scalars['Boolean']; - defaultServerlessFunctionRole?: Maybe; - defaultServerlessFunctionRoleId?: Maybe; + defaultLogicFunctionRole?: Maybe; + defaultLogicFunctionRoleId?: Maybe; description: Scalars['String']; id: Scalars['UUID']; + logicFunctions: Array; name: Scalars['String']; objects: Array; - serverlessFunctions: Array; universalIdentifier: Scalars['String']; version: Scalars['String']; }; @@ -741,11 +738,11 @@ export enum ConfigVariablesGroup { GOOGLE_AUTH = 'GOOGLE_AUTH', LLM = 'LLM', LOGGING = 'LOGGING', + LOGIC_FUNCTION_CONFIG = 'LOGIC_FUNCTION_CONFIG', METERING = 'METERING', MICROSOFT_AUTH = 'MICROSOFT_AUTH', OTHER = 'OTHER', RATE_LIMITING = 'RATE_LIMITING', - SERVERLESS_CONFIG = 'SERVERLESS_CONFIG', SERVER_CONFIG = 'SERVER_CONFIG', SSL = 'SSL', STORAGE_CONFIG = 'STORAGE_CONFIG', @@ -957,6 +954,18 @@ export type CreateFieldInput = { type: FieldMetadataType; }; +export type CreateLogicFunctionInput = { + builtHandlerPath?: InputMaybe; + code?: InputMaybe; + description?: InputMaybe; + handlerName?: InputMaybe; + isTool?: InputMaybe; + name: Scalars['String']; + sourceHandlerPath?: InputMaybe; + timeoutSeconds?: InputMaybe; + toolInputSchema?: InputMaybe; +}; + export type CreateObjectInput = { description?: InputMaybe; icon?: InputMaybe; @@ -1019,18 +1028,6 @@ export type CreateRoleInput = { label: Scalars['String']; }; -export type CreateServerlessFunctionInput = { - builtHandlerPath?: InputMaybe; - code?: InputMaybe; - description?: InputMaybe; - handlerName?: InputMaybe; - isTool?: InputMaybe; - name: Scalars['String']; - sourceHandlerPath?: InputMaybe; - timeoutSeconds?: InputMaybe; - toolInputSchema?: InputMaybe; -}; - export type CreateViewFieldInput = { aggregateOperation?: InputMaybe; fieldMetadataId: Scalars['UUID']; @@ -1348,12 +1345,12 @@ export type EventWithQueryIds = { queryIds: Array; }; -export type ExecuteServerlessFunctionInput = { - /** Id of the serverless function to execute */ +export type ExecuteLogicFunctionInput = { + /** Id of the logic function to execute */ id: Scalars['UUID']; /** Payload in JSON format */ payload: Scalars['JSON']; - /** Version of the serverless function to execute */ + /** Version of the logic function to execute */ version?: Scalars['String']; }; @@ -1522,10 +1519,10 @@ export enum FileFolder { BuiltFunction = 'BuiltFunction', File = 'File', FilesField = 'FilesField', + LogicFunction = 'LogicFunction', + LogicFunctionToDelete = 'LogicFunctionToDelete', PersonPicture = 'PersonPicture', ProfilePicture = 'ProfilePicture', - ServerlessFunction = 'ServerlessFunction', - ServerlessFunctionToDelete = 'ServerlessFunctionToDelete', Source = 'Source', TemporaryFilesField = 'TemporaryFilesField', WorkspaceLogo = 'WorkspaceLogo' @@ -1606,7 +1603,7 @@ export type GetAuthorizationUrlForSsoOutput = { type: Scalars['String']; }; -export type GetServerlessFunctionSourceCodeInput = { +export type GetLogicFunctionSourceCodeInput = { /** The id of the function. */ id: Scalars['ID']; /** The version of the function */ @@ -1880,6 +1877,77 @@ export type Location = { lng?: Maybe; }; +export type LogicFunction = { + __typename?: 'LogicFunction'; + applicationId?: Maybe; + builtHandlerPath: Scalars['String']; + createdAt: Scalars['DateTime']; + cronTriggerSettings?: Maybe; + databaseEventTriggerSettings?: Maybe; + description?: Maybe; + handlerName: Scalars['String']; + httpRouteTriggerSettings?: Maybe; + id: Scalars['UUID']; + isTool: Scalars['Boolean']; + latestVersion?: Maybe; + name: Scalars['String']; + publishedVersions: Array; + runtime: Scalars['String']; + sourceHandlerPath: Scalars['String']; + timeoutSeconds: Scalars['Float']; + toolInputSchema?: Maybe; + universalIdentifier?: Maybe; + updatedAt: Scalars['DateTime']; +}; + +export type LogicFunctionExecutionResult = { + __typename?: 'LogicFunctionExecutionResult'; + /** Execution result in JSON format */ + data?: Maybe; + /** Execution duration in milliseconds */ + duration: Scalars['Float']; + /** Execution error in JSON format */ + error?: Maybe; + /** Execution Logs */ + logs: Scalars['String']; + /** Execution status */ + status: LogicFunctionExecutionStatus; +}; + +/** Status of the logic function execution */ +export enum LogicFunctionExecutionStatus { + ERROR = 'ERROR', + IDLE = 'IDLE', + SUCCESS = 'SUCCESS' +} + +export type LogicFunctionIdInput = { + /** The id of the function. */ + id: Scalars['ID']; +}; + +export type LogicFunctionLayer = { + __typename?: 'LogicFunctionLayer'; + applicationId?: Maybe; + createdAt: Scalars['DateTime']; + id: Scalars['UUID']; + updatedAt: Scalars['DateTime']; +}; + +export type LogicFunctionLogs = { + __typename?: 'LogicFunctionLogs'; + /** Execution Logs */ + logs: Scalars['String']; +}; + +export type LogicFunctionLogsInput = { + applicationId?: InputMaybe; + applicationUniversalIdentifier?: InputMaybe; + id?: InputMaybe; + name?: InputMaybe; + universalIdentifier?: InputMaybe; +}; + export type LoginTokenOutput = { __typename?: 'LoginTokenOutput'; loginToken: AuthToken; @@ -1934,10 +2002,10 @@ export type Mutation = { createOneAgent: Agent; createOneAppToken: AppToken; createOneField: Field; + createOneLogicFunction: LogicFunction; + createOneLogicFunctionLayer: LogicFunctionLayer; createOneObject: Object; createOneRole: Role; - createOneServerlessFunction: ServerlessFunction; - createOneServerlessFunctionLayer: ServerlessFunctionLayer; createPageLayout: PageLayout; createPageLayoutTab: PageLayoutTab; createPageLayoutWidget: PageLayoutWidget; @@ -1962,9 +2030,9 @@ export type Mutation = { deleteJobs: DeleteJobsResponse; deleteOneAgent: Agent; deleteOneField: Field; + deleteOneLogicFunction: LogicFunction; deleteOneObject: Object; deleteOneRole: Scalars['String']; - deleteOneServerlessFunction: ServerlessFunction; deletePublicDomain: Scalars['Boolean']; deleteSSOIdentityProvider: DeleteSsoOutput; deleteTwoFactorAuthenticationMethod: DeleteTwoFactorAuthenticationMethodOutput; @@ -1992,7 +2060,7 @@ export type Mutation = { emailPasswordResetLink: EmailPasswordResetLinkOutput; enablePostgresProxy: PostgresCredentials; endSubscriptionTrialPeriod: BillingEndTrialPeriodOutput; - executeOneServerlessFunction: ServerlessFunctionExecutionResult; + executeOneLogicFunction: LogicFunctionExecutionResult; generateApiKeyToken: ApiKeyToken; generateTransientToken: TransientTokenOutput; getAuthTokensFromLoginToken: AuthTokens; @@ -2003,7 +2071,7 @@ export type Mutation = { initiateOTPProvisioning: InitiateTwoFactorAuthenticationProvisioningOutput; initiateOTPProvisioningForAuthenticatedUser: InitiateTwoFactorAuthenticationProvisioningOutput; installApplication: Scalars['Boolean']; - publishServerlessFunction: ServerlessFunction; + publishLogicFunction: LogicFunction; removeQueryFromEventStream: Scalars['Boolean']; removeRoleFromAgent: Scalars['Boolean']; renewToken: AuthTokens; @@ -2043,9 +2111,9 @@ export type Mutation = { updateOneAgent: Agent; updateOneApplicationVariable: Scalars['Boolean']; updateOneField: Field; + updateOneLogicFunction: LogicFunction; updateOneObject: Object; updateOneRole: Role; - updateOneServerlessFunction: ServerlessFunction; updatePageLayout: PageLayout; updatePageLayoutTab: PageLayoutTab; updatePageLayoutWidget: PageLayoutWidget; @@ -2231,6 +2299,17 @@ export type MutationCreateOneFieldArgs = { }; +export type MutationCreateOneLogicFunctionArgs = { + input: CreateLogicFunctionInput; +}; + + +export type MutationCreateOneLogicFunctionLayerArgs = { + packageJson: Scalars['JSON']; + yarnLock: Scalars['String']; +}; + + export type MutationCreateOneObjectArgs = { input: CreateOneObjectInput; }; @@ -2241,17 +2320,6 @@ export type MutationCreateOneRoleArgs = { }; -export type MutationCreateOneServerlessFunctionArgs = { - input: CreateServerlessFunctionInput; -}; - - -export type MutationCreateOneServerlessFunctionLayerArgs = { - packageJson: Scalars['JSON']; - yarnLock: Scalars['String']; -}; - - export type MutationCreatePageLayoutArgs = { input: CreatePageLayoutInput; }; @@ -2368,6 +2436,11 @@ export type MutationDeleteOneFieldArgs = { }; +export type MutationDeleteOneLogicFunctionArgs = { + input: LogicFunctionIdInput; +}; + + export type MutationDeleteOneObjectArgs = { input: DeleteOneObjectInput; }; @@ -2378,11 +2451,6 @@ export type MutationDeleteOneRoleArgs = { }; -export type MutationDeleteOneServerlessFunctionArgs = { - input: ServerlessFunctionIdInput; -}; - - export type MutationDeletePublicDomainArgs = { domain: Scalars['String']; }; @@ -2499,8 +2567,8 @@ export type MutationEmailPasswordResetLinkArgs = { }; -export type MutationExecuteOneServerlessFunctionArgs = { - input: ExecuteServerlessFunctionInput; +export type MutationExecuteOneLogicFunctionArgs = { + input: ExecuteLogicFunctionInput; }; @@ -2556,8 +2624,8 @@ export type MutationInstallApplicationArgs = { }; -export type MutationPublishServerlessFunctionArgs = { - input: PublishServerlessFunctionInput; +export type MutationPublishLogicFunctionArgs = { + input: PublishLogicFunctionInput; }; @@ -2762,6 +2830,11 @@ export type MutationUpdateOneFieldArgs = { }; +export type MutationUpdateOneLogicFunctionArgs = { + input: UpdateLogicFunctionInput; +}; + + export type MutationUpdateOneObjectArgs = { input: UpdateOneObjectInput; }; @@ -2772,11 +2845,6 @@ export type MutationUpdateOneRoleArgs = { }; -export type MutationUpdateOneServerlessFunctionArgs = { - input: UpdateServerlessFunctionInput; -}; - - export type MutationUpdatePageLayoutArgs = { id: Scalars['String']; input: UpdatePageLayoutInput; @@ -3335,7 +3403,7 @@ export type PublicWorkspaceDataOutput = { workspaceUrls: WorkspaceUrls; }; -export type PublishServerlessFunctionInput = { +export type PublishLogicFunctionInput = { /** The id of the function. */ id: Scalars['ID']; }; @@ -3356,11 +3424,11 @@ export type Query = { fields: FieldConnection; findManyAgents: Array; findManyApplications: Array; + findManyLogicFunctions: Array; findManyPublicDomains: Array; - findManyServerlessFunctions: Array; findOneAgent: Agent; findOneApplication: Application; - findOneServerlessFunction: ServerlessFunction; + findOneLogicFunction: LogicFunction; findWorkspaceFromInviteHash: Workspace; findWorkspaceInvitations: Array; getAddressDetails: PlaceDetailsResult; @@ -3384,6 +3452,7 @@ export type Query = { getDatabaseConfigVariable: ConfigVariable; getEmailingDomains: Array; getIndicatorHealthStatus: AdminPanelHealthServiceData; + getLogicFunctionSourceCode?: Maybe; getMeteredProductsUsage: Array; getPageLayout?: Maybe; getPageLayoutTab: PageLayoutTab; @@ -3397,7 +3466,6 @@ export type Query = { getQueueMetrics: QueueMetricsData; getRoles: Array; getSSOIdentityProviders: Array; - getServerlessFunctionSourceCode?: Maybe; getSystemHealthStatus: SystemHealth; getTimelineCalendarEventsFromCompanyId: TimelineCalendarEventsWithTotal; getTimelineCalendarEventsFromOpportunityId: TimelineCalendarEventsWithTotal; @@ -3462,8 +3530,8 @@ export type QueryFindOneApplicationArgs = { }; -export type QueryFindOneServerlessFunctionArgs = { - input: ServerlessFunctionIdInput; +export type QueryFindOneLogicFunctionArgs = { + input: LogicFunctionIdInput; }; @@ -3487,7 +3555,7 @@ export type QueryGetAutoCompleteAddressArgs = { export type QueryGetAvailablePackagesArgs = { - input: ServerlessFunctionIdInput; + input: LogicFunctionIdInput; }; @@ -3566,6 +3634,11 @@ export type QueryGetIndicatorHealthStatusArgs = { }; +export type QueryGetLogicFunctionSourceCodeArgs = { + input: GetLogicFunctionSourceCodeInput; +}; + + export type QueryGetPageLayoutArgs = { id: Scalars['String']; }; @@ -3615,11 +3688,6 @@ export type QueryGetQueueMetricsArgs = { }; -export type QueryGetServerlessFunctionSourceCodeArgs = { - input: GetServerlessFunctionSourceCodeInput; -}; - - export type QueryGetTimelineCalendarEventsFromCompanyIdArgs = { companyId: Scalars['UUID']; page: Scalars['Int']; @@ -3986,77 +4054,6 @@ export type Sentry = { release?: Maybe; }; -export type ServerlessFunction = { - __typename?: 'ServerlessFunction'; - applicationId?: Maybe; - builtHandlerPath: Scalars['String']; - createdAt: Scalars['DateTime']; - cronTriggerSettings?: Maybe; - databaseEventTriggerSettings?: Maybe; - description?: Maybe; - handlerName: Scalars['String']; - httpRouteTriggerSettings?: Maybe; - id: Scalars['UUID']; - isTool: Scalars['Boolean']; - latestVersion?: Maybe; - name: Scalars['String']; - publishedVersions: Array; - runtime: Scalars['String']; - sourceHandlerPath: Scalars['String']; - timeoutSeconds: Scalars['Float']; - toolInputSchema?: Maybe; - universalIdentifier?: Maybe; - updatedAt: Scalars['DateTime']; -}; - -export type ServerlessFunctionExecutionResult = { - __typename?: 'ServerlessFunctionExecutionResult'; - /** Execution result in JSON format */ - data?: Maybe; - /** Execution duration in milliseconds */ - duration: Scalars['Float']; - /** Execution error in JSON format */ - error?: Maybe; - /** Execution Logs */ - logs: Scalars['String']; - /** Execution status */ - status: ServerlessFunctionExecutionStatus; -}; - -/** Status of the serverless function execution */ -export enum ServerlessFunctionExecutionStatus { - ERROR = 'ERROR', - IDLE = 'IDLE', - SUCCESS = 'SUCCESS' -} - -export type ServerlessFunctionIdInput = { - /** The id of the function. */ - id: Scalars['ID']; -}; - -export type ServerlessFunctionLayer = { - __typename?: 'ServerlessFunctionLayer'; - applicationId?: Maybe; - createdAt: Scalars['DateTime']; - id: Scalars['UUID']; - updatedAt: Scalars['DateTime']; -}; - -export type ServerlessFunctionLogs = { - __typename?: 'ServerlessFunctionLogs'; - /** Execution Logs */ - logs: Scalars['String']; -}; - -export type ServerlessFunctionLogsInput = { - applicationId?: InputMaybe; - applicationUniversalIdentifier?: InputMaybe; - id?: InputMaybe; - name?: InputMaybe; - universalIdentifier?: InputMaybe; -}; - export type SetupOidcSsoInput = { clientID: Scalars['String']; clientSecret: Scalars['String']; @@ -4135,9 +4132,14 @@ export type SubmitFormStepInput = { export type Subscription = { __typename?: 'Subscription'; + logicFunctionLogs: LogicFunctionLogs; onDbEvent: OnDbEvent; onEventSubscription?: Maybe; - serverlessFunctionLogs: ServerlessFunctionLogs; +}; + + +export type SubscriptionLogicFunctionLogsArgs = { + input: LogicFunctionLogsInput; }; @@ -4150,11 +4152,6 @@ export type SubscriptionOnEventSubscriptionArgs = { eventStreamId: Scalars['String']; }; - -export type SubscriptionServerlessFunctionLogsArgs = { - input: ServerlessFunctionLogsInput; -}; - export enum SubscriptionInterval { Month = 'Month', Year = 'Year' @@ -4398,6 +4395,24 @@ export type UpdateLabPublicFeatureFlagInput = { value: Scalars['Boolean']; }; +export type UpdateLogicFunctionInput = { + /** Id of the logic function to update */ + id: Scalars['UUID']; + /** The logic function updates */ + update: UpdateLogicFunctionInputUpdates; +}; + +export type UpdateLogicFunctionInputUpdates = { + code: Scalars['JSON']; + description?: InputMaybe; + handlerName?: InputMaybe; + isTool?: InputMaybe; + name: Scalars['String']; + sourceHandlerPath?: InputMaybe; + timeoutSeconds?: InputMaybe; + toolInputSchema?: InputMaybe; +}; + export type UpdateObjectPayload = { description?: InputMaybe; icon?: InputMaybe; @@ -4489,24 +4504,6 @@ export type UpdateRolePayload = { label?: InputMaybe; }; -export type UpdateServerlessFunctionInput = { - /** Id of the serverless function to update */ - id: Scalars['UUID']; - /** The serverless function updates */ - update: UpdateServerlessFunctionInputUpdates; -}; - -export type UpdateServerlessFunctionInputUpdates = { - code: Scalars['JSON']; - description?: InputMaybe; - handlerName?: InputMaybe; - isTool?: InputMaybe; - name: Scalars['String']; - sourceHandlerPath?: InputMaybe; - timeoutSeconds?: InputMaybe; - toolInputSchema?: InputMaybe; -}; - export type UpdateViewFieldInput = { /** The id of the view field to update */ id: Scalars['UUID']; diff --git a/packages/twenty-front/src/modules/app/components/AppRouter.tsx b/packages/twenty-front/src/modules/app/components/AppRouter.tsx index c5ebc2815b0..ea85a1fdb4f 100644 --- a/packages/twenty-front/src/modules/app/components/AppRouter.tsx +++ b/packages/twenty-front/src/modules/app/components/AppRouter.tsx @@ -4,7 +4,7 @@ import { RouterProvider } from 'react-router-dom'; import { useRecoilValue } from 'recoil'; export const AppRouter = () => { - // We want to disable serverless function settings but keep the code for now + // We want to disable logic function settings but keep the code for now const isFunctionSettingsEnabled = false; const currentUser = useRecoilValue(currentUserState); diff --git a/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx b/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx index ef9e63000ce..4f78f8ebe61 100644 --- a/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx +++ b/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx @@ -105,12 +105,12 @@ const SettingsDevelopersApiKeysNew = lazy(() => })), ); -const SettingsServerlessFunctionDetail = lazy(() => - import( - '~/pages/settings/serverless-functions/SettingsServerlessFunctionDetail' - ).then((module) => ({ - default: module.SettingsServerlessFunctionDetail, - })), +const SettingsLogicFunctionDetail = lazy(() => + import('~/pages/settings/logic-functions/SettingsLogicFunctionDetail').then( + (module) => ({ + default: module.SettingsLogicFunctionDetail, + }), + ), ); const SettingsWorkspace = lazy(() => @@ -447,8 +447,8 @@ export const SettingsRoutes = ({ isAdminPageEnabled }: SettingsRoutesProps) => ( element={} /> } + path={SettingsPath.LogicFunctionDetail} + element={} /> } /> } /> @@ -582,8 +582,8 @@ export const SettingsRoutes = ({ isAdminPageEnabled }: SettingsRoutesProps) => ( element={} /> } + path={SettingsPath.ApplicationLogicFunctionDetail} + element={} /> diff --git a/packages/twenty-front/src/modules/applications/graphql/fragments/applicationFragment.ts b/packages/twenty-front/src/modules/applications/graphql/fragments/applicationFragment.ts index df316bfce27..ce796d6668f 100644 --- a/packages/twenty-front/src/modules/applications/graphql/fragments/applicationFragment.ts +++ b/packages/twenty-front/src/modules/applications/graphql/fragments/applicationFragment.ts @@ -1,11 +1,11 @@ import { gql } from '@apollo/client'; import { AGENT_FRAGMENT } from '@/ai/graphql/fragments/agentFragment'; -import { SERVERLESS_FUNCTION_FRAGMENT } from '@/settings/serverless-functions/graphql/fragments/serverlessFunctionFragment'; +import { LOGIC_FUNCTION_FRAGMENT } from '@/settings/logic-functions/graphql/fragments/logicFunctionFragment'; import { OBJECT_METADATA_FRAGMENT } from '@/object-metadata/graphql/fragment'; export const APPLICATION_FRAGMENT = gql` ${AGENT_FRAGMENT} - ${SERVERLESS_FUNCTION_FRAGMENT} + ${LOGIC_FUNCTION_FRAGMENT} ${OBJECT_METADATA_FRAGMENT} fragment ApplicationFields on Application { id @@ -27,8 +27,8 @@ export const APPLICATION_FRAGMENT = gql` objects { ...ObjectMetadataFields } - serverlessFunctions { - ...ServerlessFunctionFields + logicFunctions { + ...LogicFunctionFields } } `; diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuCloseAnimationCompleteCleanup.ts b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuCloseAnimationCompleteCleanup.ts index b57929a53d6..534e15c7c6b 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuCloseAnimationCompleteCleanup.ts +++ b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuCloseAnimationCompleteCleanup.ts @@ -23,8 +23,8 @@ import { emitSidePanelCloseEvent } from '@/ui/layout/right-drawer/utils/emitSide import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectableList'; import { getShowPageTabListComponentId } from '@/ui/layout/show-page/utils/getShowPageTabListComponentId'; import { activeTabIdComponentState } from '@/ui/layout/tab-list/states/activeTabIdComponentState'; -import { WORKFLOW_SERVERLESS_FUNCTION_TAB_LIST_COMPONENT_ID } from '@/workflow/workflow-steps/workflow-actions/code-action/constants/WorkflowServerlessFunctionTabListComponentId'; -import { WorkflowServerlessFunctionTabId } from '@/workflow/workflow-steps/workflow-actions/code-action/types/WorkflowServerlessFunctionTabId'; +import { WORKFLOW_LOGIC_FUNCTION_TAB_LIST_COMPONENT_ID } from '@/workflow/workflow-steps/workflow-actions/code-action/constants/WorkflowLogicFunctionTabListComponentId'; +import { WorkflowLogicFunctionTabId } from '@/workflow/workflow-steps/workflow-actions/code-action/types/WorkflowLogicFunctionTabId'; import { useRecoilCallback } from 'recoil'; import { isDefined } from 'twenty-shared/utils'; @@ -114,9 +114,9 @@ export const useCommandMenuCloseAnimationCompleteCleanup = () => { set(isCommandMenuClosingState, false); set( activeTabIdComponentState.atomFamily({ - instanceId: WORKFLOW_SERVERLESS_FUNCTION_TAB_LIST_COMPONENT_ID, + instanceId: WORKFLOW_LOGIC_FUNCTION_TAB_LIST_COMPONENT_ID, }), - WorkflowServerlessFunctionTabId.CODE, + WorkflowLogicFunctionTabId.CODE, ); for (const [pageId, morphItems] of snapshot diff --git a/packages/twenty-front/src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx b/packages/twenty-front/src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx new file mode 100644 index 00000000000..26cd1c461c2 --- /dev/null +++ b/packages/twenty-front/src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx @@ -0,0 +1,52 @@ +import { t } from '@lingui/core/macro'; +import { + type ExecutionStatus, + WorkflowStepExecutionResult, +} from '@/workflow/components/WorkflowStepExecutionResult'; +import { type LogicFunctionTestData } from '@/workflow/workflow-steps/workflow-actions/code-action/states/logicFunctionTestDataFamilyState'; +import { LogicFunctionExecutionStatus } from '~/generated-metadata/graphql'; + +export const LogicFunctionExecutionResult = ({ + logicFunctionTestData, + maxHeight, + isTesting = false, +}: { + logicFunctionTestData: LogicFunctionTestData; + maxHeight?: number; + isTesting?: boolean; +}) => { + const result = + logicFunctionTestData.output.data || + logicFunctionTestData.output.error || + ''; + + const isSuccess = + logicFunctionTestData.output.status === + LogicFunctionExecutionStatus.SUCCESS; + + const isError = + logicFunctionTestData.output.status === LogicFunctionExecutionStatus.ERROR; + + const duration = logicFunctionTestData.output.duration; + const status: ExecutionStatus = { + isSuccess, + isError, + successMessage: isSuccess ? t`200 OK - ${duration}ms` : undefined, + errorMessage: isError ? t`500 Error - ${duration}ms` : undefined, + }; + + return ( + + ); +}; diff --git a/packages/twenty-front/src/modules/serverless-functions/constants/IndexFileName.ts b/packages/twenty-front/src/modules/logic-functions/constants/IndexFileName.ts similarity index 100% rename from packages/twenty-front/src/modules/serverless-functions/constants/IndexFileName.ts rename to packages/twenty-front/src/modules/logic-functions/constants/IndexFileName.ts diff --git a/packages/twenty-front/src/modules/serverless-functions/constants/SourceFolderName.ts b/packages/twenty-front/src/modules/logic-functions/constants/SourceFolderName.ts similarity index 100% rename from packages/twenty-front/src/modules/serverless-functions/constants/SourceFolderName.ts rename to packages/twenty-front/src/modules/logic-functions/constants/SourceFolderName.ts diff --git a/packages/twenty-front/src/modules/logic-functions/hooks/useTestLogicFunction.ts b/packages/twenty-front/src/modules/logic-functions/hooks/useTestLogicFunction.ts new file mode 100644 index 00000000000..a4bc0f75ffc --- /dev/null +++ b/packages/twenty-front/src/modules/logic-functions/hooks/useTestLogicFunction.ts @@ -0,0 +1,68 @@ +import { useExecuteOneLogicFunction } from '@/settings/logic-functions/hooks/useExecuteOneLogicFunction'; +import { logicFunctionTestDataFamilyState } from '@/workflow/workflow-steps/workflow-actions/code-action/states/logicFunctionTestDataFamilyState'; +import { useState } from 'react'; +import { useRecoilState } from 'recoil'; +import { isDefined } from 'twenty-shared/utils'; +import { sleep } from '~/utils/sleep'; + +export const useTestLogicFunction = ({ + logicFunctionId, + callback, +}: { + logicFunctionId: string; + callback?: (testResult: object) => void; +}) => { + const [isTesting, setIsTesting] = useState(false); + const { executeOneLogicFunction } = useExecuteOneLogicFunction(); + const [logicFunctionTestData, setLogicFunctionTestData] = useRecoilState( + logicFunctionTestDataFamilyState(logicFunctionId), + ); + + const testLogicFunction = async () => { + try { + setIsTesting(true); + await sleep(200); // Delay artificially to avoid flashing the UI + const result = await executeOneLogicFunction({ + id: logicFunctionId, + payload: logicFunctionTestData.input, + version: 'draft', + }); + + setIsTesting(false); + + if (isDefined(result?.data?.executeOneLogicFunction?.data)) { + callback?.(result?.data?.executeOneLogicFunction?.data); + } + + setLogicFunctionTestData((prev) => ({ + ...prev, + language: 'json', + height: 300, + output: { + data: result?.data?.executeOneLogicFunction?.data + ? JSON.stringify( + result?.data?.executeOneLogicFunction?.data, + null, + 4, + ) + : undefined, + logs: result?.data?.executeOneLogicFunction?.logs || '', + duration: result?.data?.executeOneLogicFunction?.duration, + status: result?.data?.executeOneLogicFunction?.status, + error: result?.data?.executeOneLogicFunction?.error + ? JSON.stringify( + result?.data?.executeOneLogicFunction?.error, + null, + 4, + ) + : undefined, + }, + })); + } catch (error) { + setIsTesting(false); + throw error; + } + }; + + return { testLogicFunction, isTesting }; +}; diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/__tests__/computeNewSources.test.ts b/packages/twenty-front/src/modules/logic-functions/utils/__tests__/computeNewSources.test.ts similarity index 97% rename from packages/twenty-front/src/modules/serverless-functions/utils/__tests__/computeNewSources.test.ts rename to packages/twenty-front/src/modules/logic-functions/utils/__tests__/computeNewSources.test.ts index 0b1ee88e2de..3907ec1ee4d 100644 --- a/packages/twenty-front/src/modules/serverless-functions/utils/__tests__/computeNewSources.test.ts +++ b/packages/twenty-front/src/modules/logic-functions/utils/__tests__/computeNewSources.test.ts @@ -1,4 +1,4 @@ -import { computeNewSources } from '@/serverless-functions/utils/computeNewSources'; +import { computeNewSources } from '@/logic-functions/utils/computeNewSources'; describe('computeNewSources', () => { it('should compute new code input root 0', () => { diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/__tests__/flattenSources.test.ts b/packages/twenty-front/src/modules/logic-functions/utils/__tests__/flattenSources.test.ts similarity index 95% rename from packages/twenty-front/src/modules/serverless-functions/utils/__tests__/flattenSources.test.ts rename to packages/twenty-front/src/modules/logic-functions/utils/__tests__/flattenSources.test.ts index 698a81125ff..dccd103ac37 100644 --- a/packages/twenty-front/src/modules/serverless-functions/utils/__tests__/flattenSources.test.ts +++ b/packages/twenty-front/src/modules/logic-functions/utils/__tests__/flattenSources.test.ts @@ -1,6 +1,6 @@ // IA Generated -import { flattenSources } from '@/serverless-functions/utils/flattenSources'; +import { flattenSources } from '@/logic-functions/utils/flattenSources'; import { type Sources } from 'twenty-shared/types'; describe('flattenSources', () => { diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/__tests__/getDefaultFunctionInputFromInputSchema.test.ts b/packages/twenty-front/src/modules/logic-functions/utils/__tests__/getDefaultFunctionInputFromInputSchema.test.ts similarity index 88% rename from packages/twenty-front/src/modules/serverless-functions/utils/__tests__/getDefaultFunctionInputFromInputSchema.test.ts rename to packages/twenty-front/src/modules/logic-functions/utils/__tests__/getDefaultFunctionInputFromInputSchema.test.ts index 0c71e041ad2..13d56b46b78 100644 --- a/packages/twenty-front/src/modules/serverless-functions/utils/__tests__/getDefaultFunctionInputFromInputSchema.test.ts +++ b/packages/twenty-front/src/modules/logic-functions/utils/__tests__/getDefaultFunctionInputFromInputSchema.test.ts @@ -1,5 +1,5 @@ import { type InputSchema } from '@/workflow/types/InputSchema'; -import { getDefaultFunctionInputFromInputSchema } from '@/serverless-functions/utils/getDefaultFunctionInputFromInputSchema'; +import { getDefaultFunctionInputFromInputSchema } from '@/logic-functions/utils/getDefaultFunctionInputFromInputSchema'; describe('getDefaultFunctionInputFromInputSchema', () => { it('should init function input properly', () => { diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/__tests__/getFunctionInputFromSourceCode.test.ts b/packages/twenty-front/src/modules/logic-functions/utils/__tests__/getFunctionInputFromSourceCode.test.ts similarity index 93% rename from packages/twenty-front/src/modules/serverless-functions/utils/__tests__/getFunctionInputFromSourceCode.test.ts rename to packages/twenty-front/src/modules/logic-functions/utils/__tests__/getFunctionInputFromSourceCode.test.ts index b0009872515..2e618d10aab 100644 --- a/packages/twenty-front/src/modules/serverless-functions/utils/__tests__/getFunctionInputFromSourceCode.test.ts +++ b/packages/twenty-front/src/modules/logic-functions/utils/__tests__/getFunctionInputFromSourceCode.test.ts @@ -1,4 +1,4 @@ -import { getFunctionInputFromSourceCode } from '@/serverless-functions/utils/getFunctionInputFromSourceCode'; +import { getFunctionInputFromSourceCode } from '@/logic-functions/utils/getFunctionInputFromSourceCode'; describe('getFunctionInputFromSourceCode', () => { it('should return empty input if not parameter', async () => { diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/__tests__/getFunctionInputSchema.test.ts b/packages/twenty-front/src/modules/logic-functions/utils/__tests__/getFunctionInputSchema.test.ts similarity index 94% rename from packages/twenty-front/src/modules/serverless-functions/utils/__tests__/getFunctionInputSchema.test.ts rename to packages/twenty-front/src/modules/logic-functions/utils/__tests__/getFunctionInputSchema.test.ts index 5e606233eb4..a023ed62d7c 100644 --- a/packages/twenty-front/src/modules/serverless-functions/utils/__tests__/getFunctionInputSchema.test.ts +++ b/packages/twenty-front/src/modules/logic-functions/utils/__tests__/getFunctionInputSchema.test.ts @@ -1,4 +1,4 @@ -import { getFunctionInputSchema } from '@/serverless-functions/utils/getFunctionInputSchema'; +import { getFunctionInputSchema } from '@/logic-functions/utils/getFunctionInputSchema'; describe('getFunctionInputSchema', () => { it('should analyze a simple function correctly', () => { diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/__tests__/mergeDefaultFunctionInputAndFunctionInput.test.ts b/packages/twenty-front/src/modules/logic-functions/utils/__tests__/mergeDefaultFunctionInputAndFunctionInput.test.ts similarity index 81% rename from packages/twenty-front/src/modules/serverless-functions/utils/__tests__/mergeDefaultFunctionInputAndFunctionInput.test.ts rename to packages/twenty-front/src/modules/logic-functions/utils/__tests__/mergeDefaultFunctionInputAndFunctionInput.test.ts index 4b94b588215..a9f902f0b2f 100644 --- a/packages/twenty-front/src/modules/serverless-functions/utils/__tests__/mergeDefaultFunctionInputAndFunctionInput.test.ts +++ b/packages/twenty-front/src/modules/logic-functions/utils/__tests__/mergeDefaultFunctionInputAndFunctionInput.test.ts @@ -1,4 +1,4 @@ -import { mergeDefaultFunctionInputAndFunctionInput } from '@/serverless-functions/utils/mergeDefaultFunctionInputAndFunctionInput'; +import { mergeDefaultFunctionInputAndFunctionInput } from '@/logic-functions/utils/mergeDefaultFunctionInputAndFunctionInput'; describe('mergeDefaultFunctionInputAndFunctionInput', () => { it('should merge properly', () => { diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/computeNewSources.ts b/packages/twenty-front/src/modules/logic-functions/utils/computeNewSources.ts similarity index 100% rename from packages/twenty-front/src/modules/serverless-functions/utils/computeNewSources.ts rename to packages/twenty-front/src/modules/logic-functions/utils/computeNewSources.ts diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/flattenSources.ts b/packages/twenty-front/src/modules/logic-functions/utils/flattenSources.ts similarity index 100% rename from packages/twenty-front/src/modules/serverless-functions/utils/flattenSources.ts rename to packages/twenty-front/src/modules/logic-functions/utils/flattenSources.ts diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/getDefaultFunctionInputFromInputSchema.ts b/packages/twenty-front/src/modules/logic-functions/utils/getDefaultFunctionInputFromInputSchema.ts similarity index 100% rename from packages/twenty-front/src/modules/serverless-functions/utils/getDefaultFunctionInputFromInputSchema.ts rename to packages/twenty-front/src/modules/logic-functions/utils/getDefaultFunctionInputFromInputSchema.ts diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionInputFromSourceCode.ts b/packages/twenty-front/src/modules/logic-functions/utils/getFunctionInputFromSourceCode.ts similarity index 78% rename from packages/twenty-front/src/modules/serverless-functions/utils/getFunctionInputFromSourceCode.ts rename to packages/twenty-front/src/modules/logic-functions/utils/getFunctionInputFromSourceCode.ts index 80e4fc954a1..bb542848faf 100644 --- a/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionInputFromSourceCode.ts +++ b/packages/twenty-front/src/modules/logic-functions/utils/getFunctionInputFromSourceCode.ts @@ -1,4 +1,4 @@ -import { getDefaultFunctionInputFromInputSchema } from '@/serverless-functions/utils/getDefaultFunctionInputFromInputSchema'; +import { getDefaultFunctionInputFromInputSchema } from '@/logic-functions/utils/getDefaultFunctionInputFromInputSchema'; import { type FunctionInput } from '@/workflow/workflow-steps/workflow-actions/code-action/types/FunctionInput'; import { isObject } from '@sniptt/guards'; import { isDefined } from 'twenty-shared/utils'; @@ -11,7 +11,7 @@ export const getFunctionInputFromSourceCode = async ( } const { getFunctionInputSchema } = await import( - '@/serverless-functions/utils/getFunctionInputSchema' + '@/logic-functions/utils/getFunctionInputSchema' ); const functionInputSchema = getFunctionInputSchema(sourceCode); diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionInputSchema.ts b/packages/twenty-front/src/modules/logic-functions/utils/getFunctionInputSchema.ts similarity index 100% rename from packages/twenty-front/src/modules/serverless-functions/utils/getFunctionInputSchema.ts rename to packages/twenty-front/src/modules/logic-functions/utils/getFunctionInputSchema.ts diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/getToolInputSchemaFromSourceCode.ts b/packages/twenty-front/src/modules/logic-functions/utils/getToolInputSchemaFromSourceCode.ts similarity index 90% rename from packages/twenty-front/src/modules/serverless-functions/utils/getToolInputSchemaFromSourceCode.ts rename to packages/twenty-front/src/modules/logic-functions/utils/getToolInputSchemaFromSourceCode.ts index e940e90411e..90f5ab3f6a3 100644 --- a/packages/twenty-front/src/modules/serverless-functions/utils/getToolInputSchemaFromSourceCode.ts +++ b/packages/twenty-front/src/modules/logic-functions/utils/getToolInputSchemaFromSourceCode.ts @@ -6,7 +6,7 @@ export const getToolInputSchemaFromSourceCode = async ( const { getFunctionInputSchema } = await import('./getFunctionInputSchema'); const inputSchema = getFunctionInputSchema(sourceCode); - // Serverless functions take a single params object + // Logic functions take a single params object const firstParam = inputSchema[0]; if (firstParam?.type === 'object' && isDefined(firstParam.properties)) { diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/mergeDefaultFunctionInputAndFunctionInput.ts b/packages/twenty-front/src/modules/logic-functions/utils/mergeDefaultFunctionInputAndFunctionInput.ts similarity index 100% rename from packages/twenty-front/src/modules/serverless-functions/utils/mergeDefaultFunctionInputAndFunctionInput.ts rename to packages/twenty-front/src/modules/logic-functions/utils/mergeDefaultFunctionInputAndFunctionInput.ts diff --git a/packages/twenty-front/src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts b/packages/twenty-front/src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts index 1821d15f32e..938dfa949f3 100644 --- a/packages/twenty-front/src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts +++ b/packages/twenty-front/src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts @@ -28,10 +28,7 @@ export const useMetadataErrorHandler = () => { viewGroup: t`view group`, viewFilter: t`view filter`, index: t`index`, - serverlessFunction: t`serverless function`, - cronTrigger: t`cron trigger`, - databaseEventTrigger: t`database trigger`, - routeTrigger: t`route trigger`, + logicFunction: t`logic function`, role: t`role`, roleTarget: t`role target`, agent: t`agent`, diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/constants/CustomWorkspaceApplicationMock.test.constant.ts b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/constants/CustomWorkspaceApplicationMock.test.constant.ts index a8ac1d44ff7..bbf997ed059 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/constants/CustomWorkspaceApplicationMock.test.constant.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/constants/CustomWorkspaceApplicationMock.test.constant.ts @@ -8,7 +8,7 @@ export const CUSTOM_WORKSPACE_APPLICATION_MOCK = { description: 'workpace custom application', name: 'custom', objects: [], - serverlessFunctions: [], + logicFunctions: [], universalIdentifier: '66a698b6-f6c1-4d35-a6e7-20aeadc3cd95', version: '1.0.0', } as const satisfies Application; diff --git a/packages/twenty-front/src/modules/serverless-functions/components/ServerlessFunctionExecutionResult.tsx b/packages/twenty-front/src/modules/serverless-functions/components/ServerlessFunctionExecutionResult.tsx deleted file mode 100644 index e9bd0f6345e..00000000000 --- a/packages/twenty-front/src/modules/serverless-functions/components/ServerlessFunctionExecutionResult.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { t } from '@lingui/core/macro'; -import { - type ExecutionStatus, - WorkflowStepExecutionResult, -} from '@/workflow/components/WorkflowStepExecutionResult'; -import { type ServerlessFunctionTestData } from '@/workflow/workflow-steps/workflow-actions/code-action/states/serverlessFunctionTestDataFamilyState'; -import { ServerlessFunctionExecutionStatus } from '~/generated-metadata/graphql'; - -export const ServerlessFunctionExecutionResult = ({ - serverlessFunctionTestData, - maxHeight, - isTesting = false, -}: { - serverlessFunctionTestData: ServerlessFunctionTestData; - maxHeight?: number; - isTesting?: boolean; -}) => { - const result = - serverlessFunctionTestData.output.data || - serverlessFunctionTestData.output.error || - ''; - - const isSuccess = - serverlessFunctionTestData.output.status === - ServerlessFunctionExecutionStatus.SUCCESS; - - const isError = - serverlessFunctionTestData.output.status === - ServerlessFunctionExecutionStatus.ERROR; - - const duration = serverlessFunctionTestData.output.duration; - const status: ExecutionStatus = { - isSuccess, - isError, - successMessage: isSuccess ? t`200 OK - ${duration}ms` : undefined, - errorMessage: isError ? t`500 Error - ${duration}ms` : undefined, - }; - - return ( - - ); -}; diff --git a/packages/twenty-front/src/modules/serverless-functions/hooks/useTestServerlessFunction.ts b/packages/twenty-front/src/modules/serverless-functions/hooks/useTestServerlessFunction.ts deleted file mode 100644 index 04c208aa1b1..00000000000 --- a/packages/twenty-front/src/modules/serverless-functions/hooks/useTestServerlessFunction.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { useExecuteOneServerlessFunction } from '@/settings/serverless-functions/hooks/useExecuteOneServerlessFunction'; -import { serverlessFunctionTestDataFamilyState } from '@/workflow/workflow-steps/workflow-actions/code-action/states/serverlessFunctionTestDataFamilyState'; -import { useState } from 'react'; -import { useRecoilState } from 'recoil'; -import { isDefined } from 'twenty-shared/utils'; -import { sleep } from '~/utils/sleep'; - -export const useTestServerlessFunction = ({ - serverlessFunctionId, - callback, -}: { - serverlessFunctionId: string; - callback?: (testResult: object) => void; -}) => { - const [isTesting, setIsTesting] = useState(false); - const { executeOneServerlessFunction } = useExecuteOneServerlessFunction(); - const [serverlessFunctionTestData, setServerlessFunctionTestData] = - useRecoilState(serverlessFunctionTestDataFamilyState(serverlessFunctionId)); - - const testServerlessFunction = async () => { - try { - setIsTesting(true); - await sleep(200); // Delay artificially to avoid flashing the UI - const result = await executeOneServerlessFunction({ - id: serverlessFunctionId, - payload: serverlessFunctionTestData.input, - version: 'draft', - }); - - setIsTesting(false); - - if (isDefined(result?.data?.executeOneServerlessFunction?.data)) { - callback?.(result?.data?.executeOneServerlessFunction?.data); - } - - setServerlessFunctionTestData((prev) => ({ - ...prev, - language: 'json', - height: 300, - output: { - data: result?.data?.executeOneServerlessFunction?.data - ? JSON.stringify( - result?.data?.executeOneServerlessFunction?.data, - null, - 4, - ) - : undefined, - logs: result?.data?.executeOneServerlessFunction?.logs || '', - duration: result?.data?.executeOneServerlessFunction?.duration, - status: result?.data?.executeOneServerlessFunction?.status, - error: result?.data?.executeOneServerlessFunction?.error - ? JSON.stringify( - result?.data?.executeOneServerlessFunction?.error, - null, - 4, - ) - : undefined, - }, - })); - } catch (error) { - setIsTesting(false); - throw error; - } - }; - - return { testServerlessFunction, isTesting }; -}; diff --git a/packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionCodeEditor.tsx b/packages/twenty-front/src/modules/settings/logic-functions/components/SettingsLogicFunctionCodeEditor.tsx similarity index 88% rename from packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionCodeEditor.tsx rename to packages/twenty-front/src/modules/settings/logic-functions/components/SettingsLogicFunctionCodeEditor.tsx index c026a8813ae..0bd50311959 100644 --- a/packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionCodeEditor.tsx +++ b/packages/twenty-front/src/modules/settings/logic-functions/components/SettingsLogicFunctionCodeEditor.tsx @@ -1,4 +1,4 @@ -import { useGetAvailablePackages } from '@/settings/serverless-functions/hooks/useGetAvailablePackages'; +import { useGetAvailablePackages } from '@/settings/logic-functions/hooks/useGetAvailablePackages'; import { type EditorProps, type Monaco } from '@monaco-editor/react'; import { type editor } from 'monaco-editor'; import { AutoTypings } from 'monaco-editor-auto-typings'; @@ -12,25 +12,22 @@ export type File = { path: string; }; -type SettingsServerlessFunctionCodeEditorProps = Omit< - EditorProps, - 'onChange' -> & { +type SettingsLogicFunctionCodeEditorProps = Omit & { currentFilePath: string; files: File[]; onChange: (value: string) => void; }; -export const SettingsServerlessFunctionCodeEditor = ({ +export const SettingsLogicFunctionCodeEditor = ({ currentFilePath, files, onChange, height = 450, options = undefined, -}: SettingsServerlessFunctionCodeEditorProps) => { - const { serverlessFunctionId = '' } = useParams(); +}: SettingsLogicFunctionCodeEditorProps) => { + const { logicFunctionId = '' } = useParams(); const { availablePackages } = useGetAvailablePackages({ - id: serverlessFunctionId, + id: logicFunctionId, }); const currentFile = files.find((file) => file.path === currentFilePath); diff --git a/packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionLabelContainer.tsx b/packages/twenty-front/src/modules/settings/logic-functions/components/SettingsLogicFunctionLabelContainer.tsx similarity index 77% rename from packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionLabelContainer.tsx rename to packages/twenty-front/src/modules/settings/logic-functions/components/SettingsLogicFunctionLabelContainer.tsx index d199c710dfb..3b215b97fbb 100644 --- a/packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionLabelContainer.tsx +++ b/packages/twenty-front/src/modules/settings/logic-functions/components/SettingsLogicFunctionLabelContainer.tsx @@ -13,19 +13,19 @@ const StyledHeaderTitle = styled.div` } `; -type SettingsServerlessFunctionLabelContainerProps = { +type SettingsLogicFunctionLabelContainerProps = { value: string; onChange: (value: string) => void; }; -export const SettingsServerlessFunctionLabelContainer = ({ +export const SettingsLogicFunctionLabelContainer = ({ value, onChange, -}: SettingsServerlessFunctionLabelContainerProps) => { +}: SettingsLogicFunctionLabelContainerProps) => { return ( theme.spacing(4)}; `; -export const SettingsServerlessFunctionNewForm = ({ +export const SettingsLogicFunctionNewForm = ({ formValues, onChange, readonly = false, }: { - formValues: ServerlessFunctionNewFormValues; + formValues: LogicFunctionNewFormValues; onChange: (key: string) => (value: string) => void; readonly?: boolean; }) => { diff --git a/packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionTabEnvironmentVariablesSection.tsx b/packages/twenty-front/src/modules/settings/logic-functions/components/SettingsLogicFunctionTabEnvironmentVariablesSection.tsx similarity index 92% rename from packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionTabEnvironmentVariablesSection.tsx rename to packages/twenty-front/src/modules/settings/logic-functions/components/SettingsLogicFunctionTabEnvironmentVariablesSection.tsx index d0d15327cd5..82d47f49f55 100644 --- a/packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionTabEnvironmentVariablesSection.tsx +++ b/packages/twenty-front/src/modules/settings/logic-functions/components/SettingsLogicFunctionTabEnvironmentVariablesSection.tsx @@ -7,7 +7,7 @@ import { useParams } from 'react-router-dom'; import { t } from '@lingui/core/macro'; import { Trans } from '@lingui/react/macro'; -export const SettingsServerlessFunctionTabEnvironmentVariablesSection = () => { +export const SettingsLogicFunctionTabEnvironmentVariablesSection = () => { const { applicationId = '' } = useParams<{ applicationId: string }>(); return (
diff --git a/packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionsFieldItemTableRow.tsx b/packages/twenty-front/src/modules/settings/logic-functions/components/SettingsLogicFunctionsFieldItemTableRow.tsx similarity index 69% rename from packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionsFieldItemTableRow.tsx rename to packages/twenty-front/src/modules/settings/logic-functions/components/SettingsLogicFunctionsFieldItemTableRow.tsx index 80999430c69..3c3d40adfae 100644 --- a/packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionsFieldItemTableRow.tsx +++ b/packages/twenty-front/src/modules/settings/logic-functions/components/SettingsLogicFunctionsFieldItemTableRow.tsx @@ -1,9 +1,9 @@ import styled from '@emotion/styled'; -import { type ServerlessFunction } from '~/generated-metadata/graphql'; +import { type LogicFunction } from '~/generated-metadata/graphql'; import { TableCell } from '@/ui/layout/table/components/TableCell'; import { useTheme } from '@emotion/react'; import { IconChevronRight } from 'twenty-ui/display'; -import { StyledTableRow } from '@/settings/serverless-functions/components/SettingsServerlessFunctionsTable'; +import { StyledTableRow } from '@/settings/logic-functions/components/SettingsLogicFunctionsTable'; const StyledNameTableCell = styled(TableCell)` color: ${({ theme }) => theme.font.color.primary}; @@ -24,21 +24,19 @@ const StyledIconChevronRight = styled(IconChevronRight)` color: ${({ theme }) => theme.font.color.tertiary}; `; -export const SettingsServerlessFunctionsFieldItemTableRow = ({ - serverlessFunction, +export const SettingsLogicFunctionsFieldItemTableRow = ({ + logicFunction, to, }: { - serverlessFunction: ServerlessFunction; + logicFunction: LogicFunction; to: string; }) => { const theme = useTheme(); return ( - {serverlessFunction.name} + {logicFunction.name} - - {serverlessFunction.runtime} - + {logicFunction.runtime} theme.border.color.light}; `; -export const SettingsServerlessFunctionsTable = ({ - serverlessFunctions, +export const SettingsLogicFunctionsTable = ({ + logicFunctions, }: { - serverlessFunctions: ServerlessFunction[]; + logicFunctions: LogicFunction[]; }) => { const { applicationId = '' } = useParams(); const { t } = useLingui(); - if (serverlessFunctions.length === 0) { + if (logicFunctions.length === 0) { return null; } @@ -40,17 +40,14 @@ export const SettingsServerlessFunctionsTable = ({ - {serverlessFunctions.map((serverlessFunction: ServerlessFunction) => ( - ( + ))} diff --git a/packages/twenty-front/src/modules/settings/serverless-functions/components/tabs/SettingsServerlessFunctionCodeEditorTab.tsx b/packages/twenty-front/src/modules/settings/logic-functions/components/tabs/SettingsLogicFunctionCodeEditorTab.tsx similarity index 73% rename from packages/twenty-front/src/modules/settings/serverless-functions/components/tabs/SettingsServerlessFunctionCodeEditorTab.tsx rename to packages/twenty-front/src/modules/settings/logic-functions/components/tabs/SettingsLogicFunctionCodeEditorTab.tsx index e2b1071cd75..6ba90364237 100644 --- a/packages/twenty-front/src/modules/settings/serverless-functions/components/tabs/SettingsServerlessFunctionCodeEditorTab.tsx +++ b/packages/twenty-front/src/modules/settings/logic-functions/components/tabs/SettingsLogicFunctionCodeEditorTab.tsx @@ -1,8 +1,8 @@ import { type File, - SettingsServerlessFunctionCodeEditor, -} from '@/settings/serverless-functions/components/SettingsServerlessFunctionCodeEditor'; -import { SETTINGS_SERVERLESS_FUNCTION_TAB_LIST_COMPONENT_ID } from '@/settings/serverless-functions/constants/SettingsServerlessFunctionTabListComponentId'; + SettingsLogicFunctionCodeEditor, +} from '@/settings/logic-functions/components/SettingsLogicFunctionCodeEditor'; +import { SETTINGS_LOGIC_FUNCTION_TAB_LIST_COMPONENT_ID } from '@/settings/logic-functions/constants/SettingsLogicFunctionTabListComponentId'; import { TabList } from '@/ui/layout/tab-list/components/TabList'; import { activeTabIdComponentState } from '@/ui/layout/tab-list/states/activeTabIdComponentState'; import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue'; @@ -16,7 +16,7 @@ const StyledTabList = styled(TabList)` border-bottom: none; `; -export const SettingsServerlessFunctionCodeEditorTab = ({ +export const SettingsLogicFunctionCodeEditorTab = ({ files, handleExecute, onChange, @@ -31,7 +31,7 @@ export const SettingsServerlessFunctionCodeEditorTab = ({ }) => { const activeTabId = useRecoilComponentValue( activeTabIdComponentState, - SETTINGS_SERVERLESS_FUNCTION_TAB_LIST_COMPONENT_ID, + SETTINGS_LOGIC_FUNCTION_TAB_LIST_COMPONENT_ID, ); const TestButton = (