diff --git a/packages/twenty-apps/hello-world/src/objects/postCard.ts b/packages/twenty-apps/hello-world/src/objects/postCard.ts index d5f53ee644..714e91e12b 100644 --- a/packages/twenty-apps/hello-world/src/objects/postCard.ts +++ b/packages/twenty-apps/hello-world/src/objects/postCard.ts @@ -1,14 +1,14 @@ import { type Note } from '../../generated'; import { + type AddressField, Field, - Object, FieldType, type FullNameField, - type AddressField, + Object, + OnDeleteAction, Relation, RelationType, - OnDeleteAction, STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS, } from 'twenty-sdk/application'; diff --git a/packages/twenty-apps/hello-world/yarn.lock b/packages/twenty-apps/hello-world/yarn.lock index 44e135d0e5..61995a9d44 100644 --- a/packages/twenty-apps/hello-world/yarn.lock +++ b/packages/twenty-apps/hello-world/yarn.lock @@ -14,246 +14,19 @@ __metadata: languageName: node linkType: hard -"async-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-function@npm:1.0.0" - checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 - languageName: node - linkType: hard - -"async-generator-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-generator-function@npm:1.0.0" - checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d - languageName: node - linkType: hard - -"axios@npm:^1.12.2": - version: 1.12.2 - resolution: "axios@npm:1.12.2" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.4" - proxy-from-env: "npm:^1.1.0" - checksum: 10c0/80b063e318cf05cd33a4d991cea0162f3573481946f9129efb7766f38fde4c061c34f41a93a9f9521f02b7c9565ccbc197c099b0186543ac84a24580017adfed - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind-apply-helpers@npm:1.0.2" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 - languageName: node - linkType: hard - -"dunder-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "dunder-proto@npm:1.0.1" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.2.0" - checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c - languageName: node - linkType: hard - -"es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": - version: 1.1.1 - resolution: "es-object-atoms@npm:1.1.1" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.1.0": - version: 2.1.0 - resolution: "es-set-tostringtag@npm:2.1.0" - dependencies: - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.6": - version: 1.15.11 - resolution: "follow-redirects@npm:1.15.11" - peerDependenciesMeta: - debug: - optional: true - checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 - languageName: node - linkType: hard - -"form-data@npm:^4.0.4": - version: 4.0.4 - resolution: "form-data@npm:4.0.4" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.2" - mime-types: "npm:^2.1.12" - checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695 - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - -"generator-function@npm:^2.0.0": - version: 2.0.1 - resolution: "generator-function@npm:2.0.1" - checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.6": - version: 1.3.1 - resolution: "get-intrinsic@npm:1.3.1" - dependencies: - async-function: "npm:^1.0.0" - async-generator-function: "npm:^1.0.0" - call-bind-apply-helpers: "npm:^1.0.2" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.1.1" - function-bind: "npm:^1.1.2" - generator-function: "npm:^2.0.0" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - math-intrinsics: "npm:^1.1.0" - checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d - languageName: node - linkType: hard - -"get-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "get-proto@npm:1.0.1" - dependencies: - dunder-proto: "npm:^1.0.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c - languageName: node - linkType: hard - -"gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c - languageName: node - linkType: hard - -"hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - "hello-world@workspace:.": version: 0.0.0-use.local resolution: "hello-world@workspace:." dependencies: "@types/node": "npm:^24.7.2" - axios: "npm:^1.12.2" + twenty-sdk: "npm:0.0.6" languageName: unknown linkType: soft -"math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b +"twenty-sdk@npm:0.0.6": + version: 0.0.6 + resolution: "twenty-sdk@npm:0.0.6" + checksum: 10c0/78bc83bc2eee6697856129020a74915e5228f05eb9fcfe44707a531a0da4138adfe3d3081c54d37923fe5ecd2304b1bc784162d5b067673fbdab494b2667fe60 languageName: node linkType: hard diff --git a/packages/twenty-cli/project.json b/packages/twenty-cli/project.json index a9f20d188a..e8ae2bf558 100644 --- a/packages/twenty-cli/project.json +++ b/packages/twenty-cli/project.json @@ -11,7 +11,7 @@ "cwd": "packages/twenty-cli", "commands": ["rimraf dist", "tsc --project tsconfig.lib.json"] }, - "dependsOn": ["^build"] + "dependsOn": ["^build", "typecheck"] }, "build": { "executor": "nx:run-commands", @@ -40,14 +40,7 @@ "command": "node dist/cli.js" } }, - "typecheck": { - "executor": "nx:run-commands", - "options": { - "cwd": "packages/twenty-cli", - "command": "tsc --noEmit --project tsconfig.lib.json" - }, - "dependsOn": ["build"] - }, + "typecheck": {}, "lint": { "options": { "lintFilePatterns": ["{projectRoot}/src/**/*.{ts,json}"], diff --git a/packages/twenty-cli/src/__tests__/e2e/applications-install-delete-reinstall.e2e-spec.ts b/packages/twenty-cli/src/__tests__/e2e/applications-install-delete-reinstall.e2e-spec.ts index e7f8ce4b40..cb54c205d3 100644 --- a/packages/twenty-cli/src/__tests__/e2e/applications-install-delete-reinstall.e2e-spec.ts +++ b/packages/twenty-cli/src/__tests__/e2e/applications-install-delete-reinstall.e2e-spec.ts @@ -1,6 +1,6 @@ import { existsSync } from 'fs'; -import { AppUninstallCommand } from 'src/commands/app-uninstall.command'; import { AppSyncCommand } from '../../commands/app-sync.command'; +import { AppUninstallCommand } from '../../commands/app-uninstall.command'; import { COVERED_APPLICATION_FOLDERS } from './constants/covered-applications-folder.constant'; import { getTestedApplicationPath } from './utils/get-tested-application-path.util'; diff --git a/packages/twenty-cli/src/cli.ts b/packages/twenty-cli/src/cli.ts index b370cff5ab..594670ad7c 100644 --- a/packages/twenty-cli/src/cli.ts +++ b/packages/twenty-cli/src/cli.ts @@ -1,5 +1,4 @@ #!/usr/bin/env node - import chalk from 'chalk'; import { Command, CommanderError } from 'commander'; import { readFileSync } from 'fs'; diff --git a/packages/twenty-cli/src/commands/app-sync.command.ts b/packages/twenty-cli/src/commands/app-sync.command.ts index 52a3ae210b..177231afc1 100644 --- a/packages/twenty-cli/src/commands/app-sync.command.ts +++ b/packages/twenty-cli/src/commands/app-sync.command.ts @@ -1,9 +1,9 @@ import chalk from 'chalk'; import { CURRENT_EXECUTION_DIRECTORY } from '../constants/current-execution-directory'; import { ApiService } from '../services/api.service'; +import { GenerateService } from '../services/generate.service'; import { ApiResponse } from '../types/config.types'; import { loadManifest } from '../utils/load-manifest'; -import { GenerateService } from '../services/generate.service'; export class AppSyncCommand { private apiService = new ApiService(); diff --git a/packages/twenty-cli/src/services/api.service.ts b/packages/twenty-cli/src/services/api.service.ts index f2b53aa845..d77d7c9551 100644 --- a/packages/twenty-cli/src/services/api.service.ts +++ b/packages/twenty-cli/src/services/api.service.ts @@ -1,16 +1,16 @@ import axios, { type AxiosInstance, type AxiosResponse } from 'axios'; import chalk from 'chalk'; +import { + buildClientSchema, + getIntrospectionQuery, + printSchema, +} from 'graphql/index'; import { type ApiResponse, type AppManifest, type PackageJson, } from '../types/config.types'; import { ConfigService } from './config.service'; -import { - buildClientSchema, - getIntrospectionQuery, - printSchema, -} from 'graphql/index'; export class ApiService { private client: AxiosInstance; @@ -125,8 +125,7 @@ export class ApiService { if (response.data.errors) { return { success: false, - error: - response.data.errors[0]?.message || 'Failed to sync application', + error: response.data.errors[0], }; } @@ -136,13 +135,10 @@ export class ApiService { message: `Successfully synced application: ${packageJson.name}`, }; } catch (error) { - if (axios.isAxiosError(error) && error.response) { - return { - success: false, - error: error.response.data?.errors?.[0]?.message || error.message, - }; - } - throw error; + return { + success: false, + error, + }; } } diff --git a/packages/twenty-cli/src/services/generate.service.ts b/packages/twenty-cli/src/services/generate.service.ts index 64215ecad5..0e9468a011 100644 --- a/packages/twenty-cli/src/services/generate.service.ts +++ b/packages/twenty-cli/src/services/generate.service.ts @@ -1,8 +1,8 @@ -import chalk from 'chalk'; import { generate } from '@genql/cli'; +import chalk from 'chalk'; import { join, resolve } from 'path'; -import { ConfigService } from './config.service'; import { ApiService } from './api.service'; +import { ConfigService } from './config.service'; export const GENERATED_FOLDER_NAME = 'generated'; @@ -38,7 +38,11 @@ export class GenerateService { console.log(chalk.gray(`API URL: ${url}`)); console.log(chalk.gray(`Output: ${outputPath}`)); - const { data: schema } = await this.apiService.getSchema(); + const getSchemaResponse = await this.apiService.getSchema(); + if (!getSchemaResponse.success) { + return; + } + const { data: schema } = getSchemaResponse; await generate({ schema, diff --git a/packages/twenty-cli/src/types/config.types.ts b/packages/twenty-cli/src/types/config.types.ts index 4c1755b692..206a3ec4d0 100644 --- a/packages/twenty-cli/src/types/config.types.ts +++ b/packages/twenty-cli/src/types/config.types.ts @@ -96,9 +96,16 @@ export type ObjectManifest = { fields: FieldMetadata[]; }; -export interface ApiResponse { - success: boolean; - data?: T; - error?: string; +export type SuccessfulApiResponse = { + success: true; + data: T; message?: string; -} +}; +export type FailingApiResponse = { + success: false; + error?: unknown; + message?: string; +}; +export type ApiResponse = + | SuccessfulApiResponse + | FailingApiResponse; diff --git a/packages/twenty-cli/src/utils/load-manifest.ts b/packages/twenty-cli/src/utils/load-manifest.ts index 62c1ea6577..96644e4b67 100644 --- a/packages/twenty-cli/src/utils/load-manifest.ts +++ b/packages/twenty-cli/src/utils/load-manifest.ts @@ -20,6 +20,7 @@ import { isExportAssignment, isFunctionExpression, isIdentifier, + isImportDeclaration, isNoSubstitutionTemplateLiteral, isNumericLiteral, isObjectLiteralExpression, @@ -30,8 +31,8 @@ import { isStringLiteralLike, isTemplateExpression, isVariableStatement, - isImportDeclaration, } from 'typescript'; +import { GENERATED_FOLDER_NAME } from '../services/generate.service'; import { AppManifest, Application, @@ -42,10 +43,9 @@ import { Sources, } from '../types/config.types'; import { findPathFile } from '../utils/find-path-file'; +import { getTsProgramAndDiagnostics } from '../utils/get-ts-program-and-diagnostics'; import { parseJsoncFile, parseTextFile } from '../utils/jsonc-parser'; import { formatAndWarnTsDiagnostics } from './format-and-warn-ts-diagnostics'; -import { getTsProgramAndDiagnostics } from '../utils/get-ts-program-and-diagnostics'; -import { GENERATED_FOLDER_NAME } from '../services/generate.service'; type JSONValue = | string diff --git a/packages/twenty-server/src/engine/core-modules/application/application-sync.module.ts b/packages/twenty-server/src/engine/core-modules/application/application-sync.module.ts index e7ee0e91cf..116a6180e4 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-sync.module.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-sync.module.ts @@ -15,6 +15,7 @@ import { RouteTriggerModule } from 'src/engine/metadata-modules/route-trigger/ro import { ServerlessFunctionLayerModule } from 'src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.module'; import { ServerlessFunctionModule } from 'src/engine/metadata-modules/serverless-function/serverless-function.module'; import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-v2.module'; +import { ObjectMetadataGraphqlApiExceptionInterceptor } from 'src/engine/metadata-modules/object-metadata/interceptors/object-metadata-graphql-api-exception.interceptor'; @Module({ imports: [ @@ -32,7 +33,11 @@ import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspa WorkspaceMigrationV2Module, PermissionsModule, ], - providers: [ApplicationResolver, ApplicationSyncService], + providers: [ + ApplicationResolver, + ApplicationSyncService, + ObjectMetadataGraphqlApiExceptionInterceptor, + ], exports: [ApplicationSyncService], }) export class ApplicationSyncModule {} diff --git a/packages/twenty-server/src/engine/core-modules/application/application-sync.service.ts b/packages/twenty-server/src/engine/core-modules/application/application-sync.service.ts index 9488d8ce14..7f8999ef3f 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-sync.service.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-sync.service.ts @@ -566,6 +566,7 @@ export class ApplicationSyncService { await this.serverlessFunctionV2Service.createOne({ createServerlessFunctionInput, workspaceId, + applicationId, }); await this.syncDatabaseEventTriggersForServerlessFunction({ diff --git a/packages/twenty-server/src/engine/core-modules/application/application.resolver.ts b/packages/twenty-server/src/engine/core-modules/application/application.resolver.ts index d03964d366..8f2ebe7def 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application.resolver.ts @@ -1,4 +1,4 @@ -import { UseFilters, UseGuards } from '@nestjs/common'; +import { UseFilters, UseGuards, UseInterceptors } from '@nestjs/common'; import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @@ -15,12 +15,14 @@ import { RequireFeatureFlag } from 'src/engine/guards/feature-flag.guard'; import { SettingsPermissionGuard } from 'src/engine/guards/settings-permission.guard'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants'; +import { ObjectMetadataGraphqlApiExceptionInterceptor } from 'src/engine/metadata-modules/object-metadata/interceptors/object-metadata-graphql-api-exception.interceptor'; @UseGuards( WorkspaceAuthGuard, SettingsPermissionGuard(PermissionFlagType.APPLICATIONS), ) @Resolver() +@UseInterceptors(ObjectMetadataGraphqlApiExceptionInterceptor) @UseFilters(ApplicationExceptionFilter) export class ApplicationResolver { constructor( diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/serverless-function-v2.service.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/serverless-function-v2.service.ts index 677df79b58..f5acda88a2 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/serverless-function-v2.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/serverless-function-v2.service.ts @@ -30,10 +30,16 @@ export class ServerlessFunctionV2Service { async createOne({ createServerlessFunctionInput, workspaceId, + applicationId, }: { createServerlessFunctionInput: CreateServerlessFunctionInput & { serverlessFunctionLayerId: string; }; + /** + * @deprecated do not use call validateBuildAndRunWorkspaceMigration contextually + * when interacting with another application than workspace custom one + * */ + applicationId?: string; workspaceId: string; }) { const { workspaceCustomFlatApplication } = @@ -58,7 +64,8 @@ export class ServerlessFunctionV2Service { fromCreateServerlessFunctionInputToFlatServerlessFunction({ createServerlessFunctionInput, workspaceId, - workspaceCustomApplicationId: workspaceCustomFlatApplication.id, + workspaceCustomApplicationId: + applicationId ?? workspaceCustomFlatApplication.id, }); const validateAndBuildResult =