Upgrade call-recorder, people-data-labs, last-contact and partners apps to twenty-sdk 2.23.0-alpha.1 (#23098)
## What Upgrades the two breaking-change-prone apps to `twenty-sdk` / `twenty-client-sdk` `2.23.0-alpha.1`, and adds the server-side hook that lets the 2.23 upgrade install them: - **people-data-labs** - **partners** Follows up on #22882 (System side effect relations), which re-derived the system relation field universal identifiers name-free and shipped `getSystemRelationFieldUniversalIdentifier` in the SDK. ## How - **people-data-labs**: bump the SDK to `2.23.0-alpha.1`. The enriched views temporarily hardcoded the new system relation identifiers with a TODO because the SDK still embedded the old values; now that the name-free identifiers ship in `2.23`, derive them from `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.{company,person}.fields.{noteTargets,taskTargets,attachments,timelineActivities}.universalIdentifier` (identical to the previously pinned values, verified). Engine already pinned `twenty >=2.23.0`; app stays `1.0.7` (manifest unchanged). - **partners**: bump the SDK to `2.23.0-alpha.1`. The partner role references `opportunity.fields.{taskTargets,noteTargets,attachments,timelineActivities}` universal identifiers, which the SDK now resolves to the `2.23` name-free values. Pin `engines.twenty >=2.23.0` and bump the app to `1.3.1`. - **server**: add an opt-in `skipWorkspaceCompatibilityCheck` to the install/upgrade path. The `upgrade-people-data-labs-application` 2.23 command runs mid-upgrade, before the workspace is marked as having completed 2.23, so the workspace-compatibility check would otherwise reject installing `1.0.7` (`engines >=2.23.0`). The server is already on 2.23, so the command passes the flag to install `1.0.7` and close the desync window. Version-progression (downgrade/same-version) checks still run. - **call-recorder** and **last-contact** are intentionally left unchanged (reverted): they don't define custom objects and don't reference the system relation identifiers, so they aren't breaking-change-prone and need no SDK bump. ## Breaking change constraints - **people-data-labs** and **partners** reference system relation identifiers that only exist on a `2.23` server, so both pin `engines.twenty >=2.23.0`. Their `dockerhub-latest` integration leg is red by design until a >=2.23 server image is published (same accepted state as #22882); the `local` leg is green. ## Validation - Regenerated the app lockfiles against the published `2.23.0-alpha.1`. - `people-data-labs` typechecks cleanly against the real `2.23` SDK types. - CI: people-data-labs and partners green on `local`, red on `dockerhub-latest` by design; server/SDK/all other checks green. - Rebased onto latest `main`.
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "twenty-partners",
|
||||
"version": "1.3.0",
|
||||
"version": "1.3.1",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "^24.5.0",
|
||||
"npm": "please-use-yarn",
|
||||
"yarn": ">=4.0.2",
|
||||
"twenty": ">=2.19.0"
|
||||
"twenty": ">=2.23.0"
|
||||
},
|
||||
"keywords": [],
|
||||
"packageManager": "yarn@4.13.0",
|
||||
@@ -26,8 +26,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"react-markdown": "^10.1.0",
|
||||
"twenty-client-sdk": "2.21.0",
|
||||
"twenty-sdk": "2.21.0",
|
||||
"twenty-client-sdk": "2.23.0-alpha.1",
|
||||
"twenty-sdk": "2.23.0-alpha.1",
|
||||
"zod": "^4.1.11"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -3500,16 +3500,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"twenty-client-sdk@npm:2.21.0":
|
||||
version: 2.21.0
|
||||
resolution: "twenty-client-sdk@npm:2.21.0"
|
||||
"twenty-client-sdk@npm:2.23.0-alpha.1":
|
||||
version: 2.23.0-alpha.1
|
||||
resolution: "twenty-client-sdk@npm:2.23.0-alpha.1"
|
||||
dependencies:
|
||||
"@genql/runtime": "npm:^2.10.0"
|
||||
esbuild: "npm:^0.28.1"
|
||||
graphql: "npm:^16.8.1"
|
||||
lodash: "npm:^4.17.21"
|
||||
prettier: "npm:^3.8.3"
|
||||
checksum: 10c0/b411ce14c606830f63df27e7fa8efff6bc82968baabfbb0d6d5725cd6f6b023862102a22ce8baed4ae5c99ac5a50c10915e4f983c97e0fb138db9837c76be80a
|
||||
checksum: 10c0/b55c1e4eee7cdf24d68b9318924f428ad2d26a96052b5ed7d2a6da21a88bb216326fb979e8f7e99765e6495b9f98c0334ed6fb0452beb49a135f88bfb09c70cc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -3526,8 +3526,8 @@ __metadata:
|
||||
react-dom: "npm:^19.0.0"
|
||||
react-markdown: "npm:^10.1.0"
|
||||
tsx: "npm:^4.0.0"
|
||||
twenty-client-sdk: "npm:2.21.0"
|
||||
twenty-sdk: "npm:2.21.0"
|
||||
twenty-client-sdk: "npm:2.23.0-alpha.1"
|
||||
twenty-sdk: "npm:2.23.0-alpha.1"
|
||||
typescript: "npm:^5.9.3"
|
||||
vite-tsconfig-paths: "npm:^4.2.1"
|
||||
vitest: "npm:^4.0.0"
|
||||
@@ -3535,9 +3535,9 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"twenty-sdk@npm:2.21.0":
|
||||
version: 2.21.0
|
||||
resolution: "twenty-sdk@npm:2.21.0"
|
||||
"twenty-sdk@npm:2.23.0-alpha.1":
|
||||
version: 2.23.0-alpha.1
|
||||
resolution: "twenty-sdk@npm:2.23.0-alpha.1"
|
||||
dependencies:
|
||||
"@sniptt/guards": "npm:^0.2.0"
|
||||
axios: "npm:^1.16.0"
|
||||
@@ -3556,12 +3556,12 @@ __metadata:
|
||||
semver: "npm:7.6.3"
|
||||
sharp: "npm:^0.34.5"
|
||||
tinyglobby: "npm:^0.2.15"
|
||||
twenty-client-sdk: "npm:2.21.0"
|
||||
twenty-client-sdk: "npm:2.23.0-alpha.1"
|
||||
typescript: "npm:^5.9.3"
|
||||
uuid: "npm:^13.0.2"
|
||||
bin:
|
||||
twenty: dist/cli.cjs
|
||||
checksum: 10c0/ea03d59ca549054b1c065feb0800a103eb707c1755cb250356bbe5c59e7af576ce9f8480c1f658637ded8d3930b110bac7b57305255ff9ce02f8a587963e140c
|
||||
checksum: 10c0/c11830007c6bbf3bc0447c9e7ba2df9d3d3eac9593cb9b0236757e92fbf94cb9f24eecc150b663e435e65dc0bee48baf1833ff2d06333e84845c8b47464bcdce
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
"oxlint": "^0.16.0",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"twenty-client-sdk": "2.20.0",
|
||||
"twenty-sdk": "2.20.0",
|
||||
"twenty-client-sdk": "2.23.0-alpha.1",
|
||||
"twenty-sdk": "2.23.0-alpha.1",
|
||||
"typescript": "^5.9.3",
|
||||
"vite-tsconfig-paths": "^4.2.1",
|
||||
"vitest": "^4.0.0"
|
||||
|
||||
@@ -52,14 +52,10 @@ export default defineView({
|
||||
{ universalIdentifier: '0c027ae2-7e63-4354-8962-6922923929c0', fieldMetadataUniversalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.company.pdlAlternativeDomains, position: 32, isVisible: true },
|
||||
{ universalIdentifier: '0814427e-6699-44fd-9d57-7af6f2389f7d', fieldMetadataUniversalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.company.pdlTags, position: 33, isVisible: true },
|
||||
{ universalIdentifier: '65ca68c9-589f-44dc-bf57-d0a2152cb09c', fieldMetadataUniversalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.company.pdlAffiliatedProfiles, position: 34, isVisible: true },
|
||||
// TODO: derive these with getSystemRelationFieldUniversalIdentifier once
|
||||
// the next twenty-sdk is released. The system relation field universal
|
||||
// identifiers were re-derived name-free in twenty v2.23 and the pinned
|
||||
// twenty-sdk still embeds the old values.
|
||||
{ universalIdentifier: '3f0e5a60-3f49-4872-8451-5344a3715374', fieldMetadataUniversalIdentifier: '0b28db77-8099-5ce3-a11f-86a5778d7740', position: 35, isVisible: true }, // company.noteTargets
|
||||
{ universalIdentifier: '70ab74e1-d2ff-4f15-81ef-196e223a783e', fieldMetadataUniversalIdentifier: '9d7b0087-7037-55dc-bb59-456064455694', position: 36, isVisible: true }, // company.taskTargets
|
||||
{ universalIdentifier: '035b3904-59b9-4fce-a366-ee0139770346', fieldMetadataUniversalIdentifier: 'a4399ae3-fe89-59fe-a282-aec77d4e63a8', position: 37, isVisible: true }, // company.attachments
|
||||
{ universalIdentifier: '617b7343-1ae5-4813-b4f5-6e99d0a833bb', fieldMetadataUniversalIdentifier: '28ec0f8f-ad23-5317-b2d9-1a487bcefee2', position: 38, isVisible: true }, // company.timelineActivities
|
||||
{ universalIdentifier: '3f0e5a60-3f49-4872-8451-5344a3715374', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.fields.noteTargets.universalIdentifier, position: 35, isVisible: true },
|
||||
{ universalIdentifier: '70ab74e1-d2ff-4f15-81ef-196e223a783e', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.fields.taskTargets.universalIdentifier, position: 36, isVisible: true },
|
||||
{ universalIdentifier: '035b3904-59b9-4fce-a366-ee0139770346', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.fields.attachments.universalIdentifier, position: 37, isVisible: true },
|
||||
{ universalIdentifier: '617b7343-1ae5-4813-b4f5-6e99d0a833bb', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.fields.timelineActivities.universalIdentifier, position: 38, isVisible: true },
|
||||
{ universalIdentifier: '24d0411e-23d2-4cf8-9781-6efc8443efdc', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.fields.createdBy.universalIdentifier, position: 39, isVisible: true },
|
||||
{ universalIdentifier: '4036071d-e527-46c8-940c-401f33803aa9', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.fields.updatedBy.universalIdentifier, position: 40, isVisible: true },
|
||||
{ universalIdentifier: 'ab123fcd-ec53-4d33-b43c-c7319db72be4', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.fields.createdAt.universalIdentifier, position: 41, isVisible: true },
|
||||
|
||||
@@ -56,14 +56,10 @@ export default defineView({
|
||||
{ universalIdentifier: '730dfb73-0ff7-429a-a70b-fefc6080b537', fieldMetadataUniversalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlSex, position: 36, isVisible: true },
|
||||
{ universalIdentifier: '1620bf1d-0b12-4f69-ad0e-ba7dd1d8aa44', fieldMetadataUniversalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlBirthDate, position: 37, isVisible: true },
|
||||
{ universalIdentifier: '029770cb-9353-4b5f-8395-b217cc95402e', fieldMetadataUniversalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlBirthYear, position: 38, isVisible: true },
|
||||
// TODO: derive these with getSystemRelationFieldUniversalIdentifier once
|
||||
// the next twenty-sdk is released. The system relation field universal
|
||||
// identifiers were re-derived name-free in twenty v2.23 and the pinned
|
||||
// twenty-sdk still embeds the old values.
|
||||
{ universalIdentifier: 'ef6e496c-de6c-47ed-bd44-886736f942ec', fieldMetadataUniversalIdentifier: '1c0e0dfe-a01f-58d6-8948-08b93164d03c', position: 39, isVisible: true }, // person.noteTargets
|
||||
{ universalIdentifier: '3758ed96-f76d-49a0-b37b-7c5c9aa4c1c1', fieldMetadataUniversalIdentifier: 'ddea86e6-5766-5798-ac32-14fbab6089f6', position: 40, isVisible: true }, // person.taskTargets
|
||||
{ universalIdentifier: 'a5bf7046-8fc9-4704-91a5-ba6c1b0f4b58', fieldMetadataUniversalIdentifier: '54dd92e1-67bf-5381-86f3-c747976dcdaf', position: 41, isVisible: true }, // person.attachments
|
||||
{ universalIdentifier: 'f6ed39c3-aff2-4ccf-b4e8-57de72b64cdd', fieldMetadataUniversalIdentifier: '32d7483f-6227-528b-bc65-62d9cf858cd8', position: 42, isVisible: true }, // person.timelineActivities
|
||||
{ universalIdentifier: 'ef6e496c-de6c-47ed-bd44-886736f942ec', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.fields.noteTargets.universalIdentifier, position: 39, isVisible: true },
|
||||
{ universalIdentifier: '3758ed96-f76d-49a0-b37b-7c5c9aa4c1c1', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.fields.taskTargets.universalIdentifier, position: 40, isVisible: true },
|
||||
{ universalIdentifier: 'a5bf7046-8fc9-4704-91a5-ba6c1b0f4b58', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.fields.attachments.universalIdentifier, position: 41, isVisible: true },
|
||||
{ universalIdentifier: 'f6ed39c3-aff2-4ccf-b4e8-57de72b64cdd', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.fields.timelineActivities.universalIdentifier, position: 42, isVisible: true },
|
||||
{ universalIdentifier: '45159f0c-bac0-439c-ad8d-c7e4fce4b457', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.fields.createdBy.universalIdentifier, position: 43, isVisible: true },
|
||||
{ universalIdentifier: '8a5f1742-317f-4b01-b0c1-5d0866f78fa9', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.fields.updatedBy.universalIdentifier, position: 44, isVisible: true },
|
||||
{ universalIdentifier: '1614c9fb-3566-481f-9dfb-bbba37b1c8aa', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.fields.createdAt.universalIdentifier, position: 45, isVisible: true },
|
||||
|
||||
@@ -953,8 +953,8 @@ __metadata:
|
||||
oxlint: "npm:^0.16.0"
|
||||
react: "npm:^18.2.0"
|
||||
react-dom: "npm:^18.2.0"
|
||||
twenty-client-sdk: "npm:2.20.0"
|
||||
twenty-sdk: "npm:2.20.0"
|
||||
twenty-client-sdk: "npm:2.23.0-alpha.1"
|
||||
twenty-sdk: "npm:2.23.0-alpha.1"
|
||||
typescript: "npm:^5.9.3"
|
||||
vite-tsconfig-paths: "npm:^4.2.1"
|
||||
vitest: "npm:^4.0.0"
|
||||
@@ -2871,22 +2871,22 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"twenty-client-sdk@npm:2.20.0":
|
||||
version: 2.20.0
|
||||
resolution: "twenty-client-sdk@npm:2.20.0"
|
||||
"twenty-client-sdk@npm:2.23.0-alpha.1":
|
||||
version: 2.23.0-alpha.1
|
||||
resolution: "twenty-client-sdk@npm:2.23.0-alpha.1"
|
||||
dependencies:
|
||||
"@genql/runtime": "npm:^2.10.0"
|
||||
esbuild: "npm:^0.28.1"
|
||||
graphql: "npm:^16.8.1"
|
||||
lodash: "npm:^4.17.21"
|
||||
prettier: "npm:^3.8.3"
|
||||
checksum: 10c0/925a5ad99bbccb7290365536b6d7ded6a8d02a064b175a195b6439732db6848a0a3aaa762f5c30ad0b79f48921a6cbd203fe442a0b9f93d1d902812c0d83aa17
|
||||
checksum: 10c0/b55c1e4eee7cdf24d68b9318924f428ad2d26a96052b5ed7d2a6da21a88bb216326fb979e8f7e99765e6495b9f98c0334ed6fb0452beb49a135f88bfb09c70cc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"twenty-sdk@npm:2.20.0":
|
||||
version: 2.20.0
|
||||
resolution: "twenty-sdk@npm:2.20.0"
|
||||
"twenty-sdk@npm:2.23.0-alpha.1":
|
||||
version: 2.23.0-alpha.1
|
||||
resolution: "twenty-sdk@npm:2.23.0-alpha.1"
|
||||
dependencies:
|
||||
"@sniptt/guards": "npm:^0.2.0"
|
||||
axios: "npm:^1.16.0"
|
||||
@@ -2905,12 +2905,12 @@ __metadata:
|
||||
semver: "npm:7.6.3"
|
||||
sharp: "npm:^0.34.5"
|
||||
tinyglobby: "npm:^0.2.15"
|
||||
twenty-client-sdk: "npm:2.20.0"
|
||||
twenty-client-sdk: "npm:2.23.0-alpha.1"
|
||||
typescript: "npm:^5.9.3"
|
||||
uuid: "npm:^13.0.2"
|
||||
bin:
|
||||
twenty: dist/cli.cjs
|
||||
checksum: 10c0/7fe50f229470e370473e7555f0eb284b59424cb51369ce0fa88723681bd6a662879268f953599b0e3c5fc97b73f1e756352df80605185ed6b4e9c85fa186feef
|
||||
checksum: 10c0/c11830007c6bbf3bc0447c9e7ba2df9d3d3eac9593cb9b0236757e92fbf94cb9f24eecc150b663e435e65dc0bee48baf1833ff2d06333e84845c8b47464bcdce
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
+5
@@ -95,6 +95,11 @@ export class UpgradePeopleDataLabsApplicationCommand extends ProvisionedWorkspac
|
||||
appRegistrationId: applicationRegistration.id,
|
||||
targetVersion: PEOPLE_DATA_LABS_TARGET_VERSION,
|
||||
workspaceId,
|
||||
// 1.0.7 pins engines.twenty >=2.23.0, but this command runs as part of
|
||||
// the 2.23 workspace upgrade itself, so the workspace has not yet been
|
||||
// marked as completing 2.23 and the compatibility check would reject
|
||||
// the install. The server is already on 2.23, so skip the check here.
|
||||
skipWorkspaceCompatibilityCheck: true,
|
||||
});
|
||||
|
||||
this.logger.log(
|
||||
|
||||
+49
-30
@@ -9,27 +9,27 @@ import { FileFolder } from 'twenty-shared/types';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { Repository } from 'typeorm';
|
||||
|
||||
import { buildApplicationFileList } from 'src/engine/core-modules/application/application-install/utils/build-application-file-list.util';
|
||||
import { ApplicationManifestApplyService } from 'src/engine/core-modules/application/application-manifest/application-manifest-apply.service';
|
||||
import { ApplicationSyncService } from 'src/engine/core-modules/application/application-manifest/application-sync.service';
|
||||
import {
|
||||
ApplicationException,
|
||||
ApplicationExceptionCode,
|
||||
} from 'src/engine/core-modules/application/application.exception';
|
||||
import { isImageFilePath } from 'src/engine/core-modules/application/application-registration/utils/is-image-file-path.util';
|
||||
import { ApplicationRegistrationEntity } from 'src/engine/core-modules/application/application-registration/application-registration.entity';
|
||||
import { ApplicationRegistrationSourceType } from 'src/engine/core-modules/application/application-registration/enums/application-registration-source-type.enum';
|
||||
import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity';
|
||||
import { ApplicationService } from 'src/engine/core-modules/application/application.service';
|
||||
import {
|
||||
type ResolvedPackage,
|
||||
ApplicationPackageFetcherService,
|
||||
type ResolvedPackage,
|
||||
} from 'src/engine/core-modules/application/application-package/application-package-fetcher.service';
|
||||
import { ApplicationVersionValidationService } from 'src/engine/core-modules/application/application-package/application-version-validation.service';
|
||||
import {
|
||||
VERSION_PROGRESSION_REASON_TO_INSTALL_EXCEPTION_CODE,
|
||||
VERSION_REASON_TO_APPLICATION_EXCEPTION_CODE,
|
||||
} from 'src/engine/core-modules/application/application-package/constants/version-reason-to-exception-code.constant';
|
||||
import { buildApplicationFileList } from 'src/engine/core-modules/application/application-install/utils/build-application-file-list.util';
|
||||
import { ApplicationManifestApplyService } from 'src/engine/core-modules/application/application-manifest/application-manifest-apply.service';
|
||||
import { ApplicationSyncService } from 'src/engine/core-modules/application/application-manifest/application-sync.service';
|
||||
import { ApplicationRegistrationEntity } from 'src/engine/core-modules/application/application-registration/application-registration.entity';
|
||||
import { ApplicationRegistrationSourceType } from 'src/engine/core-modules/application/application-registration/enums/application-registration-source-type.enum';
|
||||
import { isImageFilePath } from 'src/engine/core-modules/application/application-registration/utils/is-image-file-path.util';
|
||||
import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity';
|
||||
import {
|
||||
ApplicationException,
|
||||
ApplicationExceptionCode,
|
||||
} from 'src/engine/core-modules/application/application.exception';
|
||||
import { ApplicationService } from 'src/engine/core-modules/application/application.service';
|
||||
import { CacheLockService } from 'src/engine/core-modules/cache-lock/cache-lock.service';
|
||||
import { FileStorageService } from 'src/engine/core-modules/file-storage/services/file-storage.service';
|
||||
import { LogicFunctionExecutorService } from 'src/engine/core-modules/logic-function/logic-function-executor/logic-function-executor.service';
|
||||
@@ -69,6 +69,7 @@ export class ApplicationInstallService {
|
||||
appRegistrationId: string;
|
||||
version?: string;
|
||||
workspaceId: string;
|
||||
skipWorkspaceCompatibilityCheck?: boolean;
|
||||
}): Promise<boolean> {
|
||||
const appRegistration = await this.appRegistrationRepository.findOne({
|
||||
where: { id: params.appRegistrationId },
|
||||
@@ -109,6 +110,8 @@ export class ApplicationInstallService {
|
||||
this.doInstallApplication(appRegistration, {
|
||||
version: params.version,
|
||||
workspaceId: params.workspaceId,
|
||||
skipWorkspaceCompatibilityCheck:
|
||||
params.skipWorkspaceCompatibilityCheck,
|
||||
}),
|
||||
lockKey,
|
||||
{ ttl: 60_000, ms: 500, maxRetries: 120 },
|
||||
@@ -117,7 +120,11 @@ export class ApplicationInstallService {
|
||||
|
||||
private async doInstallApplication(
|
||||
preLockAppRegistration: ApplicationRegistrationEntity,
|
||||
params: { version?: string; workspaceId: string },
|
||||
params: {
|
||||
version?: string;
|
||||
workspaceId: string;
|
||||
skipWorkspaceCompatibilityCheck?: boolean;
|
||||
},
|
||||
): Promise<boolean> {
|
||||
// Re-read inside the lock so the authorization below cannot act on stale
|
||||
// listing or ownership state.
|
||||
@@ -184,7 +191,11 @@ export class ApplicationInstallService {
|
||||
existingApplication,
|
||||
}: {
|
||||
appRegistration: ApplicationRegistrationEntity;
|
||||
params: { version?: string; workspaceId: string };
|
||||
params: {
|
||||
version?: string;
|
||||
workspaceId: string;
|
||||
skipWorkspaceCompatibilityCheck?: boolean;
|
||||
};
|
||||
resolvedPackage: ResolvedPackage;
|
||||
existingApplication: ApplicationEntity | null;
|
||||
}): Promise<boolean> {
|
||||
@@ -238,28 +249,36 @@ export class ApplicationInstallService {
|
||||
existingApplication,
|
||||
}: {
|
||||
appRegistration: ApplicationRegistrationEntity;
|
||||
params: { version?: string; workspaceId: string };
|
||||
params: {
|
||||
version?: string;
|
||||
workspaceId: string;
|
||||
skipWorkspaceCompatibilityCheck?: boolean;
|
||||
};
|
||||
resolvedPackage: ResolvedPackage;
|
||||
existingApplication: ApplicationEntity | null;
|
||||
}): Promise<boolean> {
|
||||
const universalIdentifier = appRegistration.universalIdentifier;
|
||||
|
||||
const requiredServerVersion =
|
||||
resolvedPackage.packageJson.engines?.['twenty'];
|
||||
if (params.skipWorkspaceCompatibilityCheck !== true) {
|
||||
const requiredServerVersion =
|
||||
resolvedPackage.packageJson.engines?.['twenty'];
|
||||
|
||||
const versionValidation =
|
||||
await this.applicationVersionValidationService.validateWorkspaceCompatibility(
|
||||
{
|
||||
requiredServerVersion,
|
||||
workspaceId: params.workspaceId,
|
||||
},
|
||||
);
|
||||
const versionValidation =
|
||||
await this.applicationVersionValidationService.validateWorkspaceCompatibility(
|
||||
{
|
||||
requiredServerVersion,
|
||||
workspaceId: params.workspaceId,
|
||||
},
|
||||
);
|
||||
|
||||
if (!versionValidation.compatible) {
|
||||
throw new ApplicationException(
|
||||
versionValidation.message,
|
||||
VERSION_REASON_TO_APPLICATION_EXCEPTION_CODE[versionValidation.reason],
|
||||
);
|
||||
if (!versionValidation.compatible) {
|
||||
throw new ApplicationException(
|
||||
versionValidation.message,
|
||||
VERSION_REASON_TO_APPLICATION_EXCEPTION_CODE[
|
||||
versionValidation.reason
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const isVersionUpgrade = isDefined(existingApplication);
|
||||
|
||||
+4
@@ -172,6 +172,7 @@ export class ApplicationUpgradeService {
|
||||
appRegistrationId: string;
|
||||
targetVersion: string;
|
||||
workspaceId: string;
|
||||
skipWorkspaceCompatibilityCheck?: boolean;
|
||||
}): Promise<boolean> {
|
||||
const appRegistration = await this.appRegistrationRepository.findOneOrFail({
|
||||
where: { id: params.appRegistrationId },
|
||||
@@ -181,6 +182,7 @@ export class ApplicationUpgradeService {
|
||||
appRegistration,
|
||||
targetVersion: params.targetVersion,
|
||||
workspaceId: params.workspaceId,
|
||||
skipWorkspaceCompatibilityCheck: params.skipWorkspaceCompatibilityCheck,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -188,6 +190,7 @@ export class ApplicationUpgradeService {
|
||||
appRegistration: ApplicationRegistrationEntity;
|
||||
targetVersion: string;
|
||||
workspaceId: string;
|
||||
skipWorkspaceCompatibilityCheck?: boolean;
|
||||
}): Promise<boolean> {
|
||||
const { appRegistration } = params;
|
||||
|
||||
@@ -209,6 +212,7 @@ export class ApplicationUpgradeService {
|
||||
appRegistrationId: appRegistration.id,
|
||||
version: params.targetVersion,
|
||||
workspaceId: params.workspaceId,
|
||||
skipWorkspaceCompatibilityCheck: params.skipWorkspaceCompatibilityCheck,
|
||||
});
|
||||
} catch (error) {
|
||||
const appName =
|
||||
|
||||
Reference in New Issue
Block a user