1895 extensibility v1 application tokens (#16365)

First PR to implement application tokens
- add new application role in twenty-server
- move duplicated constants and types to twenty-shared
- will  add role configuration utils into twenty-sdk in another PR
This commit is contained in:
martmull
2025-12-08 10:42:46 +01:00
committed by GitHub
parent 1f9a6b067a
commit 7f1e69740a
188 changed files with 977 additions and 457 deletions
@@ -1,6 +1,7 @@
import { type Sources } from 'twenty-shared/types';
import { type FlatEntityPropertiesUpdates } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type';
import { type FlatServerlessFunction } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type';
import { type Sources } from 'src/engine/core-modules/file-storage/types/source.type';
export type CreateServerlessFunctionAction = {
type: 'create_serverless_function';
@@ -1,11 +1,11 @@
import { Injectable } from '@nestjs/common';
import { isDefined } from 'twenty-shared/utils';
import { type Sources } from 'twenty-shared/types';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface';
import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service';
import { type Sources } from 'src/engine/core-modules/file-storage/types/source.type';
import { ServerlessService } from 'src/engine/core-modules/serverless/serverless.service';
import { getServerlessFolder } from 'src/engine/core-modules/serverless/utils/serverless-get-folder.utils';
import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
@@ -2,13 +2,13 @@ import { Injectable, Logger } from '@nestjs/common';
import { removePropertiesFromRecord } from 'twenty-shared/utils';
import { IsNull, Not, type EntityManager, type Repository } from 'typeorm';
import { PermissionFlagType } from 'twenty-shared/constants';
import { ComparatorAction } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/comparator.interface';
import { type WorkspaceSyncContext } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/workspace-sync-context.interface';
import { fromRoleEntityToFlatRole } from 'src/engine/metadata-modules/flat-role/utils/from-role-entity-to-flat-role.util';
import { PermissionFlagEntity } from 'src/engine/metadata-modules/permission-flag/permission-flag.entity';
import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants';
import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity';
import { WorkspaceRoleComparator } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/workspace-role.comparator';
import { StandardRoleFactory } from 'src/engine/workspace-manager/workspace-sync-metadata/factories/standard-role.factory';
@@ -15,5 +15,6 @@ export const ADMIN_ROLE: StandardRoleDefinition = {
canBeAssignedToUsers: true,
canBeAssignedToAgents: false,
canBeAssignedToApiKeys: true,
canBeAssignedToApplications: false,
applicationId: null, // TODO: Replace with Twenty application ID
};
@@ -1,4 +1,5 @@
import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants';
import { PermissionFlagType } from 'twenty-shared/constants';
import { type StandardRoleDefinition } from 'src/engine/workspace-manager/workspace-sync-metadata/standard-roles/types/standard-role-definition.interface';
export const DASHBOARD_MANAGER_ROLE: StandardRoleDefinition = {
@@ -16,6 +17,7 @@ export const DASHBOARD_MANAGER_ROLE: StandardRoleDefinition = {
canBeAssignedToUsers: false,
canBeAssignedToAgents: true,
canBeAssignedToApiKeys: false,
canBeAssignedToApplications: true,
permissionFlags: [PermissionFlagType.LAYOUTS],
applicationId: null, // TODO: Replace with Twenty application ID
};
@@ -15,5 +15,6 @@ export const DATA_MANIPULATOR_ROLE: StandardRoleDefinition = {
canBeAssignedToUsers: false,
canBeAssignedToAgents: true,
canBeAssignedToApiKeys: false,
canBeAssignedToApplications: true,
applicationId: null, // TODO: Replace with Twenty application ID
};
@@ -1,4 +1,5 @@
import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants';
import { PermissionFlagType } from 'twenty-shared/constants';
import { type StandardRoleDefinition } from 'src/engine/workspace-manager/workspace-sync-metadata/standard-roles/types/standard-role-definition.interface';
export const DATA_MODEL_MANAGER_ROLE: StandardRoleDefinition = {
@@ -16,6 +17,7 @@ export const DATA_MODEL_MANAGER_ROLE: StandardRoleDefinition = {
canBeAssignedToUsers: false,
canBeAssignedToAgents: true,
canBeAssignedToApiKeys: false,
canBeAssignedToApplications: true,
permissionFlags: [PermissionFlagType.DATA_MODEL],
applicationId: null,
};
@@ -1,4 +1,5 @@
import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants';
import { PermissionFlagType } from 'twenty-shared/constants';
import { type StandardRoleDefinition } from 'src/engine/workspace-manager/workspace-sync-metadata/standard-roles/types/standard-role-definition.interface';
export const WORKFLOW_MANAGER_ROLE: StandardRoleDefinition = {
@@ -16,6 +17,7 @@ export const WORKFLOW_MANAGER_ROLE: StandardRoleDefinition = {
canBeAssignedToUsers: false,
canBeAssignedToAgents: true,
canBeAssignedToApiKeys: false,
canBeAssignedToApplications: true,
permissionFlags: [PermissionFlagType.WORKFLOWS],
applicationId: null, // TODO: Replace with Twenty application ID
};
@@ -1,5 +1,6 @@
import { type PermissionFlagType } from 'twenty-shared/constants';
import { type FlatRole } from 'src/engine/metadata-modules/flat-role/types/flat-role.type';
import { type PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants';
export type StandardRoleDefinition = Omit<
FlatRole,