From 3c78436e97d84a3d5a8da8e69ce9b38da20326e7 Mon Sep 17 00:00:00 2001 From: ehconitin Date: Mon, 11 May 2026 16:01:49 +0530 Subject: [PATCH] =?UTF-8?q?Rename=20permissionFlag=20=E2=86=92=20permissio?= =?UTF-8?q?nFlagGrant=20with=20table=20migration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/metadata/generated/schema.graphql | 14 ++-- .../src/metadata/generated/schema.ts | 32 +++---- .../src/metadata/generated/types.ts | 16 ++-- .../src/generated-metadata/graphql.ts | 44 +++++----- .../files/components/AttachmentList.tsx | 6 +- .../files/components/AttachmentRow.tsx | 4 +- .../activities/files/components/FilesCard.tsx | 4 +- .../AIChatNoMoreBillingCreditsBanner.tsx | 4 +- .../AgentChatThreadInitializationEffect.tsx | 4 +- .../AiChatCreditsExhaustedMessage.tsx | 4 +- .../auth/states/currentUserWorkspaceState.ts | 2 +- .../components/StandalonePageCommandMenu.tsx | 10 +-- .../constants/EmptyCommandMenuContextApi.ts | 2 +- .../__tests__/useCloseCommandMenu.test.tsx | 2 +- .../hooks/useCurrentCommandMenuContextApi.ts | 8 +- .../components/InformationBannerWrapper.tsx | 4 +- ...rmationBannerBillingSubscriptionPaused.tsx | 4 +- .../InformationBannerEndTrialPeriod.tsx | 4 +- .../InformationBannerFailPaymentInfo.tsx | 4 +- ...InformationBannerNoBillingSubscription.tsx | 4 +- .../InformationBannerNoMoreCredits.tsx | 4 +- .../hooks/useMetadataErrorHandler.ts | 2 +- .../UserMetadataProviderInitialEffect.tsx | 4 +- .../modules/metadata-store/types/FlatRole.ts | 2 +- .../components/MainNavigationDrawer.tsx | 4 +- .../MainNavigationDrawerTabsRow.tsx | 4 +- .../components/MobileNavigationBar.tsx | 4 +- .../hooks/__mocks__/useFieldMetadataItem.ts | 2 +- ...ObjectOptionsDropdownVisibilityContent.tsx | 4 +- .../meta-types/hooks/useCanAddSelectOption.ts | 4 +- .../hooks/useRecordGroupActions.ts | 4 +- .../useSetNextOnboardingStatus.test.ts | 4 +- .../hooks/useSetNextOnboardingStatus.ts | 4 +- .../__stories__/WidgetRenderer.stories.tsx | 4 +- .../SettingsBillingSubscriptionInfo.tsx | 4 +- .../SettingsProtectedRouteWrapper.tsx | 4 +- .../useSettingsNavigationItems.test.tsx | 12 +-- .../hooks/useSettingsNavigationItems.tsx | 4 +- .../profile/hooks/useCanChangePassword.ts | 2 +- .../profile/hooks/useCanEditProfileField.ts | 4 +- .../fragments/permissionFlagFragment.ts | 9 -- .../fragments/permissionFlagGrantFragment.ts | 9 ++ .../upsertPermissionFlagGrantsMutation.ts | 15 ++++ .../upsertPermissionFlagsMutation.ts | 15 ---- .../roles/graphql/queries/getRolesQuery.ts | 8 +- ...onFlag.ts => useHasPermissionFlagGrant.ts} | 10 +-- ...lagMap.ts => usePermissionFlagGrantMap.ts} | 4 +- ...SettingsRolePermissionsSettingsSection.tsx | 4 +- ...ingsRolePermissionsSettingsTableHeader.tsx | 10 +-- ...ettingsRolePermissionsSettingsTableRow.tsx | 10 +-- .../SettingsRolePermissionsToolSection.tsx | 4 +- ...useActionRolePermissionFlagGrantConfig.ts} | 6 +- ...eSettingsRolePermissionFlagGrantConfig.ts} | 6 +- .../roles/role/hooks/useSaveDraftRoleToDB.ts | 28 +++---- .../states/settingsDraftRoleFamilyState.ts | 2 +- .../graphql/fragments/userQueryFragment.ts | 2 +- .../modules/users/hooks/useLoadCurrentUser.ts | 2 +- .../views/hooks/useCanPersistViewChanges.ts | 4 +- .../components/ViewPickerContentEffect.tsx | 4 +- .../components/ViewPickerOptionDropdown.tsx | 4 +- .../WorkflowAiAgentPermissionsFlagList.tsx | 18 ++-- .../WorkflowAiAgentPermissionsTab.tsx | 26 +++--- .../workflowAiAgentPermissions.utils.ts | 6 +- .../useWorkflowAiAgentPermissionActions.ts | 52 ++++++------ .../ai/components/SettingsAgentRoleTab.tsx | 2 +- .../SettingsApplicationDetails.tsx | 4 +- .../applications/SettingsApplications.tsx | 4 +- .../SettingsAvailableApplicationDetails.tsx | 4 +- .../SettingsApplicationPermissionsTab.tsx | 8 +- .../members/SettingsWorkspaceMember.tsx | 4 +- .../members/SettingsWorkspaceMembers.tsx | 4 +- .../metadata/minimal/mock-minimal-metadata.ts | 2 +- .../metadata/roles/mock-roles-data.ts | 8 +- .../src/testing/mock-data/users.ts | 4 +- .../app-dev/expected-manifest.ts | 2 +- .../app-dev/expected-manifest.ts | 4 +- ...nditional-availability-expressions.test.ts | 2 +- .../from-role-config-to-role-manifest.ts | 8 +- packages/twenty-sdk/src/sdk/define/index.ts | 2 +- .../__tests__/define-application-role.spec.ts | 6 +- .../roles/__tests__/define-role.spec.ts | 6 +- .../sdk/define/roles/permission-flag-type.ts | 2 +- .../src/sdk/define/roles/role-config.ts | 4 +- ...ete-orphaned-workspace-entities.command.ts | 4 +- ...ermission-flag-to-permission-flag-grant.ts | 37 ++++++++ .../instance-commands.constant.ts | 2 + ...iversal-flat-permission-flag-grant.util.ts | 23 +++++ ...-to-universal-flat-permission-flag.util.ts | 23 ----- ...le-manifest-to-universal-flat-role.util.ts | 2 +- ...est-all-universal-flat-entity-maps.util.ts | 10 +-- ...e-entity-non-cached-properties.constant.ts | 2 +- .../user-workspace/user-workspace.entity.ts | 2 +- ...configuration-by-metadata-name.constant.ts | 2 +- ...ny-to-one-metadata-foreign-key.constant.ts | 2 +- ...many-to-one-metadata-relations.constant.ts | 4 +- ...tadata-entity-by-metadata-name.constant.ts | 4 +- ...quired-metadata-for-validation.constant.ts | 4 +- ...l-metadata-serialized-relation.constant.ts | 2 +- ...one-to-many-metadata-relations.constant.ts | 10 +-- ...ny-or-all-flat-entity-maps-cache.module.ts | 10 +-- .../all-flat-entity-types-by-metadata-name.ts | 42 +++++----- ...lag-grant-editable-properties.constant.ts} | 4 +- ...ermission-flag-grant-map-cache.service.ts} | 34 ++++---- .../flat-permission-flag-grant-maps.type.ts | 4 + .../types/flat-permission-flag-grant.type.ts | 4 + ...t-permission-flag-grant-to-create.util.ts} | 16 ++-- ...ity-to-flat-permission-flag-grant.util.ts} | 30 +++---- .../types/flat-permission-flag-maps.type.ts | 4 - .../types/flat-permission-flag.type.ts | 4 - .../flat-role/types/flat-role.type.ts | 4 +- ...-role-input-to-flat-role-to-create.util.ts | 4 +- .../from-role-entity-to-flat-role.util.ts | 8 +- .../permission-flag-definition.resolver.ts | 8 +- .../create-permission-flag-grant.input.ts} | 2 +- .../dtos/permission-flag-grant.dto.ts} | 4 +- .../upsert-permission-flag-grant-input.ts} | 4 +- .../permission-flag-grant.entity.ts} | 10 +-- .../permission-flag-grant.module.ts} | 8 +- .../permission-flag-grant.service.ts} | 50 +++++------ ...grant-to-permission-flag-grant-dto.util.ts | 10 +++ ...ission-flag-to-permission-flag-dto.util.ts | 10 --- .../__tests__/permissions.service.spec.ts | 20 ++--- .../permissions/permissions.service.ts | 32 +++---- .../types/user-workspace-permissions.ts | 2 +- .../metadata-modules/role/dtos/role.dto.ts | 6 +- .../dtos/user-workspace-permissions.dto.ts | 2 +- .../metadata-modules/role/role.entity.ts | 8 +- .../metadata-modules/role/role.module.ts | 8 +- .../metadata-modules/role/role.resolver.ts | 28 +++---- .../metadata-modules/role/role.service.ts | 4 +- ...ce-roles-permissions-cache.service.spec.ts | 36 ++++---- .../workspace-flat-role-map-cache.service.ts | 16 ++-- ...rkspace-roles-permissions-cache.service.ts | 28 +++---- .../utils/fromRoleEntityToRoleDto.util.ts | 2 +- ...ermissionsToUserWorkspacePermissionsDto.ts | 6 +- .../user-role/user-role.service.ts | 2 +- .../services/view-access.service.ts | 2 +- .../types/workspace-cache-key.type.ts | 2 +- .../standard-command-menu-item.constant.ts | 6 +- ...create-standard-role-flat-metadata.util.ts | 4 +- ...plication-all-flat-entity-maps.constant.ts | 2 +- ...orkspace-migration-action-with-ids.util.ts | 2 +- ...ce-migration-build-orchestrator.service.ts | 34 ++++---- ...ized-relation-by-metadata-name.constant.ts | 2 +- ...iversal-flat-permission-flag-grant.type.ts | 7 ++ .../universal-flat-permission-flag.type.ts | 7 -- ...tion-permission-flag-grant-action.type.ts} | 24 +++--- ...ion-flag-grant-actions-builder.service.ts} | 48 +++++------ ...-flag-definition-validator.service.spec.ts | 32 +++---- ...ssion-flag-definition-validator.service.ts | 8 +- ...ermission-flag-grant-validator.service.ts} | 84 +++++++++---------- ...ace-migration-builder-validators.module.ts | 6 +- .../workspace-migration-builder.module.ts | 6 +- ...sion-flag-grant-action-handler.service.ts} | 16 ++-- ...sion-flag-grant-action-handler.service.ts} | 28 +++---- ...sion-flag-grant-action-handler.service.ts} | 38 ++++----- .../create-role-action-handler.service.ts | 2 +- ...migration-runner-action-handlers.module.ts | 12 +-- .../metadata-event-to-emit.constant.ts | 2 +- .../workspace-migration-runner.service.ts | 2 +- ...metadata-events-from-create-action.util.ts | 2 +- ...metadata-events-from-delete-action.util.ts | 2 +- ...metadata-events-from-update-action.util.ts | 2 +- ...ate-action-on-all-flat-entity-maps.util.ts | 2 +- ...ete-action-on-all-flat-entity-maps.util.ts | 2 +- ...ate-action-on-all-flat-entity-maps.util.ts | 2 +- ...r-settings-permissions.integration-spec.ts | 48 +++++------ .../roles.integration-spec.ts | 14 ++-- ...and-workspace-creation.integration-spec.ts | 2 +- ...reate-on-standard-role.integration-spec.ts | 6 +- ...ion-retarget-on-update.integration-spec.ts | 10 +-- ...ssion-flag-upsert.integration-spec.ts.snap | 10 +-- ...ion-flag-grant-upsert.integration-spec.ts} | 22 ++--- ...ion-flag-grant-upsert.integration-spec.ts} | 42 +++++----- ...rmission-flag-grants-query-factory.util.ts | 28 +++++++ .../upsert-permission-flag-grants.util.ts} | 16 ++-- ...ert-permission-flags-query-factory.util.ts | 28 ------- .../twenty-shared/src/application/index.ts | 2 +- .../src/application/roleManifestType.ts | 4 +- .../constants/all-metadata-name.constant.ts | 2 +- .../src/types/CommandMenuContextApi.ts | 2 +- ...eConditionalAvailabilityExpression.test.ts | 20 ++--- ...interpolateCommandMenuItemTemplate.test.ts | 2 +- 183 files changed, 943 insertions(+), 904 deletions(-) delete mode 100644 packages/twenty-front/src/modules/settings/roles/graphql/fragments/permissionFlagFragment.ts create mode 100644 packages/twenty-front/src/modules/settings/roles/graphql/fragments/permissionFlagGrantFragment.ts create mode 100644 packages/twenty-front/src/modules/settings/roles/graphql/mutations/upsertPermissionFlagGrantsMutation.ts delete mode 100644 packages/twenty-front/src/modules/settings/roles/graphql/mutations/upsertPermissionFlagsMutation.ts rename packages/twenty-front/src/modules/settings/roles/hooks/{useHasPermissionFlag.ts => useHasPermissionFlagGrant.ts} (68%) rename packages/twenty-front/src/modules/settings/roles/hooks/{usePermissionFlagMap.ts => usePermissionFlagGrantMap.ts} (86%) rename packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/hooks/{useActionRolePermissionFlagConfig.ts => useActionRolePermissionFlagGrantConfig.ts} (95%) rename packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/hooks/{useSettingsRolePermissionFlagConfig.ts => useSettingsRolePermissionFlagGrantConfig.ts} (96%) create mode 100644 packages/twenty-server/src/database/commands/upgrade-version-command/2-4/2-4-instance-command-fast-1778235340020-rename-permission-flag-to-permission-flag-grant.ts create mode 100644 packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-permission-flag-grant-to-universal-flat-permission-flag-grant.util.ts delete mode 100644 packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-permission-flag-to-universal-flat-permission-flag.util.ts rename packages/twenty-server/src/engine/metadata-modules/{flat-permission-flag/constants/flat-permission-flag-editable-properties.constant.ts => flat-permission-flag-grant/constants/flat-permission-flag-grant-editable-properties.constant.ts} (57%) rename packages/twenty-server/src/engine/metadata-modules/{flat-permission-flag/services/workspace-flat-permission-flag-map-cache.service.ts => flat-permission-flag-grant/services/workspace-flat-permission-flag-grant-map-cache.service.ts} (60%) create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant-maps.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant.type.ts rename packages/twenty-server/src/engine/metadata-modules/{flat-permission-flag/utils/from-create-permission-flag-input-to-flat-permission-flag-to-create.util.ts => flat-permission-flag-grant/utils/from-create-permission-flag-grant-input-to-flat-permission-flag-grant-to-create.util.ts} (64%) rename packages/twenty-server/src/engine/metadata-modules/{flat-permission-flag/utils/from-permission-flag-entity-to-flat-permission-flag.util.ts => flat-permission-flag-grant/utils/from-permission-flag-grant-entity-to-flat-permission-flag-grant.util.ts} (51%) delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag-maps.type.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag.type.ts rename packages/twenty-server/src/engine/metadata-modules/{permission-flag/dtos/create-permission-flag.input.ts => permission-flag-grant/dtos/create-permission-flag-grant.input.ts} (75%) rename packages/twenty-server/src/engine/metadata-modules/{permission-flag/dtos/permission-flag.dto.ts => permission-flag-grant/dtos/permission-flag-grant.dto.ts} (85%) rename packages/twenty-server/src/engine/metadata-modules/{permission-flag/dtos/upsert-permission-flag-input.ts => permission-flag-grant/dtos/upsert-permission-flag-grant-input.ts} (83%) rename packages/twenty-server/src/engine/metadata-modules/{permission-flag/permission-flag.entity.ts => permission-flag-grant/permission-flag-grant.entity.ts} (73%) rename packages/twenty-server/src/engine/metadata-modules/{permission-flag/permission-flag.module.ts => permission-flag-grant/permission-flag-grant.module.ts} (72%) rename packages/twenty-server/src/engine/metadata-modules/{permission-flag/permission-flag.service.ts => permission-flag-grant/permission-flag-grant.service.ts} (70%) create mode 100644 packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/utils/from-flat-permission-flag-grant-to-permission-flag-grant-dto.util.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/permission-flag/utils/from-flat-permission-flag-to-permission-flag-dto.util.ts create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag-grant.type.ts delete mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag.type.ts rename packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/{permission-flag/types/workspace-migration-permission-flag-action.type.ts => permission-flag-grant/types/workspace-migration-permission-flag-grant-action.type.ts} (62%) rename packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/{permission-flag/workspace-migration-permission-flag-actions-builder.service.ts => permission-flag-grant/workspace-migration-permission-flag-grant-actions-builder.service.ts} (54%) rename packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/{flat-permission-flag-validator.service.ts => flat-permission-flag-grant-validator.service.ts} (74%) rename packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/{permission-flag/services/create-permission-flag-action-handler.service.ts => permission-flag-grant/services/create-permission-flag-grant-action-handler.service.ts} (80%) rename packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/{permission-flag/services/delete-permission-flag-action-handler.service.ts => permission-flag-grant/services/delete-permission-flag-grant-action-handler.service.ts} (60%) rename packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/{permission-flag/services/update-permission-flag-action-handler.service.ts => permission-flag-grant/services/update-permission-flag-grant-action-handler.service.ts} (63%) rename packages/twenty-server/test/integration/metadata/suites/{permission-flag => permission-flag-grant}/__snapshots__/failing-permission-flag-upsert.integration-spec.ts.snap (88%) rename packages/twenty-server/test/integration/metadata/suites/{permission-flag/failing-permission-flag-upsert.integration-spec.ts => permission-flag-grant/failing-permission-flag-grant-upsert.integration-spec.ts} (79%) rename packages/twenty-server/test/integration/metadata/suites/{permission-flag/successful-permission-flag-upsert.integration-spec.ts => permission-flag-grant/successful-permission-flag-grant-upsert.integration-spec.ts} (66%) create mode 100644 packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/utils/upsert-permission-flag-grants-query-factory.util.ts rename packages/twenty-server/test/integration/metadata/suites/{permission-flag/utils/upsert-permission-flags.util.ts => permission-flag-grant/utils/upsert-permission-flag-grants.util.ts} (66%) delete mode 100644 packages/twenty-server/test/integration/metadata/suites/permission-flag/utils/upsert-permission-flags-query-factory.util.ts diff --git a/packages/twenty-client-sdk/src/metadata/generated/schema.graphql b/packages/twenty-client-sdk/src/metadata/generated/schema.graphql index fc7a6c21691..0dbfc192e81 100644 --- a/packages/twenty-client-sdk/src/metadata/generated/schema.graphql +++ b/packages/twenty-client-sdk/src/metadata/generated/schema.graphql @@ -138,7 +138,7 @@ type UserWorkspace { createdAt: DateTime! updatedAt: DateTime! deletedAt: DateTime - permissionFlags: [PermissionFlagType!] + permissionFlagGrants: [PermissionFlagType!] objectPermissions: [ObjectPermission!] objectsPermissions: [ObjectPermission!] twoFactorAuthenticationMethodSummary: [TwoFactorAuthenticationMethodSummary!] @@ -244,7 +244,7 @@ type FieldPermission { canUpdateFieldValue: Boolean } -type PermissionFlag { +type PermissionFlagGrant { id: UUID! roleId: UUID! flag: PermissionFlagType! @@ -276,7 +276,7 @@ type Role { canUpdateAllObjectRecords: Boolean! canSoftDeleteAllObjectRecords: Boolean! canDestroyAllObjectRecords: Boolean! - permissionFlags: [PermissionFlag!] + permissionFlagGrants: [PermissionFlagGrant!] objectPermissions: [ObjectPermission!] fieldPermissions: [FieldPermission!] rowLevelPermissionPredicates: [RowLevelPermissionPredicate!] @@ -2900,7 +2900,7 @@ enum AllMetadataName { pageLayoutTab commandMenuItem navigationMenuItem - permissionFlag + permissionFlagGrant permissionFlagDefinition objectPermission fieldPermission @@ -3257,7 +3257,7 @@ type Mutation { updateOneRole(updateRoleInput: UpdateRoleInput!): Role! deleteOneRole(roleId: UUID!): String! upsertObjectPermissions(upsertObjectPermissionsInput: UpsertObjectPermissionsInput!): [ObjectPermission!]! - upsertPermissionFlags(upsertPermissionFlagsInput: UpsertPermissionFlagsInput!): [PermissionFlag!]! + upsertPermissionFlagGrants(upsertPermissionFlagGrantsInput: UpsertPermissionFlagGrantsInput!): [PermissionFlagGrant!]! upsertFieldPermissions(upsertFieldPermissionsInput: UpsertFieldPermissionsInput!): [FieldPermission!]! upsertRowLevelPermissionPredicates(input: UpsertRowLevelPermissionPredicatesInput!): UpsertRowLevelPermissionPredicatesResult! assignRoleToAgent(agentId: UUID!, roleId: UUID!): Boolean! @@ -4043,9 +4043,9 @@ input ObjectPermissionInput { canDestroyObjectRecords: Boolean } -input UpsertPermissionFlagsInput { +input UpsertPermissionFlagGrantsInput { roleId: UUID! - permissionFlagKeys: [PermissionFlagType!]! + permissionFlagGrantKeys: [PermissionFlagType!]! } input UpsertFieldPermissionsInput { diff --git a/packages/twenty-client-sdk/src/metadata/generated/schema.ts b/packages/twenty-client-sdk/src/metadata/generated/schema.ts index efbad4cf17c..f082256b76f 100644 --- a/packages/twenty-client-sdk/src/metadata/generated/schema.ts +++ b/packages/twenty-client-sdk/src/metadata/generated/schema.ts @@ -117,7 +117,7 @@ export interface UserWorkspace { createdAt: Scalars['DateTime'] updatedAt: Scalars['DateTime'] deletedAt?: Scalars['DateTime'] - permissionFlags?: PermissionFlagType[] + permissionFlagGrants?: PermissionFlagType[] objectPermissions?: ObjectPermission[] objectsPermissions?: ObjectPermission[] twoFactorAuthenticationMethodSummary?: TwoFactorAuthenticationMethodSummary[] @@ -190,11 +190,11 @@ export interface FieldPermission { __typename: 'FieldPermission' } -export interface PermissionFlag { +export interface PermissionFlagGrant { id: Scalars['UUID'] roleId: Scalars['UUID'] flag: PermissionFlagType - __typename: 'PermissionFlag' + __typename: 'PermissionFlagGrant' } export interface ApiKeyForRole { @@ -224,7 +224,7 @@ export interface Role { canUpdateAllObjectRecords: Scalars['Boolean'] canSoftDeleteAllObjectRecords: Scalars['Boolean'] canDestroyAllObjectRecords: Scalars['Boolean'] - permissionFlags?: PermissionFlag[] + permissionFlagGrants?: PermissionFlagGrant[] objectPermissions?: ObjectPermission[] fieldPermissions?: FieldPermission[] rowLevelPermissionPredicates?: RowLevelPermissionPredicate[] @@ -2525,7 +2525,7 @@ export interface CollectionHash { __typename: 'CollectionHash' } -export type AllMetadataName = 'fieldMetadata' | 'objectMetadata' | 'view' | 'viewField' | 'viewFieldGroup' | 'viewGroup' | 'viewSort' | 'rowLevelPermissionPredicate' | 'rowLevelPermissionPredicateGroup' | 'viewFilterGroup' | 'index' | 'logicFunction' | 'viewFilter' | 'role' | 'roleTarget' | 'agent' | 'skill' | 'pageLayout' | 'pageLayoutWidget' | 'pageLayoutTab' | 'commandMenuItem' | 'navigationMenuItem' | 'permissionFlag' | 'permissionFlagDefinition' | 'objectPermission' | 'fieldPermission' | 'frontComponent' | 'webhook' | 'applicationVariable' | 'connectionProvider' +export type AllMetadataName = 'fieldMetadata' | 'objectMetadata' | 'view' | 'viewField' | 'viewFieldGroup' | 'viewGroup' | 'viewSort' | 'rowLevelPermissionPredicate' | 'rowLevelPermissionPredicateGroup' | 'viewFilterGroup' | 'index' | 'logicFunction' | 'viewFilter' | 'role' | 'roleTarget' | 'agent' | 'skill' | 'pageLayout' | 'pageLayoutWidget' | 'pageLayoutTab' | 'commandMenuItem' | 'navigationMenuItem' | 'permissionFlagGrant' | 'permissionFlagDefinition' | 'objectPermission' | 'fieldPermission' | 'frontComponent' | 'webhook' | 'applicationVariable' | 'connectionProvider' export interface MinimalObjectMetadata { id: Scalars['UUID'] @@ -2784,7 +2784,7 @@ export interface Mutation { updateOneRole: Role deleteOneRole: Scalars['String'] upsertObjectPermissions: ObjectPermission[] - upsertPermissionFlags: PermissionFlag[] + upsertPermissionFlagGrants: PermissionFlagGrant[] upsertFieldPermissions: FieldPermission[] upsertRowLevelPermissionPredicates: UpsertRowLevelPermissionPredicatesResult assignRoleToAgent: Scalars['Boolean'] @@ -3025,7 +3025,7 @@ export interface UserWorkspaceGenqlSelection{ createdAt?: boolean | number updatedAt?: boolean | number deletedAt?: boolean | number - permissionFlags?: boolean | number + permissionFlagGrants?: boolean | number objectPermissions?: ObjectPermissionGenqlSelection objectsPermissions?: ObjectPermissionGenqlSelection twoFactorAuthenticationMethodSummary?: TwoFactorAuthenticationMethodSummaryGenqlSelection @@ -3089,7 +3089,7 @@ export interface FieldPermissionGenqlSelection{ __scalar?: boolean | number } -export interface PermissionFlagGenqlSelection{ +export interface PermissionFlagGrantGenqlSelection{ id?: boolean | number roleId?: boolean | number flag?: boolean | number @@ -3125,7 +3125,7 @@ export interface RoleGenqlSelection{ canUpdateAllObjectRecords?: boolean | number canSoftDeleteAllObjectRecords?: boolean | number canDestroyAllObjectRecords?: boolean | number - permissionFlags?: PermissionFlagGenqlSelection + permissionFlagGrants?: PermissionFlagGrantGenqlSelection objectPermissions?: ObjectPermissionGenqlSelection fieldPermissions?: FieldPermissionGenqlSelection rowLevelPermissionPredicates?: RowLevelPermissionPredicateGenqlSelection @@ -5877,7 +5877,7 @@ export interface MutationGenqlSelection{ updateOneRole?: (RoleGenqlSelection & { __args: {updateRoleInput: UpdateRoleInput} }) deleteOneRole?: { __args: {roleId: Scalars['UUID']} } upsertObjectPermissions?: (ObjectPermissionGenqlSelection & { __args: {upsertObjectPermissionsInput: UpsertObjectPermissionsInput} }) - upsertPermissionFlags?: (PermissionFlagGenqlSelection & { __args: {upsertPermissionFlagsInput: UpsertPermissionFlagsInput} }) + upsertPermissionFlagGrants?: (PermissionFlagGrantGenqlSelection & { __args: {upsertPermissionFlagGrantsInput: UpsertPermissionFlagGrantsInput} }) upsertFieldPermissions?: (FieldPermissionGenqlSelection & { __args: {upsertFieldPermissionsInput: UpsertFieldPermissionsInput} }) upsertRowLevelPermissionPredicates?: (UpsertRowLevelPermissionPredicatesResultGenqlSelection & { __args: {input: UpsertRowLevelPermissionPredicatesInput} }) assignRoleToAgent?: { __args: {agentId: Scalars['UUID'], roleId: Scalars['UUID']} } @@ -6220,7 +6220,7 @@ export interface UpsertObjectPermissionsInput {roleId: Scalars['UUID'],objectPer export interface ObjectPermissionInput {objectMetadataId: Scalars['UUID'],canReadObjectRecords?: (Scalars['Boolean'] | null),canUpdateObjectRecords?: (Scalars['Boolean'] | null),canSoftDeleteObjectRecords?: (Scalars['Boolean'] | null),canDestroyObjectRecords?: (Scalars['Boolean'] | null)} -export interface UpsertPermissionFlagsInput {roleId: Scalars['UUID'],permissionFlagKeys: PermissionFlagType[]} +export interface UpsertPermissionFlagGrantsInput {roleId: Scalars['UUID'],permissionFlagGrantKeys: PermissionFlagType[]} export interface UpsertFieldPermissionsInput {roleId: Scalars['UUID'],fieldPermissions: FieldPermissionInput[]} @@ -6471,10 +6471,10 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null - const PermissionFlag_possibleTypes: string[] = ['PermissionFlag'] - export const isPermissionFlag = (obj?: { __typename?: any } | null): obj is PermissionFlag => { - if (!obj?.__typename) throw new Error('__typename is missing in "isPermissionFlag"') - return PermissionFlag_possibleTypes.includes(obj.__typename) + const PermissionFlagGrant_possibleTypes: string[] = ['PermissionFlagGrant'] + export const isPermissionFlagGrant = (obj?: { __typename?: any } | null): obj is PermissionFlagGrant => { + if (!obj?.__typename) throw new Error('__typename is missing in "isPermissionFlagGrant"') + return PermissionFlagGrant_possibleTypes.includes(obj.__typename) } @@ -8960,7 +8960,7 @@ export const enumAllMetadataName = { pageLayoutTab: 'pageLayoutTab' as const, commandMenuItem: 'commandMenuItem' as const, navigationMenuItem: 'navigationMenuItem' as const, - permissionFlag: 'permissionFlag' as const, + permissionFlagGrant: 'permissionFlagGrant' as const, permissionFlagDefinition: 'permissionFlagDefinition' as const, objectPermission: 'objectPermission' as const, fieldPermission: 'fieldPermission' as const, diff --git a/packages/twenty-client-sdk/src/metadata/generated/types.ts b/packages/twenty-client-sdk/src/metadata/generated/types.ts index ddcc2e737b8..4a54655a3b1 100644 --- a/packages/twenty-client-sdk/src/metadata/generated/types.ts +++ b/packages/twenty-client-sdk/src/metadata/generated/types.ts @@ -351,7 +351,7 @@ export default { "deletedAt": [ 4 ], - "permissionFlags": [ + "permissionFlagGrants": [ 18 ], "objectPermissions": [ @@ -500,7 +500,7 @@ export default { 1 ] }, - "PermissionFlag": { + "PermissionFlagGrant": { "id": [ 3 ], @@ -586,7 +586,7 @@ export default { "canDestroyAllObjectRecords": [ 6 ], - "permissionFlags": [ + "permissionFlagGrants": [ 27 ], "objectPermissions": [ @@ -7667,12 +7667,12 @@ export default { ] } ], - "upsertPermissionFlags": [ + "upsertPermissionFlagGrants": [ 27, { - "upsertPermissionFlagsInput": [ + "upsertPermissionFlagGrantsInput": [ 414, - "UpsertPermissionFlagsInput!" + "UpsertPermissionFlagGrantsInput!" ] } ], @@ -10334,11 +10334,11 @@ export default { 1 ] }, - "UpsertPermissionFlagsInput": { + "UpsertPermissionFlagGrantsInput": { "roleId": [ 3 ], - "permissionFlagKeys": [ + "permissionFlagGrantKeys": [ 18 ], "__typename": [ diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index fa6e33a73f8..f6fdc922ce3 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -199,7 +199,7 @@ export enum AllMetadataName { pageLayout = 'pageLayout', pageLayoutTab = 'pageLayoutTab', pageLayoutWidget = 'pageLayoutWidget', - permissionFlag = 'permissionFlag', + permissionFlagGrant = 'permissionFlagGrant', permissionFlagDefinition = 'permissionFlagDefinition', role = 'role', roleTarget = 'roleTarget', @@ -2573,7 +2573,7 @@ export type Mutation = { upsertFieldPermissions: Array; upsertFieldsWidget: View; upsertObjectPermissions: Array; - upsertPermissionFlags: Array; + upsertPermissionFlagGrants: Array; upsertRowLevelPermissionPredicates: UpsertRowLevelPermissionPredicatesResult; upsertViewWidget: View; validateApprovedAccessDomain: ApprovedAccessDomain; @@ -3594,8 +3594,8 @@ export type MutationUpsertObjectPermissionsArgs = { }; -export type MutationUpsertPermissionFlagsArgs = { - upsertPermissionFlagsInput: UpsertPermissionFlagsInput; +export type MutationUpsertPermissionFlagGrantsArgs = { + upsertPermissionFlagGrantsInput: UpsertPermissionFlagGrantsInput; }; @@ -3967,8 +3967,8 @@ export type PathCommandMenuItemPayload = { path: Scalars['String']; }; -export type PermissionFlag = { - __typename?: 'PermissionFlag'; +export type PermissionFlagGrant = { + __typename?: 'PermissionFlagGrant'; flag: PermissionFlagType; id: Scalars['UUID']; roleId: Scalars['UUID']; @@ -4696,7 +4696,7 @@ export type Role = { isEditable: Scalars['Boolean']; label: Scalars['String']; objectPermissions?: Maybe>; - permissionFlags?: Maybe>; + permissionFlagGrants?: Maybe>; rowLevelPermissionPredicateGroups?: Maybe>; rowLevelPermissionPredicates?: Maybe>; universalIdentifier?: Maybe; @@ -5484,8 +5484,8 @@ export type UpsertObjectPermissionsInput = { roleId: Scalars['UUID']; }; -export type UpsertPermissionFlagsInput = { - permissionFlagKeys: Array; +export type UpsertPermissionFlagGrantsInput = { + permissionFlagGrantKeys: Array; roleId: Scalars['UUID']; }; @@ -5629,7 +5629,7 @@ export type UserWorkspace = { locale: Scalars['String']; objectPermissions?: Maybe>; objectsPermissions?: Maybe>; - permissionFlags?: Maybe>; + permissionFlagGrants?: Maybe>; twoFactorAuthenticationMethodSummary?: Maybe>; updatedAt: Scalars['DateTime']; user: User; @@ -7399,7 +7399,7 @@ export type FieldPermissionFragmentFragment = { __typename?: 'FieldPermission', export type ObjectPermissionFragmentFragment = { __typename?: 'ObjectPermission', objectMetadataId: string, canReadObjectRecords?: boolean | null, canUpdateObjectRecords?: boolean | null, canSoftDeleteObjectRecords?: boolean | null, canDestroyObjectRecords?: boolean | null, restrictedFields?: any | null, rowLevelPermissionPredicates?: Array<{ __typename?: 'RowLevelPermissionPredicate', id: string, fieldMetadataId: string, objectMetadataId: string, operand: RowLevelPermissionPredicateOperand, subFieldName?: string | null, workspaceMemberFieldMetadataId?: string | null, workspaceMemberSubFieldName?: string | null, rowLevelPermissionPredicateGroupId?: string | null, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, value?: any | null }> | null, rowLevelPermissionPredicateGroups?: Array<{ __typename?: 'RowLevelPermissionPredicateGroup', id: string, parentRowLevelPermissionPredicateGroupId?: string | null, logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, objectMetadataId: string }> | null }; -export type PermissionFlagFragmentFragment = { __typename?: 'PermissionFlag', id: string, flag: PermissionFlagType, roleId: string }; +export type PermissionFlagGrantFragmentFragment = { __typename?: 'PermissionFlagGrant', id: string, flag: PermissionFlagType, roleId: string }; export type RoleFragmentFragment = { __typename?: 'Role', id: string, label: string, description?: string | null, icon?: string | null, canUpdateAllSettings: boolean, canAccessAllTools: boolean, isEditable: boolean, canReadAllObjectRecords: boolean, canUpdateAllObjectRecords: boolean, canSoftDeleteAllObjectRecords: boolean, canDestroyAllObjectRecords: boolean, canBeAssignedToUsers: boolean, canBeAssignedToAgents: boolean, canBeAssignedToApiKeys: boolean }; @@ -7450,12 +7450,12 @@ export type UpsertObjectPermissionsMutationVariables = Exact<{ export type UpsertObjectPermissionsMutation = { __typename?: 'Mutation', upsertObjectPermissions: Array<{ __typename?: 'ObjectPermission', objectMetadataId: string, canReadObjectRecords?: boolean | null, canUpdateObjectRecords?: boolean | null, canSoftDeleteObjectRecords?: boolean | null, canDestroyObjectRecords?: boolean | null, restrictedFields?: any | null, rowLevelPermissionPredicates?: Array<{ __typename?: 'RowLevelPermissionPredicate', id: string, fieldMetadataId: string, objectMetadataId: string, operand: RowLevelPermissionPredicateOperand, subFieldName?: string | null, workspaceMemberFieldMetadataId?: string | null, workspaceMemberSubFieldName?: string | null, rowLevelPermissionPredicateGroupId?: string | null, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, value?: any | null }> | null, rowLevelPermissionPredicateGroups?: Array<{ __typename?: 'RowLevelPermissionPredicateGroup', id: string, parentRowLevelPermissionPredicateGroupId?: string | null, logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, objectMetadataId: string }> | null }> }; -export type UpsertPermissionFlagsMutationVariables = Exact<{ - upsertPermissionFlagsInput: UpsertPermissionFlagsInput; +export type UpsertPermissionFlagGrantsMutationVariables = Exact<{ + upsertPermissionFlagGrantsInput: UpsertPermissionFlagGrantsInput; }>; -export type UpsertPermissionFlagsMutation = { __typename?: 'Mutation', upsertPermissionFlags: Array<{ __typename?: 'PermissionFlag', id: string, flag: PermissionFlagType, roleId: string }> }; +export type UpsertPermissionFlagGrantsMutation = { __typename?: 'Mutation', upsertPermissionFlagGrants: Array<{ __typename?: 'PermissionFlagGrant', id: string, flag: PermissionFlagType, roleId: string }> }; export type UpsertRowLevelPermissionPredicatesMutationVariables = Exact<{ input: UpsertRowLevelPermissionPredicatesInput; @@ -7467,7 +7467,7 @@ export type UpsertRowLevelPermissionPredicatesMutation = { __typename?: 'Mutatio export type GetRolesQueryVariables = Exact<{ [key: string]: never; }>; -export type GetRolesQuery = { __typename?: 'Query', getRoles: Array<{ __typename?: 'Role', id: string, label: string, description?: string | null, icon?: string | null, canUpdateAllSettings: boolean, canAccessAllTools: boolean, isEditable: boolean, canReadAllObjectRecords: boolean, canUpdateAllObjectRecords: boolean, canSoftDeleteAllObjectRecords: boolean, canDestroyAllObjectRecords: boolean, canBeAssignedToUsers: boolean, canBeAssignedToAgents: boolean, canBeAssignedToApiKeys: boolean, workspaceMembers: Array<{ __typename?: 'WorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, userWorkspaceId?: string | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }>, 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 }>, apiKeys: Array<{ __typename?: 'ApiKeyForRole', id: string, name: string, expiresAt: string, revokedAt?: string | null }>, permissionFlags?: Array<{ __typename?: 'PermissionFlag', id: string, flag: PermissionFlagType, roleId: string }> | null, objectPermissions?: Array<{ __typename?: 'ObjectPermission', objectMetadataId: string, canReadObjectRecords?: boolean | null, canUpdateObjectRecords?: boolean | null, canSoftDeleteObjectRecords?: boolean | null, canDestroyObjectRecords?: boolean | null, restrictedFields?: any | null, rowLevelPermissionPredicates?: Array<{ __typename?: 'RowLevelPermissionPredicate', id: string, fieldMetadataId: string, objectMetadataId: string, operand: RowLevelPermissionPredicateOperand, subFieldName?: string | null, workspaceMemberFieldMetadataId?: string | null, workspaceMemberSubFieldName?: string | null, rowLevelPermissionPredicateGroupId?: string | null, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, value?: any | null }> | null, rowLevelPermissionPredicateGroups?: Array<{ __typename?: 'RowLevelPermissionPredicateGroup', id: string, parentRowLevelPermissionPredicateGroupId?: string | null, logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, objectMetadataId: string }> | null }> | null, fieldPermissions?: Array<{ __typename?: 'FieldPermission', objectMetadataId: string, fieldMetadataId: string, canReadFieldValue?: boolean | null, canUpdateFieldValue?: boolean | null, id: string, roleId: string }> | null, rowLevelPermissionPredicates?: Array<{ __typename?: 'RowLevelPermissionPredicate', id: string, fieldMetadataId: string, objectMetadataId: string, operand: RowLevelPermissionPredicateOperand, subFieldName?: string | null, workspaceMemberFieldMetadataId?: string | null, workspaceMemberSubFieldName?: string | null, rowLevelPermissionPredicateGroupId?: string | null, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, value?: any | null }> | null, rowLevelPermissionPredicateGroups?: Array<{ __typename?: 'RowLevelPermissionPredicateGroup', id: string, parentRowLevelPermissionPredicateGroupId?: string | null, logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, objectMetadataId: string }> | null }> }; +export type GetRolesQuery = { __typename?: 'Query', getRoles: Array<{ __typename?: 'Role', id: string, label: string, description?: string | null, icon?: string | null, canUpdateAllSettings: boolean, canAccessAllTools: boolean, isEditable: boolean, canReadAllObjectRecords: boolean, canUpdateAllObjectRecords: boolean, canSoftDeleteAllObjectRecords: boolean, canDestroyAllObjectRecords: boolean, canBeAssignedToUsers: boolean, canBeAssignedToAgents: boolean, canBeAssignedToApiKeys: boolean, workspaceMembers: Array<{ __typename?: 'WorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, userWorkspaceId?: string | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }>, 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 }>, apiKeys: Array<{ __typename?: 'ApiKeyForRole', id: string, name: string, expiresAt: string, revokedAt?: string | null }>, permissionFlagGrants?: Array<{ __typename?: 'PermissionFlagGrant', id: string, flag: PermissionFlagType, roleId: string }> | null, objectPermissions?: Array<{ __typename?: 'ObjectPermission', objectMetadataId: string, canReadObjectRecords?: boolean | null, canUpdateObjectRecords?: boolean | null, canSoftDeleteObjectRecords?: boolean | null, canDestroyObjectRecords?: boolean | null, restrictedFields?: any | null, rowLevelPermissionPredicates?: Array<{ __typename?: 'RowLevelPermissionPredicate', id: string, fieldMetadataId: string, objectMetadataId: string, operand: RowLevelPermissionPredicateOperand, subFieldName?: string | null, workspaceMemberFieldMetadataId?: string | null, workspaceMemberSubFieldName?: string | null, rowLevelPermissionPredicateGroupId?: string | null, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, value?: any | null }> | null, rowLevelPermissionPredicateGroups?: Array<{ __typename?: 'RowLevelPermissionPredicateGroup', id: string, parentRowLevelPermissionPredicateGroupId?: string | null, logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, objectMetadataId: string }> | null }> | null, fieldPermissions?: Array<{ __typename?: 'FieldPermission', objectMetadataId: string, fieldMetadataId: string, canReadFieldValue?: boolean | null, canUpdateFieldValue?: boolean | null, id: string, roleId: string }> | null, rowLevelPermissionPredicates?: Array<{ __typename?: 'RowLevelPermissionPredicate', id: string, fieldMetadataId: string, objectMetadataId: string, operand: RowLevelPermissionPredicateOperand, subFieldName?: string | null, workspaceMemberFieldMetadataId?: string | null, workspaceMemberSubFieldName?: string | null, rowLevelPermissionPredicateGroupId?: string | null, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, value?: any | null }> | null, rowLevelPermissionPredicateGroups?: Array<{ __typename?: 'RowLevelPermissionPredicateGroup', id: string, parentRowLevelPermissionPredicateGroupId?: string | null, logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, objectMetadataId: string }> | null }> }; export type CreateApprovedAccessDomainMutationVariables = Exact<{ input: CreateApprovedAccessDomainInput; @@ -7546,7 +7546,7 @@ export type BillingSubscriptionFragmentFragment = { __typename?: 'BillingSubscri export type CurrentBillingSubscriptionFragmentFragment = { __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, interval?: SubscriptionInterval | null, metadata: any, currentPeriodEnd?: string | null, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }>, billingSubscriptionItems?: Array<{ __typename?: 'BillingSubscriptionItem', id: string, hasReachedCurrentPeriodCap: boolean, quantity?: number | null, stripePriceId: string, billingProduct: { __typename?: 'BillingLicensedProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } | { __typename?: 'BillingMeteredProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } }> | null }; -export type UserQueryFragmentFragment = { __typename?: 'User', id: string, firstName: string, lastName: string, email: string, hasPassword: boolean, canAccessFullAdminPanel: boolean, canImpersonate: boolean, supportUserHash?: string | null, onboardingStatus?: OnboardingStatus | null, userVars?: any | null, workspaceMember?: { __typename?: 'WorkspaceMember', id: string, colorScheme: string, avatarUrl?: string | null, locale?: string | null, userEmail: string, userWorkspaceId?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, calendarStartDay?: number | null, numberFormat?: WorkspaceMemberNumberFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, userWorkspaceId?: string | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, deletedWorkspaceMembers?: Array<{ __typename?: 'DeletedWorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, currentUserWorkspace?: { __typename?: 'UserWorkspace', id: string, permissionFlags?: Array | null, objectsPermissions?: Array<{ __typename?: 'ObjectPermission', objectMetadataId: string, canReadObjectRecords?: boolean | null, canUpdateObjectRecords?: boolean | null, canSoftDeleteObjectRecords?: boolean | null, canDestroyObjectRecords?: boolean | null, restrictedFields?: any | null, rowLevelPermissionPredicates?: Array<{ __typename?: 'RowLevelPermissionPredicate', id: string, fieldMetadataId: string, objectMetadataId: string, operand: RowLevelPermissionPredicateOperand, subFieldName?: string | null, workspaceMemberFieldMetadataId?: string | null, workspaceMemberSubFieldName?: string | null, rowLevelPermissionPredicateGroupId?: string | null, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, value?: any | null }> | null, rowLevelPermissionPredicateGroups?: Array<{ __typename?: 'RowLevelPermissionPredicateGroup', id: string, parentRowLevelPermissionPredicateGroupId?: string | null, logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, objectMetadataId: string }> | null }> | null, twoFactorAuthenticationMethodSummary?: Array<{ __typename?: 'TwoFactorAuthenticationMethodSummary', twoFactorAuthenticationMethodId: string, status: string, strategy: string }> | null } | null, currentWorkspace?: { __typename?: 'Workspace', id: string, displayName?: string | null, logo?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, isGoogleAuthEnabled: boolean, isMicrosoftAuthEnabled: boolean, isPasswordAuthEnabled: boolean, isGoogleAuthBypassEnabled: boolean, isMicrosoftAuthBypassEnabled: boolean, isPasswordAuthBypassEnabled: boolean, subdomain: string, customDomain?: string | null, hasValidEnterpriseKey: boolean, hasValidSignedEnterpriseKey: boolean, hasValidEnterpriseValidityToken: boolean, isCustomDomainEnabled: boolean, metadataVersion: number, workspaceMembersCount?: number | null, fastModel: string, smartModel: string, aiAdditionalInstructions?: string | null, enabledAiModelIds?: Array | null, useRecommendedModels: boolean, isTwoFactorAuthenticationEnforced: boolean, trashRetentionDays: number, eventLogRetentionDays: number, editableProfileFields?: Array | null, workspaceCustomApplication?: { __typename?: 'Application', id: string } | null, installedApplications: Array<{ __typename?: 'Application', id: string, name: string, universalIdentifier: string, logo?: string | null }>, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, featureFlags?: Array<{ __typename?: 'FeatureFlag', key: FeatureFlagKey, value: boolean }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, interval?: SubscriptionInterval | null, metadata: any, currentPeriodEnd?: string | null, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }>, billingSubscriptionItems?: Array<{ __typename?: 'BillingSubscriptionItem', id: string, hasReachedCurrentPeriodCap: boolean, quantity?: number | null, stripePriceId: string, billingProduct: { __typename?: 'BillingLicensedProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } | { __typename?: 'BillingMeteredProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } }> | null } | null, billingSubscriptions: Array<{ __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, metadata: any, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }> }>, billingEntitlements: Array<{ __typename?: 'BillingEntitlement', key: BillingEntitlementKey, value: boolean }>, defaultRole?: { __typename?: 'Role', id: string, label: string, description?: string | null, icon?: string | null, canUpdateAllSettings: boolean, canAccessAllTools: boolean, isEditable: boolean, canReadAllObjectRecords: boolean, canUpdateAllObjectRecords: boolean, canSoftDeleteAllObjectRecords: boolean, canDestroyAllObjectRecords: boolean, canBeAssignedToUsers: boolean, canBeAssignedToAgents: boolean, canBeAssignedToApiKeys: boolean } | null } | null, availableWorkspaces: { __typename?: 'AvailableWorkspaces', availableWorkspacesForSignIn: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }>, availableWorkspacesForSignUp: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }> } }; +export type UserQueryFragmentFragment = { __typename?: 'User', id: string, firstName: string, lastName: string, email: string, hasPassword: boolean, canAccessFullAdminPanel: boolean, canImpersonate: boolean, supportUserHash?: string | null, onboardingStatus?: OnboardingStatus | null, userVars?: any | null, workspaceMember?: { __typename?: 'WorkspaceMember', id: string, colorScheme: string, avatarUrl?: string | null, locale?: string | null, userEmail: string, userWorkspaceId?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, calendarStartDay?: number | null, numberFormat?: WorkspaceMemberNumberFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, userWorkspaceId?: string | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, deletedWorkspaceMembers?: Array<{ __typename?: 'DeletedWorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, currentUserWorkspace?: { __typename?: 'UserWorkspace', id: string, permissionFlagGrants?: Array | null, objectsPermissions?: Array<{ __typename?: 'ObjectPermission', objectMetadataId: string, canReadObjectRecords?: boolean | null, canUpdateObjectRecords?: boolean | null, canSoftDeleteObjectRecords?: boolean | null, canDestroyObjectRecords?: boolean | null, restrictedFields?: any | null, rowLevelPermissionPredicates?: Array<{ __typename?: 'RowLevelPermissionPredicate', id: string, fieldMetadataId: string, objectMetadataId: string, operand: RowLevelPermissionPredicateOperand, subFieldName?: string | null, workspaceMemberFieldMetadataId?: string | null, workspaceMemberSubFieldName?: string | null, rowLevelPermissionPredicateGroupId?: string | null, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, value?: any | null }> | null, rowLevelPermissionPredicateGroups?: Array<{ __typename?: 'RowLevelPermissionPredicateGroup', id: string, parentRowLevelPermissionPredicateGroupId?: string | null, logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, objectMetadataId: string }> | null }> | null, twoFactorAuthenticationMethodSummary?: Array<{ __typename?: 'TwoFactorAuthenticationMethodSummary', twoFactorAuthenticationMethodId: string, status: string, strategy: string }> | null } | null, currentWorkspace?: { __typename?: 'Workspace', id: string, displayName?: string | null, logo?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, isGoogleAuthEnabled: boolean, isMicrosoftAuthEnabled: boolean, isPasswordAuthEnabled: boolean, isGoogleAuthBypassEnabled: boolean, isMicrosoftAuthBypassEnabled: boolean, isPasswordAuthBypassEnabled: boolean, subdomain: string, customDomain?: string | null, hasValidEnterpriseKey: boolean, hasValidSignedEnterpriseKey: boolean, hasValidEnterpriseValidityToken: boolean, isCustomDomainEnabled: boolean, metadataVersion: number, workspaceMembersCount?: number | null, fastModel: string, smartModel: string, aiAdditionalInstructions?: string | null, enabledAiModelIds?: Array | null, useRecommendedModels: boolean, isTwoFactorAuthenticationEnforced: boolean, trashRetentionDays: number, eventLogRetentionDays: number, editableProfileFields?: Array | null, workspaceCustomApplication?: { __typename?: 'Application', id: string } | null, installedApplications: Array<{ __typename?: 'Application', id: string, name: string, universalIdentifier: string, logo?: string | null }>, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, featureFlags?: Array<{ __typename?: 'FeatureFlag', key: FeatureFlagKey, value: boolean }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, interval?: SubscriptionInterval | null, metadata: any, currentPeriodEnd?: string | null, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }>, billingSubscriptionItems?: Array<{ __typename?: 'BillingSubscriptionItem', id: string, hasReachedCurrentPeriodCap: boolean, quantity?: number | null, stripePriceId: string, billingProduct: { __typename?: 'BillingLicensedProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } | { __typename?: 'BillingMeteredProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } }> | null } | null, billingSubscriptions: Array<{ __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, metadata: any, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }> }>, billingEntitlements: Array<{ __typename?: 'BillingEntitlement', key: BillingEntitlementKey, value: boolean }>, defaultRole?: { __typename?: 'Role', id: string, label: string, description?: string | null, icon?: string | null, canUpdateAllSettings: boolean, canAccessAllTools: boolean, isEditable: boolean, canReadAllObjectRecords: boolean, canUpdateAllObjectRecords: boolean, canSoftDeleteAllObjectRecords: boolean, canDestroyAllObjectRecords: boolean, canBeAssignedToUsers: boolean, canBeAssignedToAgents: boolean, canBeAssignedToApiKeys: boolean } | null } | null, availableWorkspaces: { __typename?: 'AvailableWorkspaces', availableWorkspacesForSignIn: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }>, availableWorkspacesForSignUp: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }> } }; export type WorkspaceUrlsFragmentFragment = { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }; @@ -7565,7 +7565,7 @@ export type DeleteUserWorkspaceMutation = { __typename?: 'Mutation', deleteUserF export type GetCurrentUserQueryVariables = Exact<{ [key: string]: never; }>; -export type GetCurrentUserQuery = { __typename?: 'Query', currentUser: { __typename?: 'User', id: string, firstName: string, lastName: string, email: string, hasPassword: boolean, canAccessFullAdminPanel: boolean, canImpersonate: boolean, supportUserHash?: string | null, onboardingStatus?: OnboardingStatus | null, userVars?: any | null, workspaceMember?: { __typename?: 'WorkspaceMember', id: string, colorScheme: string, avatarUrl?: string | null, locale?: string | null, userEmail: string, userWorkspaceId?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, calendarStartDay?: number | null, numberFormat?: WorkspaceMemberNumberFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, userWorkspaceId?: string | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, deletedWorkspaceMembers?: Array<{ __typename?: 'DeletedWorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, currentUserWorkspace?: { __typename?: 'UserWorkspace', id: string, permissionFlags?: Array | null, objectsPermissions?: Array<{ __typename?: 'ObjectPermission', objectMetadataId: string, canReadObjectRecords?: boolean | null, canUpdateObjectRecords?: boolean | null, canSoftDeleteObjectRecords?: boolean | null, canDestroyObjectRecords?: boolean | null, restrictedFields?: any | null, rowLevelPermissionPredicates?: Array<{ __typename?: 'RowLevelPermissionPredicate', id: string, fieldMetadataId: string, objectMetadataId: string, operand: RowLevelPermissionPredicateOperand, subFieldName?: string | null, workspaceMemberFieldMetadataId?: string | null, workspaceMemberSubFieldName?: string | null, rowLevelPermissionPredicateGroupId?: string | null, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, value?: any | null }> | null, rowLevelPermissionPredicateGroups?: Array<{ __typename?: 'RowLevelPermissionPredicateGroup', id: string, parentRowLevelPermissionPredicateGroupId?: string | null, logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, objectMetadataId: string }> | null }> | null, twoFactorAuthenticationMethodSummary?: Array<{ __typename?: 'TwoFactorAuthenticationMethodSummary', twoFactorAuthenticationMethodId: string, status: string, strategy: string }> | null } | null, currentWorkspace?: { __typename?: 'Workspace', id: string, displayName?: string | null, logo?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, isGoogleAuthEnabled: boolean, isMicrosoftAuthEnabled: boolean, isPasswordAuthEnabled: boolean, isGoogleAuthBypassEnabled: boolean, isMicrosoftAuthBypassEnabled: boolean, isPasswordAuthBypassEnabled: boolean, subdomain: string, customDomain?: string | null, hasValidEnterpriseKey: boolean, hasValidSignedEnterpriseKey: boolean, hasValidEnterpriseValidityToken: boolean, isCustomDomainEnabled: boolean, metadataVersion: number, workspaceMembersCount?: number | null, fastModel: string, smartModel: string, aiAdditionalInstructions?: string | null, enabledAiModelIds?: Array | null, useRecommendedModels: boolean, isTwoFactorAuthenticationEnforced: boolean, trashRetentionDays: number, eventLogRetentionDays: number, editableProfileFields?: Array | null, workspaceCustomApplication?: { __typename?: 'Application', id: string } | null, installedApplications: Array<{ __typename?: 'Application', id: string, name: string, universalIdentifier: string, logo?: string | null }>, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, featureFlags?: Array<{ __typename?: 'FeatureFlag', key: FeatureFlagKey, value: boolean }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, interval?: SubscriptionInterval | null, metadata: any, currentPeriodEnd?: string | null, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }>, billingSubscriptionItems?: Array<{ __typename?: 'BillingSubscriptionItem', id: string, hasReachedCurrentPeriodCap: boolean, quantity?: number | null, stripePriceId: string, billingProduct: { __typename?: 'BillingLicensedProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } | { __typename?: 'BillingMeteredProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } }> | null } | null, billingSubscriptions: Array<{ __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, metadata: any, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }> }>, billingEntitlements: Array<{ __typename?: 'BillingEntitlement', key: BillingEntitlementKey, value: boolean }>, defaultRole?: { __typename?: 'Role', id: string, label: string, description?: string | null, icon?: string | null, canUpdateAllSettings: boolean, canAccessAllTools: boolean, isEditable: boolean, canReadAllObjectRecords: boolean, canUpdateAllObjectRecords: boolean, canSoftDeleteAllObjectRecords: boolean, canDestroyAllObjectRecords: boolean, canBeAssignedToUsers: boolean, canBeAssignedToAgents: boolean, canBeAssignedToApiKeys: boolean } | null } | null, availableWorkspaces: { __typename?: 'AvailableWorkspaces', availableWorkspacesForSignIn: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }>, availableWorkspacesForSignUp: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }> } } }; +export type GetCurrentUserQuery = { __typename?: 'Query', currentUser: { __typename?: 'User', id: string, firstName: string, lastName: string, email: string, hasPassword: boolean, canAccessFullAdminPanel: boolean, canImpersonate: boolean, supportUserHash?: string | null, onboardingStatus?: OnboardingStatus | null, userVars?: any | null, workspaceMember?: { __typename?: 'WorkspaceMember', id: string, colorScheme: string, avatarUrl?: string | null, locale?: string | null, userEmail: string, userWorkspaceId?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, calendarStartDay?: number | null, numberFormat?: WorkspaceMemberNumberFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, userWorkspaceId?: string | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, deletedWorkspaceMembers?: Array<{ __typename?: 'DeletedWorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, currentUserWorkspace?: { __typename?: 'UserWorkspace', id: string, permissionFlagGrants?: Array | null, objectsPermissions?: Array<{ __typename?: 'ObjectPermission', objectMetadataId: string, canReadObjectRecords?: boolean | null, canUpdateObjectRecords?: boolean | null, canSoftDeleteObjectRecords?: boolean | null, canDestroyObjectRecords?: boolean | null, restrictedFields?: any | null, rowLevelPermissionPredicates?: Array<{ __typename?: 'RowLevelPermissionPredicate', id: string, fieldMetadataId: string, objectMetadataId: string, operand: RowLevelPermissionPredicateOperand, subFieldName?: string | null, workspaceMemberFieldMetadataId?: string | null, workspaceMemberSubFieldName?: string | null, rowLevelPermissionPredicateGroupId?: string | null, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, value?: any | null }> | null, rowLevelPermissionPredicateGroups?: Array<{ __typename?: 'RowLevelPermissionPredicateGroup', id: string, parentRowLevelPermissionPredicateGroupId?: string | null, logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator, positionInRowLevelPermissionPredicateGroup?: number | null, roleId: string, objectMetadataId: string }> | null }> | null, twoFactorAuthenticationMethodSummary?: Array<{ __typename?: 'TwoFactorAuthenticationMethodSummary', twoFactorAuthenticationMethodId: string, status: string, strategy: string }> | null } | null, currentWorkspace?: { __typename?: 'Workspace', id: string, displayName?: string | null, logo?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, isGoogleAuthEnabled: boolean, isMicrosoftAuthEnabled: boolean, isPasswordAuthEnabled: boolean, isGoogleAuthBypassEnabled: boolean, isMicrosoftAuthBypassEnabled: boolean, isPasswordAuthBypassEnabled: boolean, subdomain: string, customDomain?: string | null, hasValidEnterpriseKey: boolean, hasValidSignedEnterpriseKey: boolean, hasValidEnterpriseValidityToken: boolean, isCustomDomainEnabled: boolean, metadataVersion: number, workspaceMembersCount?: number | null, fastModel: string, smartModel: string, aiAdditionalInstructions?: string | null, enabledAiModelIds?: Array | null, useRecommendedModels: boolean, isTwoFactorAuthenticationEnforced: boolean, trashRetentionDays: number, eventLogRetentionDays: number, editableProfileFields?: Array | null, workspaceCustomApplication?: { __typename?: 'Application', id: string } | null, installedApplications: Array<{ __typename?: 'Application', id: string, name: string, universalIdentifier: string, logo?: string | null }>, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, featureFlags?: Array<{ __typename?: 'FeatureFlag', key: FeatureFlagKey, value: boolean }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, interval?: SubscriptionInterval | null, metadata: any, currentPeriodEnd?: string | null, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }>, billingSubscriptionItems?: Array<{ __typename?: 'BillingSubscriptionItem', id: string, hasReachedCurrentPeriodCap: boolean, quantity?: number | null, stripePriceId: string, billingProduct: { __typename?: 'BillingLicensedProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } | { __typename?: 'BillingMeteredProduct', name: string, description: string, images?: Array | null, metadata: { __typename?: 'BillingProductMetadata', productKey: BillingProductKey, planKey: BillingPlanKey, priceUsageBased: BillingUsageType } } }> | null } | null, billingSubscriptions: Array<{ __typename?: 'BillingSubscription', id: string, status: SubscriptionStatus, metadata: any, phases: Array<{ __typename?: 'BillingSubscriptionSchedulePhase', start_date: number, end_date: number, items: Array<{ __typename?: 'BillingSubscriptionSchedulePhaseItem', price: string, quantity?: number | null }> }> }>, billingEntitlements: Array<{ __typename?: 'BillingEntitlement', key: BillingEntitlementKey, value: boolean }>, defaultRole?: { __typename?: 'Role', id: string, label: string, description?: string | null, icon?: string | null, canUpdateAllSettings: boolean, canAccessAllTools: boolean, isEditable: boolean, canReadAllObjectRecords: boolean, canUpdateAllObjectRecords: boolean, canSoftDeleteAllObjectRecords: boolean, canDestroyAllObjectRecords: boolean, canBeAssignedToUsers: boolean, canBeAssignedToAgents: boolean, canBeAssignedToApiKeys: boolean } | null } | null, availableWorkspaces: { __typename?: 'AvailableWorkspaces', availableWorkspacesForSignIn: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }>, availableWorkspacesForSignUp: Array<{ __typename?: 'AvailableWorkspace', id: string, displayName?: string | null, loginToken?: string | null, inviteHash?: string | null, personalInviteToken?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }> } } }; export type ViewFieldFragmentFragment = { __typename?: 'ViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, viewFieldGroupId?: string | null, isActive: boolean, createdAt: string, updatedAt: string, deletedAt?: string | null }; @@ -8013,7 +8013,7 @@ export const ApiKeyFragmentFragmentDoc = {"kind":"Document","definitions":[{"kin export const WebhookFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WebhookFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Webhook"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"targetUrl"}},{"kind":"Field","name":{"kind":"Name","value":"operations"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"secret"}}]}}]} as unknown as DocumentNode; export const ApiKeyForRoleFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApiKeyForRoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ApiKeyForRole"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"expiresAt"}},{"kind":"Field","name":{"kind":"Name","value":"revokedAt"}}]}}]} as unknown as DocumentNode; export const FieldPermissionFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FieldPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FieldPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadFieldValue"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateFieldValue"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}}]}}]} as unknown as DocumentNode; -export const PermissionFlagFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PermissionFlagFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PermissionFlag"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"flag"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}}]}}]} as unknown as DocumentNode; +export const PermissionFlagGrantFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PermissionFlagGrantFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PermissionFlagGrant"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"flag"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}}]}}]} as unknown as DocumentNode; export const WorkspaceMemberQueryFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"colorScheme"}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"timeZone"}},{"kind":"Field","name":{"kind":"Name","value":"dateFormat"}},{"kind":"Field","name":{"kind":"Name","value":"timeFormat"}},{"kind":"Field","name":{"kind":"Name","value":"calendarStartDay"}},{"kind":"Field","name":{"kind":"Name","value":"numberFormat"}}]}}]} as unknown as DocumentNode; export const PartialWorkspaceMemberQueryFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}}]}}]} as unknown as DocumentNode; export const DeletedWorkspaceMemberQueryFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"DeletedWorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}}]}}]} as unknown as DocumentNode; @@ -8028,7 +8028,7 @@ export const BillingSubscriptionFragmentFragmentDoc = {"kind":"Document","defini export const RoleFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Role"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllSettings"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessAllTools"}},{"kind":"Field","name":{"kind":"Name","value":"isEditable"}},{"kind":"Field","name":{"kind":"Name","value":"canReadAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToUsers"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToAgents"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToApiKeys"}}]}}]} as unknown as DocumentNode; export const AvailableWorkspaceFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspaceFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspace"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"loginToken"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"personalInviteToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"sso"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]} as unknown as DocumentNode; export const AvailableWorkspacesFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspacesFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspaces"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignIn"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignUp"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspaceFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspace"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"loginToken"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"personalInviteToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"sso"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]} as unknown as DocumentNode; -export const UserQueryFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"UserQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"User"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"hasPassword"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessFullAdminPanel"}},{"kind":"Field","name":{"kind":"Name","value":"canImpersonate"}},{"kind":"Field","name":{"kind":"Name","value":"supportUserHash"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingStatus"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMember"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"deletedWorkspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentUserWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"permissionFlags"}},{"kind":"Field","name":{"kind":"Name","value":"objectsPermissions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectPermissionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodSummary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodId"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"strategy"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"allowImpersonation"}},{"kind":"Field","name":{"kind":"Name","value":"activationStatus"}},{"kind":"Field","name":{"kind":"Name","value":"isPublicInviteLinkEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"subdomain"}},{"kind":"Field","name":{"kind":"Name","value":"customDomain"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidSignedEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseValidityToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceCustomApplication"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"installedApplications"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}}]}},{"kind":"Field","name":{"kind":"Name","value":"isCustomDomainEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceUrlsFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"featureFlags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"metadataVersion"}},{"kind":"Field","name":{"kind":"Name","value":"currentBillingSubscription"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingEntitlements"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembersCount"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRole"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RoleFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fastModel"}},{"kind":"Field","name":{"kind":"Name","value":"smartModel"}},{"kind":"Field","name":{"kind":"Name","value":"aiAdditionalInstructions"}},{"kind":"Field","name":{"kind":"Name","value":"enabledAiModelIds"}},{"kind":"Field","name":{"kind":"Name","value":"useRecommendedModels"}},{"kind":"Field","name":{"kind":"Name","value":"isTwoFactorAuthenticationEnforced"}},{"kind":"Field","name":{"kind":"Name","value":"trashRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"eventLogRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"editableProfileFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspaces"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspacesFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"userVars"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicate"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"operand"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberSubFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"parentRowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"logicalOperator"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhase"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"start_date"}},{"kind":"Field","name":{"kind":"Name","value":"end_date"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspaceFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspace"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"loginToken"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"personalInviteToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"sso"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"colorScheme"}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"timeZone"}},{"kind":"Field","name":{"kind":"Name","value":"dateFormat"}},{"kind":"Field","name":{"kind":"Name","value":"timeFormat"}},{"kind":"Field","name":{"kind":"Name","value":"calendarStartDay"}},{"kind":"Field","name":{"kind":"Name","value":"numberFormat"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"DeletedWorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ObjectPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"restrictedFields"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicates"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroups"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceUrlsFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceUrls"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"interval"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"currentPeriodEnd"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptionItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"hasReachedCurrentPeriodCap"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}},{"kind":"Field","name":{"kind":"Name","value":"stripePriceId"}},{"kind":"Field","name":{"kind":"Name","value":"billingProduct"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"images"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"productKey"}},{"kind":"Field","name":{"kind":"Name","value":"planKey"}},{"kind":"Field","name":{"kind":"Name","value":"priceUsageBased"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Role"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllSettings"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessAllTools"}},{"kind":"Field","name":{"kind":"Name","value":"isEditable"}},{"kind":"Field","name":{"kind":"Name","value":"canReadAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToUsers"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToAgents"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToApiKeys"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspacesFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspaces"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignIn"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignUp"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}}]}}]} as unknown as DocumentNode; +export const UserQueryFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"UserQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"User"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"hasPassword"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessFullAdminPanel"}},{"kind":"Field","name":{"kind":"Name","value":"canImpersonate"}},{"kind":"Field","name":{"kind":"Name","value":"supportUserHash"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingStatus"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMember"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"deletedWorkspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentUserWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"permissionFlagGrants"}},{"kind":"Field","name":{"kind":"Name","value":"objectsPermissions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectPermissionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodSummary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodId"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"strategy"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"allowImpersonation"}},{"kind":"Field","name":{"kind":"Name","value":"activationStatus"}},{"kind":"Field","name":{"kind":"Name","value":"isPublicInviteLinkEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"subdomain"}},{"kind":"Field","name":{"kind":"Name","value":"customDomain"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidSignedEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseValidityToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceCustomApplication"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"installedApplications"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}}]}},{"kind":"Field","name":{"kind":"Name","value":"isCustomDomainEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceUrlsFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"featureFlags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"metadataVersion"}},{"kind":"Field","name":{"kind":"Name","value":"currentBillingSubscription"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingEntitlements"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembersCount"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRole"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RoleFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fastModel"}},{"kind":"Field","name":{"kind":"Name","value":"smartModel"}},{"kind":"Field","name":{"kind":"Name","value":"aiAdditionalInstructions"}},{"kind":"Field","name":{"kind":"Name","value":"enabledAiModelIds"}},{"kind":"Field","name":{"kind":"Name","value":"useRecommendedModels"}},{"kind":"Field","name":{"kind":"Name","value":"isTwoFactorAuthenticationEnforced"}},{"kind":"Field","name":{"kind":"Name","value":"trashRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"eventLogRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"editableProfileFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspaces"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspacesFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"userVars"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicate"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"operand"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberSubFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"parentRowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"logicalOperator"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhase"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"start_date"}},{"kind":"Field","name":{"kind":"Name","value":"end_date"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspaceFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspace"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"loginToken"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"personalInviteToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"sso"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"colorScheme"}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"timeZone"}},{"kind":"Field","name":{"kind":"Name","value":"dateFormat"}},{"kind":"Field","name":{"kind":"Name","value":"timeFormat"}},{"kind":"Field","name":{"kind":"Name","value":"calendarStartDay"}},{"kind":"Field","name":{"kind":"Name","value":"numberFormat"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"DeletedWorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ObjectPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"restrictedFields"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicates"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroups"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceUrlsFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceUrls"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"interval"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"currentPeriodEnd"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptionItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"hasReachedCurrentPeriodCap"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}},{"kind":"Field","name":{"kind":"Name","value":"stripePriceId"}},{"kind":"Field","name":{"kind":"Name","value":"billingProduct"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"images"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"productKey"}},{"kind":"Field","name":{"kind":"Name","value":"planKey"}},{"kind":"Field","name":{"kind":"Name","value":"priceUsageBased"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Role"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllSettings"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessAllTools"}},{"kind":"Field","name":{"kind":"Name","value":"isEditable"}},{"kind":"Field","name":{"kind":"Name","value":"canReadAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToUsers"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToAgents"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToApiKeys"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspacesFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspaces"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignIn"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignUp"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}}]}}]} as unknown as DocumentNode; export const ViewFieldFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewFieldFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewField"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"isVisible"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"size"}},{"kind":"Field","name":{"kind":"Name","value":"aggregateOperation"}},{"kind":"Field","name":{"kind":"Name","value":"viewFieldGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}}]}}]} as unknown as DocumentNode; export const ViewFieldGroupFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewFieldGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewFieldGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"isVisible"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}},{"kind":"Field","name":{"kind":"Name","value":"viewFields"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ViewFieldFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewFieldFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewField"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"isVisible"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"size"}},{"kind":"Field","name":{"kind":"Name","value":"aggregateOperation"}},{"kind":"Field","name":{"kind":"Name","value":"viewFieldGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}}]}}]} as unknown as DocumentNode; export const ViewFilterFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewFilterFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewFilter"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"operand"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"viewFilterGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"positionInViewFilterGroup"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}}]}}]} as unknown as DocumentNode; @@ -8221,9 +8221,9 @@ export const UpdateOneRoleDocument = {"kind":"Document","definitions":[{"kind":" export const UpdateWorkspaceMemberRoleDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateWorkspaceMemberRole"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workspaceMemberId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"roleId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateWorkspaceMemberRole"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"workspaceMemberId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workspaceMemberId"}}},{"kind":"Argument","name":{"kind":"Name","value":"roleId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"roleId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"}},{"kind":"Field","name":{"kind":"Name","value":"roles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RoleFragment"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"colorScheme"}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"timeZone"}},{"kind":"Field","name":{"kind":"Name","value":"dateFormat"}},{"kind":"Field","name":{"kind":"Name","value":"timeFormat"}},{"kind":"Field","name":{"kind":"Name","value":"calendarStartDay"}},{"kind":"Field","name":{"kind":"Name","value":"numberFormat"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Role"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllSettings"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessAllTools"}},{"kind":"Field","name":{"kind":"Name","value":"isEditable"}},{"kind":"Field","name":{"kind":"Name","value":"canReadAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToUsers"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToAgents"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToApiKeys"}}]}}]} as unknown as DocumentNode; export const UpsertFieldPermissionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpsertFieldPermissions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"upsertFieldPermissionsInput"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpsertFieldPermissionsInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"upsertFieldPermissions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"upsertFieldPermissionsInput"},"value":{"kind":"Variable","name":{"kind":"Name","value":"upsertFieldPermissionsInput"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FieldPermissionFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FieldPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FieldPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadFieldValue"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateFieldValue"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}}]}}]} as unknown as DocumentNode; export const UpsertObjectPermissionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpsertObjectPermissions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"upsertObjectPermissionsInput"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpsertObjectPermissionsInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"upsertObjectPermissions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"upsertObjectPermissionsInput"},"value":{"kind":"Variable","name":{"kind":"Name","value":"upsertObjectPermissionsInput"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectPermissionFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicate"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"operand"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberSubFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"parentRowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"logicalOperator"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ObjectPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"restrictedFields"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicates"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroups"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"}}]}}]}}]} as unknown as DocumentNode; -export const UpsertPermissionFlagsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpsertPermissionFlags"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"upsertPermissionFlagsInput"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpsertPermissionFlagsInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"upsertPermissionFlags"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"upsertPermissionFlagsInput"},"value":{"kind":"Variable","name":{"kind":"Name","value":"upsertPermissionFlagsInput"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PermissionFlagFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PermissionFlagFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PermissionFlag"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"flag"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}}]}}]} as unknown as DocumentNode; +export const UpsertPermissionFlagGrantsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpsertPermissionFlagGrants"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"upsertPermissionFlagGrantsInput"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpsertPermissionFlagGrantsInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"upsertPermissionFlagGrants"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"upsertPermissionFlagGrantsInput"},"value":{"kind":"Variable","name":{"kind":"Name","value":"upsertPermissionFlagGrantsInput"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PermissionFlagGrantFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PermissionFlagGrantFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PermissionFlagGrant"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"flag"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}}]}}]} as unknown as DocumentNode; export const UpsertRowLevelPermissionPredicatesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpsertRowLevelPermissionPredicates"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpsertRowLevelPermissionPredicatesInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"upsertRowLevelPermissionPredicates"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"predicates"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"predicateGroups"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicate"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"operand"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberSubFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"parentRowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"logicalOperator"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}}]}}]} as unknown as DocumentNode; -export const GetRolesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetRoles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getRoles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RoleFragment"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"apiKeys"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApiKeyForRoleFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"permissionFlags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PermissionFlagFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objectPermissions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectPermissionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldPermissions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FieldPermissionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicates"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroups"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicate"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"operand"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberSubFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"parentRowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"logicalOperator"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Role"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllSettings"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessAllTools"}},{"kind":"Field","name":{"kind":"Name","value":"isEditable"}},{"kind":"Field","name":{"kind":"Name","value":"canReadAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToUsers"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToAgents"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToApiKeys"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApiKeyForRoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ApiKeyForRole"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"expiresAt"}},{"kind":"Field","name":{"kind":"Name","value":"revokedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PermissionFlagFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PermissionFlag"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"flag"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ObjectPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"restrictedFields"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicates"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroups"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FieldPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FieldPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadFieldValue"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateFieldValue"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}}]}}]} as unknown as DocumentNode; +export const GetRolesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetRoles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getRoles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RoleFragment"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"apiKeys"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApiKeyForRoleFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"permissionFlagGrants"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PermissionFlagGrantFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objectPermissions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectPermissionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldPermissions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FieldPermissionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicates"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroups"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicate"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"operand"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberSubFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"parentRowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"logicalOperator"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Role"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllSettings"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessAllTools"}},{"kind":"Field","name":{"kind":"Name","value":"isEditable"}},{"kind":"Field","name":{"kind":"Name","value":"canReadAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToUsers"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToAgents"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToApiKeys"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApiKeyForRoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ApiKeyForRole"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"expiresAt"}},{"kind":"Field","name":{"kind":"Name","value":"revokedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PermissionFlagGrantFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PermissionFlagGrant"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"flag"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ObjectPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"restrictedFields"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicates"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroups"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FieldPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FieldPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadFieldValue"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateFieldValue"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}}]}}]} as unknown as DocumentNode; export const CreateApprovedAccessDomainDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateApprovedAccessDomain"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateApprovedAccessDomainInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createApprovedAccessDomain"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"domain"}},{"kind":"Field","name":{"kind":"Name","value":"isValidated"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]}}]} as unknown as DocumentNode; export const CreateOidcIdentityProviderDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOIDCIdentityProvider"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SetupOIDCSsoInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOIDCIdentityProvider"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]} as unknown as DocumentNode; export const CreateSamlIdentityProviderDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateSAMLIdentityProvider"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SetupSAMLSsoInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createSAMLIdentityProvider"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]} as unknown as DocumentNode; @@ -8237,7 +8237,7 @@ export const VerifyTwoFactorAuthenticationMethodForAuthenticatedUserDocument = { export const GetUsageAnalyticsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetUsageAnalytics"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"UsageAnalyticsInput"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getUsageAnalytics"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"usageByUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"creditsUsed"}}]}},{"kind":"Field","name":{"kind":"Name","value":"usageByOperationType"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"creditsUsed"}}]}},{"kind":"Field","name":{"kind":"Name","value":"usageByModel"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"creditsUsed"}}]}},{"kind":"Field","name":{"kind":"Name","value":"timeSeries"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"date"}},{"kind":"Field","name":{"kind":"Name","value":"creditsUsed"}}]}},{"kind":"Field","name":{"kind":"Name","value":"periodStart"}},{"kind":"Field","name":{"kind":"Name","value":"periodEnd"}},{"kind":"Field","name":{"kind":"Name","value":"userDailyUsage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"dailyUsage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"date"}},{"kind":"Field","name":{"kind":"Name","value":"creditsUsed"}}]}}]}}]}}]}}]} as unknown as DocumentNode; export const DeleteUserAccountDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteUserAccount"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const DeleteUserWorkspaceDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteUserWorkspace"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workspaceMemberIdToDelete"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteUserFromWorkspace"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"workspaceMemberIdToDelete"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workspaceMemberIdToDelete"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; -export const GetCurrentUserDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"currentUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"UserQueryFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"colorScheme"}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"timeZone"}},{"kind":"Field","name":{"kind":"Name","value":"dateFormat"}},{"kind":"Field","name":{"kind":"Name","value":"timeFormat"}},{"kind":"Field","name":{"kind":"Name","value":"calendarStartDay"}},{"kind":"Field","name":{"kind":"Name","value":"numberFormat"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"DeletedWorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicate"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"operand"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberSubFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"parentRowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"logicalOperator"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ObjectPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"restrictedFields"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicates"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroups"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceUrlsFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceUrls"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhase"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"start_date"}},{"kind":"Field","name":{"kind":"Name","value":"end_date"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"interval"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"currentPeriodEnd"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptionItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"hasReachedCurrentPeriodCap"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}},{"kind":"Field","name":{"kind":"Name","value":"stripePriceId"}},{"kind":"Field","name":{"kind":"Name","value":"billingProduct"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"images"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"productKey"}},{"kind":"Field","name":{"kind":"Name","value":"planKey"}},{"kind":"Field","name":{"kind":"Name","value":"priceUsageBased"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Role"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllSettings"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessAllTools"}},{"kind":"Field","name":{"kind":"Name","value":"isEditable"}},{"kind":"Field","name":{"kind":"Name","value":"canReadAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToUsers"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToAgents"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToApiKeys"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspaceFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspace"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"loginToken"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"personalInviteToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"sso"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspacesFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspaces"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignIn"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignUp"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"UserQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"User"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"hasPassword"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessFullAdminPanel"}},{"kind":"Field","name":{"kind":"Name","value":"canImpersonate"}},{"kind":"Field","name":{"kind":"Name","value":"supportUserHash"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingStatus"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMember"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"deletedWorkspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentUserWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"permissionFlags"}},{"kind":"Field","name":{"kind":"Name","value":"objectsPermissions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectPermissionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodSummary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodId"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"strategy"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"allowImpersonation"}},{"kind":"Field","name":{"kind":"Name","value":"activationStatus"}},{"kind":"Field","name":{"kind":"Name","value":"isPublicInviteLinkEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"subdomain"}},{"kind":"Field","name":{"kind":"Name","value":"customDomain"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidSignedEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseValidityToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceCustomApplication"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"installedApplications"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}}]}},{"kind":"Field","name":{"kind":"Name","value":"isCustomDomainEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceUrlsFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"featureFlags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"metadataVersion"}},{"kind":"Field","name":{"kind":"Name","value":"currentBillingSubscription"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingEntitlements"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembersCount"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRole"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RoleFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fastModel"}},{"kind":"Field","name":{"kind":"Name","value":"smartModel"}},{"kind":"Field","name":{"kind":"Name","value":"aiAdditionalInstructions"}},{"kind":"Field","name":{"kind":"Name","value":"enabledAiModelIds"}},{"kind":"Field","name":{"kind":"Name","value":"useRecommendedModels"}},{"kind":"Field","name":{"kind":"Name","value":"isTwoFactorAuthenticationEnforced"}},{"kind":"Field","name":{"kind":"Name","value":"trashRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"eventLogRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"editableProfileFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspaces"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspacesFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"userVars"}}]}}]} as unknown as DocumentNode; +export const GetCurrentUserDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"currentUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"UserQueryFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"colorScheme"}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"locale"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"timeZone"}},{"kind":"Field","name":{"kind":"Name","value":"dateFormat"}},{"kind":"Field","name":{"kind":"Name","value":"timeFormat"}},{"kind":"Field","name":{"kind":"Name","value":"calendarStartDay"}},{"kind":"Field","name":{"kind":"Name","value":"numberFormat"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}},{"kind":"Field","name":{"kind":"Name","value":"userWorkspaceId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"DeletedWorkspaceMember"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}}]}},{"kind":"Field","name":{"kind":"Name","value":"avatarUrl"}},{"kind":"Field","name":{"kind":"Name","value":"userEmail"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicate"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"operand"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMemberSubFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"parentRowLevelPermissionPredicateGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"logicalOperator"}},{"kind":"Field","name":{"kind":"Name","value":"positionInRowLevelPermissionPredicateGroup"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectPermissionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ObjectPermission"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"canReadObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"restrictedFields"}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicates"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"rowLevelPermissionPredicateGroups"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RowLevelPermissionPredicateGroupFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"WorkspaceUrlsFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceUrls"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItem"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"price"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhase"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"start_date"}},{"kind":"Field","name":{"kind":"Name","value":"end_date"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseItemFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"interval"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"currentPeriodEnd"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptionItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"hasReachedCurrentPeriodCap"}},{"kind":"Field","name":{"kind":"Name","value":"quantity"}},{"kind":"Field","name":{"kind":"Name","value":"stripePriceId"}},{"kind":"Field","name":{"kind":"Name","value":"billingProduct"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"images"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"productKey"}},{"kind":"Field","name":{"kind":"Name","value":"planKey"}},{"kind":"Field","name":{"kind":"Name","value":"priceUsageBased"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BillingSubscriptionFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"BillingSubscription"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"}},{"kind":"Field","name":{"kind":"Name","value":"phases"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionSchedulePhaseFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"RoleFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Role"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllSettings"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessAllTools"}},{"kind":"Field","name":{"kind":"Name","value":"isEditable"}},{"kind":"Field","name":{"kind":"Name","value":"canReadAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canUpdateAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canSoftDeleteAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canDestroyAllObjectRecords"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToUsers"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToAgents"}},{"kind":"Field","name":{"kind":"Name","value":"canBeAssignedToApiKeys"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspaceFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspace"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"loginToken"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"personalInviteToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subdomainUrl"}},{"kind":"Field","name":{"kind":"Name","value":"customUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"sso"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableWorkspacesFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AvailableWorkspaces"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignIn"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspacesForSignUp"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspaceFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"UserQueryFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"User"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"hasPassword"}},{"kind":"Field","name":{"kind":"Name","value":"canAccessFullAdminPanel"}},{"kind":"Field","name":{"kind":"Name","value":"canImpersonate"}},{"kind":"Field","name":{"kind":"Name","value":"supportUserHash"}},{"kind":"Field","name":{"kind":"Name","value":"onboardingStatus"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMember"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"PartialWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"deletedWorkspaceMembers"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"DeletedWorkspaceMemberQueryFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentUserWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"permissionFlagGrants"}},{"kind":"Field","name":{"kind":"Name","value":"objectsPermissions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectPermissionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodSummary"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"twoFactorAuthenticationMethodId"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"strategy"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"currentWorkspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"inviteHash"}},{"kind":"Field","name":{"kind":"Name","value":"allowImpersonation"}},{"kind":"Field","name":{"kind":"Name","value":"activationStatus"}},{"kind":"Field","name":{"kind":"Name","value":"isPublicInviteLinkEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isGoogleAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isMicrosoftAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"isPasswordAuthBypassEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"subdomain"}},{"kind":"Field","name":{"kind":"Name","value":"customDomain"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidSignedEnterpriseKey"}},{"kind":"Field","name":{"kind":"Name","value":"hasValidEnterpriseValidityToken"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceCustomApplication"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"installedApplications"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}}]}},{"kind":"Field","name":{"kind":"Name","value":"isCustomDomainEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceUrls"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"WorkspaceUrlsFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"featureFlags"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"metadataVersion"}},{"kind":"Field","name":{"kind":"Name","value":"currentBillingSubscription"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CurrentBillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingSubscriptions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BillingSubscriptionFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"billingEntitlements"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}}]}},{"kind":"Field","name":{"kind":"Name","value":"workspaceMembersCount"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRole"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"RoleFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fastModel"}},{"kind":"Field","name":{"kind":"Name","value":"smartModel"}},{"kind":"Field","name":{"kind":"Name","value":"aiAdditionalInstructions"}},{"kind":"Field","name":{"kind":"Name","value":"enabledAiModelIds"}},{"kind":"Field","name":{"kind":"Name","value":"useRecommendedModels"}},{"kind":"Field","name":{"kind":"Name","value":"isTwoFactorAuthenticationEnforced"}},{"kind":"Field","name":{"kind":"Name","value":"trashRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"eventLogRetentionDays"}},{"kind":"Field","name":{"kind":"Name","value":"editableProfileFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"availableWorkspaces"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AvailableWorkspacesFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"userVars"}}]}}]} as unknown as DocumentNode; export const CreateManyViewFieldGroupsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateManyViewFieldGroups"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"inputs"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateViewFieldGroupInput"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createManyViewFieldGroups"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"inputs"},"value":{"kind":"Variable","name":{"kind":"Name","value":"inputs"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ViewFieldGroupFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewFieldFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewField"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"isVisible"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"size"}},{"kind":"Field","name":{"kind":"Name","value":"aggregateOperation"}},{"kind":"Field","name":{"kind":"Name","value":"viewFieldGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewFieldGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewFieldGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"isVisible"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}},{"kind":"Field","name":{"kind":"Name","value":"viewFields"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ViewFieldFragment"}}]}}]}}]} as unknown as DocumentNode; export const CreateManyViewFieldsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateManyViewFields"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"inputs"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateViewFieldInput"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createManyViewFields"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"inputs"},"value":{"kind":"Variable","name":{"kind":"Name","value":"inputs"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ViewFieldFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewFieldFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewField"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"isVisible"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"size"}},{"kind":"Field","name":{"kind":"Name","value":"aggregateOperation"}},{"kind":"Field","name":{"kind":"Name","value":"viewFieldGroupId"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}}]}}]} as unknown as DocumentNode; export const CreateManyViewGroupsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateManyViewGroups"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"inputs"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateViewGroupInput"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createManyViewGroups"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"inputs"},"value":{"kind":"Variable","name":{"kind":"Name","value":"inputs"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ViewGroupFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ViewGroupFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ViewGroup"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"isVisible"}},{"kind":"Field","name":{"kind":"Name","value":"fieldValue"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"viewId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"deletedAt"}}]}}]} as unknown as DocumentNode; diff --git a/packages/twenty-front/src/modules/activities/files/components/AttachmentList.tsx b/packages/twenty-front/src/modules/activities/files/components/AttachmentList.tsx index 4b37629473c..aa4d0bc7f44 100644 --- a/packages/twenty-front/src/modules/activities/files/components/AttachmentList.tsx +++ b/packages/twenty-front/src/modules/activities/files/components/AttachmentList.tsx @@ -19,7 +19,7 @@ import { filterAttachmentsWithFile, } from '@/activities/files/utils/filterAttachmentsWithFile'; import { getAttachmentUrl } from '@/activities/utils/getAttachmentUrl'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { useModal } from '@/ui/layout/modal/hooks/useModal'; import { ScrollWrapper } from '@/ui/utilities/scroll/components/ScrollWrapper'; import { isDefined } from 'twenty-shared/utils'; @@ -129,11 +129,11 @@ export const AttachmentList = ({ isAttachmentPreviewEnabledState, ); - const hasDownloadPermission = useHasPermissionFlag( + const hasDownloadPermission = useHasPermissionFlagGrant( PermissionFlagType.DOWNLOAD_FILE, ); - const hasUploadPermission = useHasPermissionFlag( + const hasUploadPermission = useHasPermissionFlagGrant( PermissionFlagType.UPLOAD_FILE, ); diff --git a/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx b/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx index 369b8cd5b6b..ed8e8dcf084 100644 --- a/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx +++ b/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx @@ -15,7 +15,7 @@ import { getSafeUrl, isDefined } from 'twenty-shared/utils'; import { type AttachmentWithFile } from '@/activities/files/utils/filterAttachmentsWithFile'; import { FileIcon } from '@/file/components/FileIcon'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { CoreObjectNameSingular } from 'twenty-shared/types'; import { IconCalendar, OverflowingTextWithTooltip } from 'twenty-ui/display'; import { ThemeContext, themeCssVariables } from 'twenty-ui/theme-constants'; @@ -83,7 +83,7 @@ export const AttachmentRow = ({ const { theme } = useContext(ThemeContext); const [isEditing, setIsEditing] = useState(false); - const hasDownloadPermission = useHasPermissionFlag( + const hasDownloadPermission = useHasPermissionFlagGrant( PermissionFlagType.DOWNLOAD_FILE, ); diff --git a/packages/twenty-front/src/modules/activities/files/components/FilesCard.tsx b/packages/twenty-front/src/modules/activities/files/components/FilesCard.tsx index 8e805dba3cf..c17bfc093a6 100644 --- a/packages/twenty-front/src/modules/activities/files/components/FilesCard.tsx +++ b/packages/twenty-front/src/modules/activities/files/components/FilesCard.tsx @@ -8,7 +8,7 @@ import { useAttachments } from '@/activities/files/hooks/useAttachments'; import { useUploadAttachmentFile } from '@/activities/files/hooks/useUploadAttachmentFile'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectPermissionsForObject } from '@/object-record/hooks/useObjectPermissionsForObject'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { useTargetRecord } from '@/ui/layout/contexts/useTargetRecord'; import { Trans, useLingui } from '@lingui/react/macro'; import { isDefined } from 'twenty-shared/utils'; @@ -82,7 +82,7 @@ export const FilesCard = () => { const hasObjectUpdatePermissions = objectPermissions.canUpdateObjectRecords; - const hasUploadPermission = useHasPermissionFlag( + const hasUploadPermission = useHasPermissionFlagGrant( PermissionFlagType.UPLOAD_FILE, ); diff --git a/packages/twenty-front/src/modules/ai/components/AIChatNoMoreBillingCreditsBanner.tsx b/packages/twenty-front/src/modules/ai/components/AIChatNoMoreBillingCreditsBanner.tsx index 3427e9ffe9b..28b9c8e16ae 100644 --- a/packages/twenty-front/src/modules/ai/components/AIChatNoMoreBillingCreditsBanner.tsx +++ b/packages/twenty-front/src/modules/ai/components/AIChatNoMoreBillingCreditsBanner.tsx @@ -4,7 +4,7 @@ import { useNumberFormat } from '@/localization/hooks/useNumberFormat'; import { useEndSubscriptionTrialPeriod } from '@/settings/billing/hooks/useEndSubscriptionTrialPeriod'; import { useGetNextResourceCreditPrice } from '@/settings/billing/hooks/useGetNextResourceCreditPrice'; import { useGetNextMeteredBillingPrice } from '@/settings/billing/hooks/useGetNextMeteredBillingPrice'; -import { usePermissionFlagMap } from '@/settings/roles/hooks/usePermissionFlagMap'; +import { usePermissionFlagGrantMap } from '@/settings/roles/hooks/usePermissionFlagGrantMap'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal'; import { useModal } from '@/ui/layout/modal/hooks/useModal'; @@ -52,7 +52,7 @@ export const AIChatNoMoreBillingCreditsBanner = () => { ); const { [PermissionFlagType.WORKSPACE]: hasPermissionToManageBilling } = - usePermissionFlagMap(); + usePermissionFlagGrantMap(); if (!hasPermissionToManageBilling) { return null; diff --git a/packages/twenty-front/src/modules/ai/components/AgentChatThreadInitializationEffect.tsx b/packages/twenty-front/src/modules/ai/components/AgentChatThreadInitializationEffect.tsx index ba802de9ecf..0a8cb3c08b2 100644 --- a/packages/twenty-front/src/modules/ai/components/AgentChatThreadInitializationEffect.tsx +++ b/packages/twenty-front/src/modules/ai/components/AgentChatThreadInitializationEffect.tsx @@ -17,7 +17,7 @@ import { hasTriggeredCreateForDraftState } from '@/ai/states/hasTriggeredCreateF import { sortChatThreadsByLastActivityDesc } from '@/ai/utils/sortChatThreadsByLastActivityDesc'; import { useUpdateMetadataStoreDraft } from '@/metadata-store/hooks/useUpdateMetadataStoreDraft'; import { metadataStoreState } from '@/metadata-store/states/metadataStoreState'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { useAtomComponentFamilyStateCallbackState } from '@/ui/utilities/state/jotai/hooks/useAtomComponentFamilyStateCallbackState'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; @@ -31,7 +31,7 @@ import { export const AgentChatThreadInitializationEffect = () => { const client = useApolloClient(); const { replaceDraft, applyChanges } = useUpdateMetadataStoreDraft(); - const hasAiSettingsPermission = useHasPermissionFlag( + const hasAiSettingsPermission = useHasPermissionFlagGrant( PermissionFlagType.AI_SETTINGS, ); diff --git a/packages/twenty-front/src/modules/ai/components/AiChatCreditsExhaustedMessage.tsx b/packages/twenty-front/src/modules/ai/components/AiChatCreditsExhaustedMessage.tsx index 4258c03e545..2363730cec3 100644 --- a/packages/twenty-front/src/modules/ai/components/AiChatCreditsExhaustedMessage.tsx +++ b/packages/twenty-front/src/modules/ai/components/AiChatCreditsExhaustedMessage.tsx @@ -1,5 +1,5 @@ import { AiChatBanner } from '@/ai/components/AiChatBanner'; -import { usePermissionFlagMap } from '@/settings/roles/hooks/usePermissionFlagMap'; +import { usePermissionFlagGrantMap } from '@/settings/roles/hooks/usePermissionFlagGrantMap'; import { useSubscriptionStatus } from '@/workspace/hooks/useSubscriptionStatus'; import { t } from '@lingui/core/macro'; import { SettingsPath } from 'twenty-shared/types'; @@ -17,7 +17,7 @@ export const AiChatCreditsExhaustedMessage = () => { const isTrialing = subscriptionStatus === SubscriptionStatus.Trialing; const { [PermissionFlagType.WORKSPACE]: hasPermissionToManageBilling } = - usePermissionFlagMap(); + usePermissionFlagGrantMap(); const handleUpgradeClick = () => { navigateSettings(SettingsPath.Billing); diff --git a/packages/twenty-front/src/modules/auth/states/currentUserWorkspaceState.ts b/packages/twenty-front/src/modules/auth/states/currentUserWorkspaceState.ts index c15d50e1ce5..58d54b9cf41 100644 --- a/packages/twenty-front/src/modules/auth/states/currentUserWorkspaceState.ts +++ b/packages/twenty-front/src/modules/auth/states/currentUserWorkspaceState.ts @@ -4,7 +4,7 @@ import { type UserWorkspace } from '~/generated-metadata/graphql'; export type CurrentUserWorkspace = Pick< UserWorkspace, - 'permissionFlags' | 'twoFactorAuthenticationMethodSummary' + 'permissionFlagGrants' | 'twoFactorAuthenticationMethodSummary' > & { objectsPermissions: Array; }; diff --git a/packages/twenty-front/src/modules/command-menu-item/components/StandalonePageCommandMenu.tsx b/packages/twenty-front/src/modules/command-menu-item/components/StandalonePageCommandMenu.tsx index c818f0aded2..5ae4c4c957b 100644 --- a/packages/twenty-front/src/modules/command-menu-item/components/StandalonePageCommandMenu.tsx +++ b/packages/twenty-front/src/modules/command-menu-item/components/StandalonePageCommandMenu.tsx @@ -40,10 +40,10 @@ export const StandalonePageCommandMenu = () => { featureFlags[flag.key] = flag.value === true; } - const permissionFlags: Record = {}; + const permissionFlagGrants: Record = {}; - for (const flag of currentUserWorkspace?.permissionFlags ?? []) { - permissionFlags[flag] = true; + for (const flag of currentUserWorkspace?.permissionFlagGrants ?? []) { + permissionFlagGrants[flag] = true; } const targetObjectReadPermissions: Record = {}; @@ -82,7 +82,7 @@ export const StandalonePageCommandMenu = () => { }, selectedRecords: [], featureFlags, - permissionFlags, + permissionFlagGrants, targetObjectReadPermissions, targetObjectWritePermissions, objectMetadataItem: {}, @@ -90,7 +90,7 @@ export const StandalonePageCommandMenu = () => { }; }, [ currentWorkspace?.featureFlags, - currentUserWorkspace?.permissionFlags, + currentUserWorkspace?.permissionFlagGrants, isLayoutCustomizationModeEnabled, objectMetadataItems, store, diff --git a/packages/twenty-front/src/modules/command-menu-item/constants/EmptyCommandMenuContextApi.ts b/packages/twenty-front/src/modules/command-menu-item/constants/EmptyCommandMenuContextApi.ts index 04e3eb24b92..d3c189c21d3 100644 --- a/packages/twenty-front/src/modules/command-menu-item/constants/EmptyCommandMenuContextApi.ts +++ b/packages/twenty-front/src/modules/command-menu-item/constants/EmptyCommandMenuContextApi.ts @@ -24,7 +24,7 @@ export const EMPTY_COMMAND_MENU_CONTEXT_API: CommandMenuContextApi = { }, selectedRecords: [], featureFlags: {}, - permissionFlags: {}, + permissionFlagGrants: {}, targetObjectReadPermissions: {}, targetObjectWritePermissions: {}, objectMetadataItem: {}, diff --git a/packages/twenty-front/src/modules/command-menu-item/hooks/__tests__/useCloseCommandMenu.test.tsx b/packages/twenty-front/src/modules/command-menu-item/hooks/__tests__/useCloseCommandMenu.test.tsx index 502468875a4..05f3c710ba0 100644 --- a/packages/twenty-front/src/modules/command-menu-item/hooks/__tests__/useCloseCommandMenu.test.tsx +++ b/packages/twenty-front/src/modules/command-menu-item/hooks/__tests__/useCloseCommandMenu.test.tsx @@ -64,7 +64,7 @@ const getWrapper = }, selectedRecords: [], featureFlags: {}, - permissionFlags: {}, + permissionFlagGrants: {}, targetObjectReadPermissions: {}, targetObjectWritePermissions: {}, objectMetadataItem: {}, diff --git a/packages/twenty-front/src/modules/command-menu-item/hooks/useCurrentCommandMenuContextApi.ts b/packages/twenty-front/src/modules/command-menu-item/hooks/useCurrentCommandMenuContextApi.ts index 430dce88d07..f903904405e 100644 --- a/packages/twenty-front/src/modules/command-menu-item/hooks/useCurrentCommandMenuContextApi.ts +++ b/packages/twenty-front/src/modules/command-menu-item/hooks/useCurrentCommandMenuContextApi.ts @@ -145,10 +145,10 @@ export const useCurrentCommandMenuContextApi = (): CommandMenuContextApi => { const currentUserWorkspace = useAtomStateValue(currentUserWorkspaceState); - const permissionFlags: Record = {}; + const permissionFlagGrants: Record = {}; - for (const flag of currentUserWorkspace?.permissionFlags ?? []) { - permissionFlags[flag] = true; + for (const flag of currentUserWorkspace?.permissionFlagGrants ?? []) { + permissionFlagGrants[flag] = true; } const targetObjectReadPermissions: Record = {}; @@ -185,7 +185,7 @@ export const useCurrentCommandMenuContextApi = (): CommandMenuContextApi => { objectPermissions, selectedRecords, featureFlags, - permissionFlags, + permissionFlagGrants, targetObjectReadPermissions, targetObjectWritePermissions, objectMetadataItem: objectMetadataItem ?? {}, diff --git a/packages/twenty-front/src/modules/information-banner/components/InformationBannerWrapper.tsx b/packages/twenty-front/src/modules/information-banner/components/InformationBannerWrapper.tsx index fb33bf0ee04..f9d89a7b2b6 100644 --- a/packages/twenty-front/src/modules/information-banner/components/InformationBannerWrapper.tsx +++ b/packages/twenty-front/src/modules/information-banner/components/InformationBannerWrapper.tsx @@ -10,7 +10,7 @@ import { InformationBannerInvalidEnterpriseKey } from '@/information-banner/comp import { InformationBannerMaintenance } from '@/information-banner/components/maintenance/InformationBannerMaintenance'; import { InformationBannerReconnectAccountEmailAliases } from '@/information-banner/components/reconnect-account/InformationBannerReconnectAccountEmailAliases'; import { InformationBannerReconnectAccountInsufficientPermissions } from '@/information-banner/components/reconnect-account/InformationBannerReconnectAccountInsufficientPermissions'; -import { usePermissionFlagMap } from '@/settings/roles/hooks/usePermissionFlagMap'; +import { usePermissionFlagGrantMap } from '@/settings/roles/hooks/usePermissionFlagGrantMap'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useIsWorkspaceActivationStatusEqualsTo } from '@/workspace/hooks/useIsWorkspaceActivationStatusEqualsTo'; import { useSubscriptionStatus } from '@/workspace/hooks/useSubscriptionStatus'; @@ -32,7 +32,7 @@ const StyledInformationBannerWrapper = styled.div` export const InformationBannerWrapper = () => { const subscriptionStatus = useSubscriptionStatus(); - const permissionMap = usePermissionFlagMap(); + const permissionMap = usePermissionFlagGrantMap(); const isAccountSyncEnabled = permissionMap[PermissionFlagType.CONNECTED_ACCOUNTS]; const isWorkspaceSuspended = useIsWorkspaceActivationStatusEqualsTo( diff --git a/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerBillingSubscriptionPaused.tsx b/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerBillingSubscriptionPaused.tsx index 88048a9c438..c7161a1b078 100644 --- a/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerBillingSubscriptionPaused.tsx +++ b/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerBillingSubscriptionPaused.tsx @@ -1,7 +1,7 @@ import { useSnackBarOnQueryError } from '@/apollo/hooks/useSnackBarOnQueryError'; import { useRedirect } from '@/domain-manager/hooks/useRedirect'; import { InformationBanner } from '@/information-banner/components/InformationBanner'; -import { usePermissionFlagMap } from '@/settings/roles/hooks/usePermissionFlagMap'; +import { usePermissionFlagGrantMap } from '@/settings/roles/hooks/usePermissionFlagGrantMap'; import { t } from '@lingui/core/macro'; import { SettingsPath } from 'twenty-shared/types'; import { getSettingsPath, isDefined } from 'twenty-shared/utils'; @@ -24,7 +24,7 @@ export const InformationBannerBillingSubscriptionPaused = () => { const { [PermissionFlagType.WORKSPACE]: hasPermissionToUpdateBillingDetails, - } = usePermissionFlagMap(); + } = usePermissionFlagGrantMap(); const openBillingPortal = () => { if (isDefined(data) && isDefined(data.billingPortalSession.url)) { diff --git a/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx b/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx index bd8c5fa31c5..d82c5753e59 100644 --- a/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx +++ b/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx @@ -1,6 +1,6 @@ import { useEndSubscriptionTrialPeriod } from '@/settings/billing/hooks/useEndSubscriptionTrialPeriod'; import { InformationBanner } from '@/information-banner/components/InformationBanner'; -import { usePermissionFlagMap } from '@/settings/roles/hooks/usePermissionFlagMap'; +import { usePermissionFlagGrantMap } from '@/settings/roles/hooks/usePermissionFlagGrantMap'; import { useLingui } from '@lingui/react/macro'; import { PermissionFlagType } from '~/generated-metadata/graphql'; @@ -9,7 +9,7 @@ export const InformationBannerEndTrialPeriod = () => { const { t } = useLingui(); const { [PermissionFlagType.WORKSPACE]: hasPermissionToEndTrialPeriod } = - usePermissionFlagMap(); + usePermissionFlagGrantMap(); return ( { const { [PermissionFlagType.WORKSPACE]: hasPermissionToUpdateBillingDetails, - } = usePermissionFlagMap(); + } = usePermissionFlagGrantMap(); const openBillingPortal = () => { if (isDefined(data) && isDefined(data.billingPortalSession.url)) { diff --git a/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerNoBillingSubscription.tsx b/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerNoBillingSubscription.tsx index 1b67f718d5f..90d6084cfa7 100644 --- a/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerNoBillingSubscription.tsx +++ b/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerNoBillingSubscription.tsx @@ -1,7 +1,7 @@ import { BILLING_CHECKOUT_SESSION_DEFAULT_VALUE } from '@/settings/billing/constants/BillingCheckoutSessionDefaultValue'; import { useHandleCheckoutSession } from '@/settings/billing/hooks/useHandleCheckoutSession'; import { InformationBanner } from '@/information-banner/components/InformationBanner'; -import { usePermissionFlagMap } from '@/settings/roles/hooks/usePermissionFlagMap'; +import { usePermissionFlagGrantMap } from '@/settings/roles/hooks/usePermissionFlagGrantMap'; import { t } from '@lingui/core/macro'; import { SettingsPath } from 'twenty-shared/types'; import { getSettingsPath } from 'twenty-shared/utils'; @@ -16,7 +16,7 @@ export const InformationBannerNoBillingSubscription = () => { }); const { [PermissionFlagType.WORKSPACE]: hasPermissionToSubscribe } = - usePermissionFlagMap(); + usePermissionFlagGrantMap(); return ( { const { t } = useLingui(); const { [PermissionFlagType.WORKSPACE]: hasPermissionToUpdateCreditPlan } = - usePermissionFlagMap(); + usePermissionFlagGrantMap(); const navigateSettings = useNavigateSettings(); 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 d28d9b89122..9de8bd7de26 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 @@ -30,7 +30,7 @@ export const useMetadataErrorHandler = () => { viewFilter: t`view filter`, index: t`index`, logicFunction: t`logic function`, - permissionFlag: t`permission flag`, + permissionFlagGrant: t`permission flag`, permissionFlagDefinition: t`permission flag definition`, objectPermission: t`object permission`, fieldPermission: t`field permission`, diff --git a/packages/twenty-front/src/modules/metadata-store/effect-components/UserMetadataProviderInitialEffect.tsx b/packages/twenty-front/src/modules/metadata-store/effect-components/UserMetadataProviderInitialEffect.tsx index 1ff6fddf9dc..9c4fe99199b 100644 --- a/packages/twenty-front/src/modules/metadata-store/effect-components/UserMetadataProviderInitialEffect.tsx +++ b/packages/twenty-front/src/modules/metadata-store/effect-components/UserMetadataProviderInitialEffect.tsx @@ -104,8 +104,8 @@ export const UserMetadataProviderInitialEffect = () => { if (isDefined(userQueryData.currentUser.currentUserWorkspace)) { setCurrentUserWorkspace({ - permissionFlags: - userQueryData.currentUser.currentUserWorkspace.permissionFlags ?? [], + permissionFlagGrants: + userQueryData.currentUser.currentUserWorkspace.permissionFlagGrants ?? [], twoFactorAuthenticationMethodSummary: userQueryData.currentUser.currentUserWorkspace .twoFactorAuthenticationMethodSummary ?? [], diff --git a/packages/twenty-front/src/modules/metadata-store/types/FlatRole.ts b/packages/twenty-front/src/modules/metadata-store/types/FlatRole.ts index 212aa10f300..00713930b33 100644 --- a/packages/twenty-front/src/modules/metadata-store/types/FlatRole.ts +++ b/packages/twenty-front/src/modules/metadata-store/types/FlatRole.ts @@ -7,7 +7,7 @@ export type FlatRole = Omit< | 'workspaceMembers' | 'fieldPermissions' | 'objectPermissions' - | 'permissionFlags' + | 'permissionFlagGrants' | 'rowLevelPermissionPredicateGroups' | 'rowLevelPermissionPredicates' >; diff --git a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx index a24046f696c..4ac2a7b8b81 100644 --- a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx +++ b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx @@ -2,7 +2,7 @@ import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { NavigationDrawerAiChatContent } from '@/ai/components/NavigationDrawerAiChatContent'; import { MainNavigationDrawerNavigationContent } from '@/navigation/components/MainNavigationDrawerNavigationContent'; import { MainNavigationDrawerTabsRow } from '@/navigation/components/MainNavigationDrawerTabsRow'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { NavigationDrawer } from '@/ui/navigation/navigation-drawer/components/NavigationDrawer'; import { NavigationDrawerFixedContent } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerFixedContent'; import { NavigationDrawerScrollableContent } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerScrollableContent'; @@ -16,7 +16,7 @@ export const MainNavigationDrawer = ({ className }: { className?: string }) => { navigationDrawerActiveTabState, ); const currentWorkspace = useAtomStateValue(currentWorkspaceState); - const hasAiSettingsPermission = useHasPermissionFlag( + const hasAiSettingsPermission = useHasPermissionFlagGrant( PermissionFlagType.AI_SETTINGS, ); diff --git a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx index 1650bf696ed..9f390d1ab1a 100644 --- a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx +++ b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx @@ -12,7 +12,7 @@ import { useIsMobile } from 'twenty-ui/utilities'; import { useContext } from 'react'; import { useSwitchToNewAiChat } from '@/ai/hooks/useSwitchToNewAiChat'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { NavigationDrawerAnimatedCollapseWrapper } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerAnimatedCollapseWrapper'; import { isNavigationDrawerExpandedState } from '@/ui/navigation/states/isNavigationDrawerExpanded'; import { navigationDrawerActiveTabState } from '@/ui/navigation/states/navigationDrawerActiveTabState'; @@ -144,7 +144,7 @@ export const MainNavigationDrawerTabsRow = () => { const setIsNavigationDrawerExpanded = useSetAtomState( isNavigationDrawerExpandedState, ); - const hasAiSettingsPermission = useHasPermissionFlag( + const hasAiSettingsPermission = useHasPermissionFlagGrant( PermissionFlagType.AI_SETTINGS, ); diff --git a/packages/twenty-front/src/modules/navigation/components/MobileNavigationBar.tsx b/packages/twenty-front/src/modules/navigation/components/MobileNavigationBar.tsx index 7e1430d92d2..e5972cd0b76 100644 --- a/packages/twenty-front/src/modules/navigation/components/MobileNavigationBar.tsx +++ b/packages/twenty-front/src/modules/navigation/components/MobileNavigationBar.tsx @@ -5,7 +5,7 @@ import { useDefaultHomePagePath } from '@/navigation/hooks/useDefaultHomePagePat import { useIsSettingsPage } from '@/navigation/hooks/useIsSettingsPage'; import { currentMobileNavigationDrawerState } from '@/navigation/states/currentMobileNavigationDrawerState'; import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { useOpenRecordsSearchPageInSidePanel } from '@/side-panel/hooks/useOpenRecordsSearchPageInSidePanel'; import { useSidePanelMenu } from '@/side-panel/hooks/useSidePanelMenu'; import { isSidePanelOpenedState } from '@/side-panel/states/isSidePanelOpenedState'; @@ -39,7 +39,7 @@ export const MobileNavigationBar = () => { const { switchToNewChat } = useSwitchToNewAiChat(); const { alphaSortedActiveNonSystemObjectMetadataItems } = useFilteredObjectMetadataItems(); - const hasAiSettingsPermission = useHasPermissionFlag( + const hasAiSettingsPermission = useHasPermissionFlagGrant( PermissionFlagType.AI_SETTINGS, ); diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useFieldMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useFieldMetadataItem.ts index 1ea7398d6b6..1b9fb696677 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useFieldMetadataItem.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useFieldMetadataItem.ts @@ -151,7 +151,7 @@ export const responseData = { }, workspaceMembers: [], currentUserWorkspace: { - permissionFlags: ['DATA_MODEL'], + permissionFlagGrants: ['DATA_MODEL'], }, currentWorkspace: { id: 'test-workspace-id', diff --git a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx index 2f8659134ec..b9b5a05fb17 100644 --- a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx +++ b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx @@ -1,6 +1,6 @@ import { OBJECT_OPTIONS_DROPDOWN_ID } from '@/object-record/object-options-dropdown/constants/ObjectOptionsDropdownId'; import { useObjectOptionsDropdown } from '@/object-record/object-options-dropdown/hooks/useObjectOptionsDropdown'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { DropdownContent } from '@/ui/layout/dropdown/components/DropdownContent'; import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader'; import { DropdownMenuHeaderLeftComponent } from '@/ui/layout/dropdown/components/DropdownMenuHeader/internal/DropdownMenuHeaderLeftComponent'; @@ -36,7 +36,7 @@ export const ObjectOptionsDropdownVisibilityContent = () => { const { currentView } = useGetCurrentViewOnly(); const { updateCurrentView } = useUpdateCurrentView(); const { copyToClipboard } = useCopyToClipboard(); - const hasViewsPermission = useHasPermissionFlag(PermissionFlagType.VIEWS); + const hasViewsPermission = useHasPermissionFlagGrant(PermissionFlagType.VIEWS); const { canPersistChanges } = useCanPersistViewChanges(); const selectedItemId = useAtomComponentStateValue( diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useCanAddSelectOption.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useCanAddSelectOption.ts index 83df7c5465b..10c7aed869e 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useCanAddSelectOption.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/hooks/useCanAddSelectOption.ts @@ -1,4 +1,4 @@ -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { isNonEmptyString } from '@sniptt/guards'; import { useParams } from 'react-router-dom'; import { PermissionFlagType } from '~/generated-metadata/graphql'; @@ -6,7 +6,7 @@ import { PermissionFlagType } from '~/generated-metadata/graphql'; export const useCanAddSelectOption = (fieldName: string) => { const { objectNamePlural } = useParams(); - const userHasPermissionToEditDataModel = useHasPermissionFlag( + const userHasPermissionToEditDataModel = useHasPermissionFlagGrant( PermissionFlagType.DATA_MODEL, ); diff --git a/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupActions.ts b/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupActions.ts index 1d65ebca169..723f16302be 100644 --- a/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupActions.ts +++ b/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupActions.ts @@ -7,7 +7,7 @@ import { type RecordGroupAction } from '@/object-record/record-group/types/Recor import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext'; import { useRecordIndexIdFromCurrentContextStore } from '@/object-record/record-index/hooks/useRecordIndexIdFromCurrentContextStore'; import { recordIndexGroupFieldMetadataItemComponentState } from '@/object-record/record-index/states/recordIndexGroupFieldMetadataComponentState'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { navigationMemorizedUrlState } from '@/ui/navigation/states/navigationMemorizedUrlState'; import { useAtomComponentFamilySelectorValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentFamilySelectorValue'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; @@ -90,7 +90,7 @@ export const useRecordGroupActions = ({ recordIndexGroupFieldMetadataItem, ]); - const hasAccessToDataModelSettings = useHasPermissionFlag( + const hasAccessToDataModelSettings = useHasPermissionFlagGrant( PermissionFlagType.DATA_MODEL, ); const currentIndex = visibleRecordGroupIds.findIndex( diff --git a/packages/twenty-front/src/modules/onboarding/hooks/__tests__/useSetNextOnboardingStatus.test.ts b/packages/twenty-front/src/modules/onboarding/hooks/__tests__/useSetNextOnboardingStatus.test.ts index 9e660ef5fcb..47670fbf9f0 100644 --- a/packages/twenty-front/src/modules/onboarding/hooks/__tests__/useSetNextOnboardingStatus.test.ts +++ b/packages/twenty-front/src/modules/onboarding/hooks/__tests__/useSetNextOnboardingStatus.test.ts @@ -31,7 +31,7 @@ const renderHooks = ( onboardingStatus: OnboardingStatus, withCurrentBillingSubscription: boolean, withOneWorkspaceMember = true, - permissionFlags = mockedUserData.currentUserWorkspace.permissionFlags, + permissionFlagGrants = mockedUserData.currentUserWorkspace.permissionFlagGrants, ) => { const { result } = renderHook( () => { @@ -57,7 +57,7 @@ const renderHooks = ( result.current.setCurrentUser({ ...mockedUserData, onboardingStatus }); result.current.setCurrentUserWorkspace({ ...mockedUserData.currentUserWorkspace, - permissionFlags, + permissionFlagGrants, }); result.current.setCurrentWorkspace({ ...mockCurrentWorkspace, diff --git a/packages/twenty-front/src/modules/onboarding/hooks/useSetNextOnboardingStatus.ts b/packages/twenty-front/src/modules/onboarding/hooks/useSetNextOnboardingStatus.ts index 68a0413f576..fa5c9b3db37 100644 --- a/packages/twenty-front/src/modules/onboarding/hooks/useSetNextOnboardingStatus.ts +++ b/packages/twenty-front/src/modules/onboarding/hooks/useSetNextOnboardingStatus.ts @@ -9,7 +9,7 @@ import { currentWorkspaceState, } from '@/auth/states/currentWorkspaceState'; import { calendarBookingPageIdState } from '@/client-config/states/calendarBookingPageIdState'; -import { usePermissionFlagMap } from '@/settings/roles/hooks/usePermissionFlagMap'; +import { usePermissionFlagGrantMap } from '@/settings/roles/hooks/usePermissionFlagGrantMap'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useCallback } from 'react'; @@ -67,7 +67,7 @@ export const useSetNextOnboardingStatus = () => { const currentUser = useAtomStateValue(currentUserState); const currentWorkspace = useAtomStateValue(currentWorkspaceState); const calendarBookingPageId = useAtomStateValue(calendarBookingPageIdState); - const permissionMap = usePermissionFlagMap(); + const permissionMap = usePermissionFlagGrantMap(); const isAccountSyncEnabled = permissionMap[PermissionFlagType.CONNECTED_ACCOUNTS]; diff --git a/packages/twenty-front/src/modules/page-layout/widgets/components/__stories__/WidgetRenderer.stories.tsx b/packages/twenty-front/src/modules/page-layout/widgets/components/__stories__/WidgetRenderer.stories.tsx index 24c2f7e387a..1066b49ec2b 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/components/__stories__/WidgetRenderer.stories.tsx +++ b/packages/twenty-front/src/modules/page-layout/widgets/components/__stories__/WidgetRenderer.stories.tsx @@ -1708,7 +1708,7 @@ export const Catalog: CatalogStory = { // currentUserWorkspaceState is now a Jotai state, set it directly if (isRestricted === true) { jotaiStore.set(currentUserWorkspaceState.atom, { - permissionFlags: [], + permissionFlagGrants: [], twoFactorAuthenticationMethodSummary: null, objectsPermissions: [ { @@ -1725,7 +1725,7 @@ export const Catalog: CatalogStory = { }); } else { jotaiStore.set(currentUserWorkspaceState.atom, { - permissionFlags: [], + permissionFlagGrants: [], twoFactorAuthenticationMethodSummary: null, objectsPermissions: [ { diff --git a/packages/twenty-front/src/modules/settings/billing/components/SettingsBillingSubscriptionInfo.tsx b/packages/twenty-front/src/modules/settings/billing/components/SettingsBillingSubscriptionInfo.tsx index 5bb19072e78..f53bdef3a84 100644 --- a/packages/twenty-front/src/modules/settings/billing/components/SettingsBillingSubscriptionInfo.tsx +++ b/packages/twenty-front/src/modules/settings/billing/components/SettingsBillingSubscriptionInfo.tsx @@ -24,7 +24,7 @@ import { useNextBillingPhase } from '@/settings/billing/hooks/useNextBillingPhas import { useNextBillingSeats } from '@/settings/billing/hooks/useNextBillingSeats'; import { useNextPlan } from '@/settings/billing/hooks/useNextPlan'; import { useSplitPhaseItemsInPrices } from '@/settings/billing/hooks/useSplitPhaseItemsInPrices'; -import { usePermissionFlagMap } from '@/settings/roles/hooks/usePermissionFlagMap'; +import { usePermissionFlagGrantMap } from '@/settings/roles/hooks/usePermissionFlagGrantMap'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal'; import { useModal } from '@/ui/layout/modal/hooks/useModal'; @@ -190,7 +190,7 @@ export const SettingsBillingSubscriptionInfo = ({ useEndSubscriptionTrialPeriod(); const { [PermissionFlagType.WORKSPACE]: hasPermissionToEndTrialPeriod } = - usePermissionFlagMap(); + usePermissionFlagGrantMap(); const seats = currentBillingSubscription.billingSubscriptionItems?.find( (item) => diff --git a/packages/twenty-front/src/modules/settings/components/SettingsProtectedRouteWrapper.tsx b/packages/twenty-front/src/modules/settings/components/SettingsProtectedRouteWrapper.tsx index ea2ab0160d6..1c4bcd9e7d4 100644 --- a/packages/twenty-front/src/modules/settings/components/SettingsProtectedRouteWrapper.tsx +++ b/packages/twenty-front/src/modules/settings/components/SettingsProtectedRouteWrapper.tsx @@ -1,5 +1,5 @@ import { useHasAccessTokenPair } from '@/auth/hooks/useHasAccessTokenPair'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { type ReactNode } from 'react'; import { Navigate, Outlet } from 'react-router-dom'; @@ -22,7 +22,7 @@ export const SettingsProtectedRouteWrapper = ({ requiredFeatureFlag, }: SettingsProtectedRouteWrapperProps) => { const hasAccessTokenPair = useHasAccessTokenPair(); - const hasPermission = useHasPermissionFlag(settingsPermission); + const hasPermission = useHasPermissionFlagGrant(settingsPermission); const requiredFeatureFlagEnabled = useIsFeatureEnabled( requiredFeatureFlag || null, ); diff --git a/packages/twenty-front/src/modules/settings/hooks/__tests__/useSettingsNavigationItems.test.tsx b/packages/twenty-front/src/modules/settings/hooks/__tests__/useSettingsNavigationItems.test.tsx index cc97909a7cb..6d19a83e629 100644 --- a/packages/twenty-front/src/modules/settings/hooks/__tests__/useSettingsNavigationItems.test.tsx +++ b/packages/twenty-front/src/modules/settings/hooks/__tests__/useSettingsNavigationItems.test.tsx @@ -12,7 +12,7 @@ import { import { currentUserState } from '@/auth/states/currentUserState'; import { billingState } from '@/client-config/states/billingState'; -import { usePermissionFlagMap } from '@/settings/roles/hooks/usePermissionFlagMap'; +import { usePermissionFlagGrantMap } from '@/settings/roles/hooks/usePermissionFlagGrantMap'; import { SnackBarComponentInstanceContext } from '@/ui/feedback/snack-bar-manager/contexts/SnackBarComponentInstanceContext'; import { jotaiStore, @@ -65,8 +65,8 @@ const Wrapper = ({ children }: { children: ReactNode }) => ( ); -jest.mock('@/settings/roles/hooks/usePermissionFlagMap', () => ({ - usePermissionFlagMap: jest.fn(), +jest.mock('@/settings/roles/hooks/usePermissionFlagGrantMap', () => ({ + usePermissionFlagGrantMap: jest.fn(), })); jest.mock('@/domain-manager/hooks/useRedirectToWorkspaceDomain', () => ({ @@ -83,7 +83,7 @@ describe('useSettingsNavigationItems', () => { }); it('should hide workspace settings when no permissions', () => { - (usePermissionFlagMap as jest.Mock).mockImplementation(() => ({ + (usePermissionFlagGrantMap as jest.Mock).mockImplementation(() => ({ [PermissionFlagType.WORKSPACE]: false, [PermissionFlagType.WORKSPACE_MEMBERS]: false, [PermissionFlagType.DATA_MODEL]: false, @@ -105,7 +105,7 @@ describe('useSettingsNavigationItems', () => { }); it('should show workspace settings when has permissions', () => { - (usePermissionFlagMap as jest.Mock).mockImplementation(() => ({ + (usePermissionFlagGrantMap as jest.Mock).mockImplementation(() => ({ [PermissionFlagType.WORKSPACE]: true, [PermissionFlagType.WORKSPACE_MEMBERS]: true, [PermissionFlagType.DATA_MODEL]: true, @@ -127,7 +127,7 @@ describe('useSettingsNavigationItems', () => { }); it('should show user section items regardless of permissions', () => { - (usePermissionFlagMap as jest.Mock).mockImplementation(() => ({ + (usePermissionFlagGrantMap as jest.Mock).mockImplementation(() => ({ [PermissionFlagType.WORKSPACE]: false, [PermissionFlagType.WORKSPACE_MEMBERS]: false, [PermissionFlagType.DATA_MODEL]: false, diff --git a/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx b/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx index 4a23f88b9f3..21d4c9f3c9e 100644 --- a/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx +++ b/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx @@ -5,7 +5,7 @@ import { currentUserState } from '@/auth/states/currentUserState'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { billingState } from '@/client-config/states/billingState'; import { supportChatState } from '@/client-config/states/supportChatState'; -import { usePermissionFlagMap } from '@/settings/roles/hooks/usePermissionFlagMap'; +import { usePermissionFlagGrantMap } from '@/settings/roles/hooks/usePermissionFlagGrantMap'; import { getDocumentationUrl } from '@/support/utils/getDocumentationUrl'; import { type NavigationDrawerItemIndentationLevel, @@ -72,7 +72,7 @@ const useSettingsNavigationItems = (): SettingsNavigationSection[] => { supportChat?.supportDriver === 'FRONT' && isNonEmptyString(supportChat.supportFrontChatId); - const permissionMap = usePermissionFlagMap(); + const permissionMap = usePermissionFlagGrantMap(); return [ { label: t`User`, diff --git a/packages/twenty-front/src/modules/settings/profile/hooks/useCanChangePassword.ts b/packages/twenty-front/src/modules/settings/profile/hooks/useCanChangePassword.ts index d980edcdd7a..b8402b1717c 100644 --- a/packages/twenty-front/src/modules/settings/profile/hooks/useCanChangePassword.ts +++ b/packages/twenty-front/src/modules/settings/profile/hooks/useCanChangePassword.ts @@ -14,7 +14,7 @@ export const useCanChangePassword = () => { return { canChangePassword: true }; } - const hasBypassPermission = currentUserWorkspace?.permissionFlags?.includes( + const hasBypassPermission = currentUserWorkspace?.permissionFlagGrants?.includes( PermissionFlagType.SSO_BYPASS, ); diff --git a/packages/twenty-front/src/modules/settings/profile/hooks/useCanEditProfileField.ts b/packages/twenty-front/src/modules/settings/profile/hooks/useCanEditProfileField.ts index d6731516b6f..fd6c43154fd 100644 --- a/packages/twenty-front/src/modules/settings/profile/hooks/useCanEditProfileField.ts +++ b/packages/twenty-front/src/modules/settings/profile/hooks/useCanEditProfileField.ts @@ -23,8 +23,8 @@ export const useCanEditProfileField = (field: EditableProfileField) => { const editableFields = currentWorkspace.editableProfileFields ?? []; const workspaceAllowsField = editableFields.includes(field); - const permissionFlags = currentUserWorkspace.permissionFlags ?? []; - const hasProfilePermission = permissionFlags.includes( + const permissionFlagGrants = currentUserWorkspace.permissionFlagGrants ?? []; + const hasProfilePermission = permissionFlagGrants.includes( PermissionFlagType.PROFILE_INFORMATION, ); diff --git a/packages/twenty-front/src/modules/settings/roles/graphql/fragments/permissionFlagFragment.ts b/packages/twenty-front/src/modules/settings/roles/graphql/fragments/permissionFlagFragment.ts deleted file mode 100644 index 58c1ef429a9..00000000000 --- a/packages/twenty-front/src/modules/settings/roles/graphql/fragments/permissionFlagFragment.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { gql } from '@apollo/client'; - -export const PERMISSION_FLAG_FRAGMENT = gql` - fragment PermissionFlagFragment on PermissionFlag { - id - flag - roleId - } -`; diff --git a/packages/twenty-front/src/modules/settings/roles/graphql/fragments/permissionFlagGrantFragment.ts b/packages/twenty-front/src/modules/settings/roles/graphql/fragments/permissionFlagGrantFragment.ts new file mode 100644 index 00000000000..92994135b5e --- /dev/null +++ b/packages/twenty-front/src/modules/settings/roles/graphql/fragments/permissionFlagGrantFragment.ts @@ -0,0 +1,9 @@ +import { gql } from '@apollo/client'; + +export const PERMISSION_FLAG_GRANT_FRAGMENT = gql` + fragment PermissionFlagGrantFragment on PermissionFlagGrant { + id + flag + roleId + } +`; diff --git a/packages/twenty-front/src/modules/settings/roles/graphql/mutations/upsertPermissionFlagGrantsMutation.ts b/packages/twenty-front/src/modules/settings/roles/graphql/mutations/upsertPermissionFlagGrantsMutation.ts new file mode 100644 index 00000000000..49e5f5216de --- /dev/null +++ b/packages/twenty-front/src/modules/settings/roles/graphql/mutations/upsertPermissionFlagGrantsMutation.ts @@ -0,0 +1,15 @@ +import { PERMISSION_FLAG_GRANT_FRAGMENT } from '@/settings/roles/graphql/fragments/permissionFlagGrantFragment'; +import { gql } from '@apollo/client'; + +export const UPSERT_PERMISSION_FLAGS = gql` + ${PERMISSION_FLAG_GRANT_FRAGMENT} + mutation UpsertPermissionFlagGrants( + $upsertPermissionFlagGrantsInput: UpsertPermissionFlagGrantsInput! + ) { + upsertPermissionFlagGrants( + upsertPermissionFlagGrantsInput: $upsertPermissionFlagGrantsInput + ) { + ...PermissionFlagGrantFragment + } + } +`; diff --git a/packages/twenty-front/src/modules/settings/roles/graphql/mutations/upsertPermissionFlagsMutation.ts b/packages/twenty-front/src/modules/settings/roles/graphql/mutations/upsertPermissionFlagsMutation.ts deleted file mode 100644 index 2e4d1c4759d..00000000000 --- a/packages/twenty-front/src/modules/settings/roles/graphql/mutations/upsertPermissionFlagsMutation.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { PERMISSION_FLAG_FRAGMENT } from '@/settings/roles/graphql/fragments/permissionFlagFragment'; -import { gql } from '@apollo/client'; - -export const UPSERT_PERMISSION_FLAGS = gql` - ${PERMISSION_FLAG_FRAGMENT} - mutation UpsertPermissionFlags( - $upsertPermissionFlagsInput: UpsertPermissionFlagsInput! - ) { - upsertPermissionFlags( - upsertPermissionFlagsInput: $upsertPermissionFlagsInput - ) { - ...PermissionFlagFragment - } - } -`; diff --git a/packages/twenty-front/src/modules/settings/roles/graphql/queries/getRolesQuery.ts b/packages/twenty-front/src/modules/settings/roles/graphql/queries/getRolesQuery.ts index 4fe85d8604c..33673f2ff97 100644 --- a/packages/twenty-front/src/modules/settings/roles/graphql/queries/getRolesQuery.ts +++ b/packages/twenty-front/src/modules/settings/roles/graphql/queries/getRolesQuery.ts @@ -2,7 +2,7 @@ import { AGENT_FRAGMENT } from '@/ai/graphql/fragments/agentFragment'; import { API_KEY_FOR_ROLE_FRAGMENT } from '@/settings/roles/graphql/fragments/apiKeyForRoleFragment'; import { FIELD_PERMISSION_FRAGMENT } from '@/settings/roles/graphql/fragments/fieldPermissionFragment'; import { OBJECT_PERMISSION_FRAGMENT } from '@/settings/roles/graphql/fragments/objectPermissionFragment'; -import { PERMISSION_FLAG_FRAGMENT } from '@/settings/roles/graphql/fragments/permissionFlagFragment'; +import { PERMISSION_FLAG_GRANT_FRAGMENT } from '@/settings/roles/graphql/fragments/permissionFlagGrantFragment'; import { ROLE_FRAGMENT } from '@/settings/roles/graphql/fragments/roleFragment'; import { ROW_LEVEL_PERMISSION_PREDICATE_FRAGMENT } from '@/settings/roles/graphql/fragments/rowLevelPermissionPredicateFragment'; import { ROW_LEVEL_PERMISSION_PREDICATE_GROUP_FRAGMENT } from '@/settings/roles/graphql/fragments/rowLevelPermissionPredicateGroupFragment'; @@ -14,7 +14,7 @@ export const GET_ROLES = gql` ${ROLE_FRAGMENT} ${AGENT_FRAGMENT} ${API_KEY_FOR_ROLE_FRAGMENT} - ${PERMISSION_FLAG_FRAGMENT} + ${PERMISSION_FLAG_GRANT_FRAGMENT} ${OBJECT_PERMISSION_FRAGMENT} ${FIELD_PERMISSION_FRAGMENT} ${ROW_LEVEL_PERMISSION_PREDICATE_FRAGMENT} @@ -31,8 +31,8 @@ export const GET_ROLES = gql` apiKeys { ...ApiKeyForRoleFragment } - permissionFlags { - ...PermissionFlagFragment + permissionFlagGrants { + ...PermissionFlagGrantFragment } objectPermissions { ...ObjectPermissionFragment diff --git a/packages/twenty-front/src/modules/settings/roles/hooks/useHasPermissionFlag.ts b/packages/twenty-front/src/modules/settings/roles/hooks/useHasPermissionFlagGrant.ts similarity index 68% rename from packages/twenty-front/src/modules/settings/roles/hooks/useHasPermissionFlag.ts rename to packages/twenty-front/src/modules/settings/roles/hooks/useHasPermissionFlagGrant.ts index 1debfaec71c..315d77891a3 100644 --- a/packages/twenty-front/src/modules/settings/roles/hooks/useHasPermissionFlag.ts +++ b/packages/twenty-front/src/modules/settings/roles/hooks/useHasPermissionFlagGrant.ts @@ -6,22 +6,22 @@ import { import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; -export const useHasPermissionFlag = (permissionFlag?: PermissionFlagType) => { +export const useHasPermissionFlagGrant = (permissionFlagGrant?: PermissionFlagType) => { const currentWorkspace = useAtomStateValue(currentWorkspaceState); const currentUserWorkspace = useAtomStateValue(currentUserWorkspaceState); - if (!permissionFlag) { + if (!permissionFlagGrant) { return true; } if ( - permissionFlag === PermissionFlagType.WORKSPACE && + permissionFlagGrant === PermissionFlagType.WORKSPACE && currentWorkspace?.activationStatus === WorkspaceActivationStatus.PENDING_CREATION ) { return true; } - const userFlags = currentUserWorkspace?.permissionFlags ?? []; - return userFlags.includes(permissionFlag); + const userFlags = currentUserWorkspace?.permissionFlagGrants ?? []; + return userFlags.includes(permissionFlagGrant); }; diff --git a/packages/twenty-front/src/modules/settings/roles/hooks/usePermissionFlagMap.ts b/packages/twenty-front/src/modules/settings/roles/hooks/usePermissionFlagGrantMap.ts similarity index 86% rename from packages/twenty-front/src/modules/settings/roles/hooks/usePermissionFlagMap.ts rename to packages/twenty-front/src/modules/settings/roles/hooks/usePermissionFlagGrantMap.ts index c6fac51425c..25a4f7be5e8 100644 --- a/packages/twenty-front/src/modules/settings/roles/hooks/usePermissionFlagMap.ts +++ b/packages/twenty-front/src/modules/settings/roles/hooks/usePermissionFlagGrantMap.ts @@ -3,11 +3,11 @@ import { PermissionFlagType } from '~/generated-metadata/graphql'; import { buildRecordFromKeysWithSameValue } from '~/utils/array/buildRecordFromKeysWithSameValue'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; -export const usePermissionFlagMap = (): Record => { +export const usePermissionFlagGrantMap = (): Record => { const currentUserWorkspace = useAtomStateValue(currentUserWorkspaceState); const currentUserWorkspaceSettingsPermissions = - currentUserWorkspace?.permissionFlags; + currentUserWorkspace?.permissionFlagGrants; const initialPermissions = buildRecordFromKeysWithSameValue( Object.values(PermissionFlagType), diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsSection.tsx b/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsSection.tsx index d52acbbd230..613503dfeab 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsSection.tsx +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsSection.tsx @@ -1,7 +1,7 @@ import { SettingsOptionCardContentToggle } from '@/settings/components/SettingsOptions/SettingsOptionCardContentToggle'; import { SettingsRolePermissionsSettingsTableHeader } from '@/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader'; import { SettingsRolePermissionsSettingsTableRow } from '@/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableRow'; -import { useSettingsRolePermissionFlagConfig } from '@/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig'; +import { useSettingsRolePermissionFlagGrantConfig } from '@/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagGrantConfig'; import { settingsDraftRoleFamilyState } from '@/settings/roles/states/settingsDraftRoleFamilyState'; import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue'; import { useSetAtomFamilyState } from '@/ui/utilities/state/jotai/hooks/useSetAtomFamilyState'; @@ -42,7 +42,7 @@ export const SettingsRolePermissionsSettingsSection = ({ roleId, ); - const settingsPermissionsConfig = useSettingsRolePermissionFlagConfig({ + const settingsPermissionsConfig = useSettingsRolePermissionFlagGrantConfig({ assignmentCapabilities: { canBeAssignedToAgents: settingsDraftRole.canBeAssignedToAgents, canBeAssignedToUsers: settingsDraftRole.canBeAssignedToUsers, diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx b/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx index b249618f37d..a24cf19c846 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx @@ -31,15 +31,15 @@ export const SettingsRolePermissionsSettingsTableHeader = ({ ); const allSettingsPermissionsEnabled = settingsPermissionsConfig.every( (permission) => - settingsDraftRole.permissionFlags?.some( - (permissionFlag) => permissionFlag.flag === permission.key, + settingsDraftRole.permissionFlagGrants?.some( + (permissionFlagGrant) => permissionFlagGrant.flag === permission.key, ), ); const someSettingsPermissionsEnabled = settingsPermissionsConfig.some( (permission) => - settingsDraftRole.permissionFlags?.some( - (permissionFlag) => permissionFlag.flag === permission.key, + settingsDraftRole.permissionFlagGrants?.some( + (permissionFlagGrant) => permissionFlagGrant.flag === permission.key, ), ); @@ -64,7 +64,7 @@ export const SettingsRolePermissionsSettingsTableHeader = ({ setSettingsDraftRole({ ...settingsDraftRole, - permissionFlags: newValue + permissionFlagGrants: newValue ? settingsPermissionsConfig.map((permission) => ({ id: v4(), flag: permission.key, diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableRow.tsx b/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableRow.tsx index 5228a82b2a3..b90a0cd6921 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableRow.tsx +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableRow.tsx @@ -47,8 +47,8 @@ export const SettingsRolePermissionsSettingsTableRow = ({ ); const isPermissionEnabled = - settingsDraftRole.permissionFlags?.some( - (permissionFlag) => permissionFlag.flag === permission.key, + settingsDraftRole.permissionFlagGrants?.some( + (permissionFlagGrant) => permissionFlagGrant.flag === permission.key, ) ?? false; const isAllSettingsOverride = @@ -64,12 +64,12 @@ export const SettingsRolePermissionsSettingsTableRow = ({ ); const handleChange = (value: boolean) => { - const currentPermissions = settingsDraftRole.permissionFlags ?? []; + const currentPermissions = settingsDraftRole.permissionFlagGrants ?? []; if (value === true) { setSettingsDraftRole({ ...settingsDraftRole, - permissionFlags: [ + permissionFlagGrants: [ ...currentPermissions, { id: v4(), @@ -81,7 +81,7 @@ export const SettingsRolePermissionsSettingsTableRow = ({ } else { setSettingsDraftRole({ ...settingsDraftRole, - permissionFlags: currentPermissions.filter( + permissionFlagGrants: currentPermissions.filter( (p) => p.flag !== permission.key, ), }); diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsToolSection.tsx b/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsToolSection.tsx index bb95fbc2e3b..d518788d682 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsToolSection.tsx +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsToolSection.tsx @@ -1,7 +1,7 @@ import { SettingsOptionCardContentToggle } from '@/settings/components/SettingsOptions/SettingsOptionCardContentToggle'; import { SettingsRolePermissionsSettingsTableHeader } from '@/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader'; import { SettingsRolePermissionsSettingsTableRow } from '@/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableRow'; -import { useActionRolePermissionFlagConfig } from '@/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig'; +import { useActionRolePermissionFlagGrantConfig } from '@/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagGrantConfig'; import { settingsDraftRoleFamilyState } from '@/settings/roles/states/settingsDraftRoleFamilyState'; import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue'; import { useSetAtomFamilyState } from '@/ui/utilities/state/jotai/hooks/useSetAtomFamilyState'; @@ -43,7 +43,7 @@ export const SettingsRolePermissionsToolSection = ({ roleId, ); - const toolPermissionsConfig = useActionRolePermissionFlagConfig({ + const toolPermissionsConfig = useActionRolePermissionFlagGrantConfig({ assignmentCapabilities: { canBeAssignedToAgents: settingsDraftRole.canBeAssignedToAgents, canBeAssignedToUsers: settingsDraftRole.canBeAssignedToUsers, diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts b/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagGrantConfig.ts similarity index 95% rename from packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts rename to packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagGrantConfig.ts index 714c51c8b4b..6167e6c0a04 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagGrantConfig.ts @@ -15,7 +15,7 @@ import { } from 'twenty-ui/display'; import { PermissionFlagType } from '~/generated-metadata/graphql'; -type UseActionRolePermissionFlagConfigParams = { +type UseActionRolePermissionFlagGrantConfigParams = { assignmentCapabilities?: { canBeAssignedToAgents?: boolean; canBeAssignedToUsers?: boolean; @@ -23,9 +23,9 @@ type UseActionRolePermissionFlagConfigParams = { }; }; -export const useActionRolePermissionFlagConfig = ({ +export const useActionRolePermissionFlagGrantConfig = ({ assignmentCapabilities, -}: UseActionRolePermissionFlagConfigParams = {}): SettingsRolePermissionsSettingPermission[] => { +}: UseActionRolePermissionFlagGrantConfigParams = {}): SettingsRolePermissionsSettingPermission[] => { const { canBeAssignedToAgents = false, canBeAssignedToUsers = false, diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts b/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagGrantConfig.ts similarity index 96% rename from packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts rename to packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagGrantConfig.ts index ce46ad9612a..db72234aab2 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagGrantConfig.ts @@ -18,7 +18,7 @@ import { } from 'twenty-ui/display'; import { PermissionFlagType } from '~/generated-metadata/graphql'; -type UseSettingsRolePermissionFlagConfigParams = { +type UseSettingsRolePermissionFlagGrantConfigParams = { assignmentCapabilities?: { canBeAssignedToAgents?: boolean; canBeAssignedToUsers?: boolean; @@ -26,9 +26,9 @@ type UseSettingsRolePermissionFlagConfigParams = { }; }; -export const useSettingsRolePermissionFlagConfig = ({ +export const useSettingsRolePermissionFlagGrantConfig = ({ assignmentCapabilities, -}: UseSettingsRolePermissionFlagConfigParams = {}): SettingsRolePermissionsSettingPermission[] => { +}: UseSettingsRolePermissionFlagGrantConfigParams = {}): SettingsRolePermissionsSettingPermission[] => { const { canBeAssignedToAgents = false, canBeAssignedToUsers = false, diff --git a/packages/twenty-front/src/modules/settings/roles/role/hooks/useSaveDraftRoleToDB.ts b/packages/twenty-front/src/modules/settings/roles/role/hooks/useSaveDraftRoleToDB.ts index c18cca8a7b5..17483d99451 100644 --- a/packages/twenty-front/src/modules/settings/roles/role/hooks/useSaveDraftRoleToDB.ts +++ b/packages/twenty-front/src/modules/settings/roles/role/hooks/useSaveDraftRoleToDB.ts @@ -19,7 +19,7 @@ import { UpdateOneRoleDocument, UpsertFieldPermissionsDocument, UpsertObjectPermissionsDocument, - UpsertPermissionFlagsDocument, + UpsertPermissionFlagGrantsDocument, } from '~/generated-metadata/graphql'; import { getDirtyFields } from '~/utils/getDirtyFields'; @@ -49,7 +49,7 @@ export const useSaveDraftRoleToDB = ({ }) => { const [createRole] = useMutation(CreateOneRoleDocument); const [updateRole] = useMutation(UpdateOneRoleDocument); - const [upsertPermissionFlags] = useMutation(UpsertPermissionFlagsDocument); + const [upsertPermissionFlagGrants] = useMutation(UpsertPermissionFlagGrantsDocument); const [upsertObjectPermissions] = useMutation( UpsertObjectPermissionsDocument, ); @@ -164,14 +164,14 @@ export const useSaveDraftRoleToDB = ({ }; const updateExistingRole = async () => { - if (isDefined(dirtyFields.permissionFlags)) { - await upsertPermissionFlags({ + if (isDefined(dirtyFields.permissionFlagGrants)) { + await upsertPermissionFlagGrants({ variables: { - upsertPermissionFlagsInput: { + upsertPermissionFlagGrantsInput: { roleId: roleId, - permissionFlagKeys: - settingsDraftRole.permissionFlags?.map( - (permissionFlag) => permissionFlag.flag, + permissionFlagGrantKeys: + settingsDraftRole.permissionFlagGrants?.map( + (permissionFlagGrant) => permissionFlagGrant.flag, ) ?? [], }, }, @@ -361,14 +361,14 @@ export const useSaveDraftRoleToDB = ({ }; const upsertRolePermissions = async (targetRoleId: string) => { - if (isDefined(dirtyFields.permissionFlags)) { - await upsertPermissionFlags({ + if (isDefined(dirtyFields.permissionFlagGrants)) { + await upsertPermissionFlagGrants({ variables: { - upsertPermissionFlagsInput: { + upsertPermissionFlagGrantsInput: { roleId: targetRoleId, - permissionFlagKeys: - settingsDraftRole.permissionFlags?.map( - (permissionFlag) => permissionFlag.flag, + permissionFlagGrantKeys: + settingsDraftRole.permissionFlagGrants?.map( + (permissionFlagGrant) => permissionFlagGrant.flag, ) ?? [], }, }, diff --git a/packages/twenty-front/src/modules/settings/roles/states/settingsDraftRoleFamilyState.ts b/packages/twenty-front/src/modules/settings/roles/states/settingsDraftRoleFamilyState.ts index 7e44e2b5667..82f59a86c6b 100644 --- a/packages/twenty-front/src/modules/settings/roles/states/settingsDraftRoleFamilyState.ts +++ b/packages/twenty-front/src/modules/settings/roles/states/settingsDraftRoleFamilyState.ts @@ -20,7 +20,7 @@ export const settingsDraftRoleFamilyState = createAtomFamilyState< canAccessAllTools: false, isEditable: false, workspaceMembers: [], - permissionFlags: [], + permissionFlagGrants: [], objectPermissions: [], fieldPermissions: [], rowLevelPermissionPredicates: [], diff --git a/packages/twenty-front/src/modules/users/graphql/fragments/userQueryFragment.ts b/packages/twenty-front/src/modules/users/graphql/fragments/userQueryFragment.ts index a6b4be4c056..f4ab2181371 100644 --- a/packages/twenty-front/src/modules/users/graphql/fragments/userQueryFragment.ts +++ b/packages/twenty-front/src/modules/users/graphql/fragments/userQueryFragment.ts @@ -34,7 +34,7 @@ export const USER_QUERY_FRAGMENT = gql` } currentUserWorkspace { id - permissionFlags + permissionFlagGrants objectsPermissions { ...ObjectPermissionFragment } diff --git a/packages/twenty-front/src/modules/users/hooks/useLoadCurrentUser.ts b/packages/twenty-front/src/modules/users/hooks/useLoadCurrentUser.ts index 819df2e5d4a..4e70d675252 100644 --- a/packages/twenty-front/src/modules/users/hooks/useLoadCurrentUser.ts +++ b/packages/twenty-front/src/modules/users/hooks/useLoadCurrentUser.ts @@ -74,7 +74,7 @@ export const useLoadCurrentUser = () => { if (isDefined(user.currentUserWorkspace)) { setCurrentUserWorkspace({ - permissionFlags: user.currentUserWorkspace.permissionFlags ?? [], + permissionFlagGrants: user.currentUserWorkspace.permissionFlagGrants ?? [], twoFactorAuthenticationMethodSummary: user.currentUserWorkspace.twoFactorAuthenticationMethodSummary ?? [], objectsPermissions: diff --git a/packages/twenty-front/src/modules/views/hooks/useCanPersistViewChanges.ts b/packages/twenty-front/src/modules/views/hooks/useCanPersistViewChanges.ts index 50df6c77cbd..524be4803d7 100644 --- a/packages/twenty-front/src/modules/views/hooks/useCanPersistViewChanges.ts +++ b/packages/twenty-front/src/modules/views/hooks/useCanPersistViewChanges.ts @@ -1,4 +1,4 @@ -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { useGetCurrentViewOnly } from '@/views/hooks/useGetCurrentViewOnly'; import { ViewVisibility, @@ -7,7 +7,7 @@ import { export const useCanPersistViewChanges = () => { const { currentView } = useGetCurrentViewOnly(); - const hasViewsPermission = useHasPermissionFlag(PermissionFlagType.VIEWS); + const hasViewsPermission = useHasPermissionFlagGrant(PermissionFlagType.VIEWS); if (!currentView) { return { canPersistChanges: false }; diff --git a/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerContentEffect.tsx b/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerContentEffect.tsx index d0727b29bf1..b737815ef8b 100644 --- a/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerContentEffect.tsx +++ b/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerContentEffect.tsx @@ -1,7 +1,7 @@ import { useEffect } from 'react'; import { useContextStoreObjectMetadataItemOrThrow } from '@/context-store/hooks/useContextStoreObjectMetadataItemOrThrow'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { useAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useAtomComponentState'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState'; @@ -77,7 +77,7 @@ export const ViewPickerContentEffect = () => { const { availableFieldsForGrouping } = useGetAvailableFieldsToGroupRecordsBy(); const { availableFieldsForCalendar } = useGetAvailableFieldsForCalendar(); - const hasViewPermission = useHasPermissionFlag(PermissionFlagType.VIEWS); + const hasViewPermission = useHasPermissionFlagGrant(PermissionFlagType.VIEWS); useEffect(() => { if ( diff --git a/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerOptionDropdown.tsx b/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerOptionDropdown.tsx index 8a7a80ada40..832f195088e 100644 --- a/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerOptionDropdown.tsx +++ b/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerOptionDropdown.tsx @@ -1,6 +1,6 @@ import { useCreateManyNavigationMenuItems } from '@/navigation-menu-item/common/hooks/useCreateManyNavigationMenuItems'; import { useNavigationMenuItemsData } from '@/navigation-menu-item/display/hooks/useNavigationMenuItemsData'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { DropdownContent } from '@/ui/layout/dropdown/components/DropdownContent'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown'; @@ -53,7 +53,7 @@ export const ViewPickerOptionDropdown = ({ const setViewPickerReferenceViewId = useSetAtomComponentState( viewPickerReferenceViewIdComponentState, ); - const hasViewsPermission = useHasPermissionFlag(PermissionFlagType.VIEWS); + const hasViewsPermission = useHasPermissionFlagGrant(PermissionFlagType.VIEWS); const { createManyNavigationMenuItems } = useCreateManyNavigationMenuItems(); const { navigationMenuItems, currentWorkspaceMemberId } = diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsFlagList.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsFlagList.tsx index 1c4d29b46cb..ec71c366b18 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsFlagList.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsFlagList.tsx @@ -6,21 +6,21 @@ import { WorkflowAiAgentPermissionsFlagRow } from './WorkflowAiAgentPermissionsF type WorkflowAiAgentPermissionsFlagListProps = { title: string; permissions: SettingsRolePermissionsSettingPermission[]; - enabledPermissionFlagKeys: PermissionFlagType[]; + enabledPermissionFlagGrantKeys: PermissionFlagType[]; readonly: boolean; showDeleteButton?: boolean; - onAddPermissionFlag?: (permissionKey: PermissionFlagType) => void; - onDeletePermissionFlag?: (permissionKey: PermissionFlagType) => void; + onAddPermissionFlagGrant?: (permissionKey: PermissionFlagType) => void; + onDeletePermissionFlagGrant?: (permissionKey: PermissionFlagType) => void; }; export const WorkflowAiAgentPermissionsFlagList = ({ title, permissions, - enabledPermissionFlagKeys, + enabledPermissionFlagGrantKeys, readonly, showDeleteButton = false, - onAddPermissionFlag, - onDeletePermissionFlag, + onAddPermissionFlagGrant, + onDeletePermissionFlagGrant, }: WorkflowAiAgentPermissionsFlagListProps) => { if (permissions.length === 0) { return null; @@ -29,7 +29,7 @@ export const WorkflowAiAgentPermissionsFlagList = ({ return ( {permissions.map((permission) => { - const isEnabled = enabledPermissionFlagKeys.includes(permission.key); + const isEnabled = enabledPermissionFlagGrantKeys.includes(permission.key); return ( onAddPermissionFlag?.(permission.key)} - onDelete={() => onDeletePermissionFlag?.(permission.key)} + onAdd={() => onAddPermissionFlagGrant?.(permission.key)} + onDelete={() => onDeletePermissionFlagGrant?.(permission.key)} /> ); })} diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx index 5aba5c6a890..eb1a2a669f8 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx @@ -1,5 +1,5 @@ import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; -import { useActionRolePermissionFlagConfig } from '@/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig'; +import { useActionRolePermissionFlagGrantConfig } from '@/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagGrantConfig'; import { SidePanelSubPageNavigationHeader } from '@/side-panel/pages/common/components/SidePanelSubPageNavigationHeader'; import { TextInput } from '@/ui/input/components/TextInput'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; @@ -98,12 +98,12 @@ export const WorkflowAiAgentPermissionsTab = ({ (item) => item.id === workflowAiAgentActionAgent?.roleId, ); const objectPermissions = role?.objectPermissions || []; - const permissionFlagKeys = - role?.permissionFlags?.map((permissionFlag) => permissionFlag.flag) ?? []; + const permissionFlagGrantKeys = + role?.permissionFlagGrants?.map((permissionFlagGrant) => permissionFlagGrant.flag) ?? []; const hasRoleWithPermissions = isDefined(workflowAiAgentActionAgent?.roleId) && - (objectPermissions.length > 0 || permissionFlagKeys.length > 0); - const actionPermissionsConfig = useActionRolePermissionFlagConfig({ + (objectPermissions.length > 0 || permissionFlagGrantKeys.length > 0); + const actionPermissionsConfig = useActionRolePermissionFlagGrantConfig({ assignmentCapabilities: { canBeAssignedToAgents: true }, }); @@ -119,7 +119,7 @@ export const WorkflowAiAgentPermissionsTab = ({ filteredEnabledPermissions: filteredEnabledActionPermissions, } = getFilteredPermissions({ permissions: actionPermissionsConfig, - permissionFlagKeys, + permissionFlagGrantKeys, searchQuery, }); @@ -134,12 +134,12 @@ export const WorkflowAiAgentPermissionsTab = ({ const { handleAddPermission, handleDeletePermission, - handleAddPermissionFlag, - handleDeletePermissionFlag, + handleAddPermissionFlagGrant, + handleDeletePermissionFlagGrant, } = useWorkflowAiAgentPermissionActions({ readonly, objectPermissions, - permissionFlagKeys, + permissionFlagGrantKeys, refetchAgentAndRoles, }); @@ -237,9 +237,9 @@ export const WorkflowAiAgentPermissionsTab = ({ )} @@ -255,10 +255,10 @@ export const WorkflowAiAgentPermissionsTab = ({ )} diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/workflowAiAgentPermissions.utils.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/workflowAiAgentPermissions.utils.ts index cdd6267d3a4..e709cf473e9 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/workflowAiAgentPermissions.utils.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/workflowAiAgentPermissions.utils.ts @@ -10,11 +10,11 @@ export const getFilteredPermissions = < T extends { key: PermissionFlagType; name: string }, >({ permissions, - permissionFlagKeys, + permissionFlagGrantKeys, searchQuery, }: { permissions: T[]; - permissionFlagKeys: PermissionFlagType[]; + permissionFlagGrantKeys: PermissionFlagType[]; searchQuery: string; }): FilteredPermissionsResult => { const filteredPermissions = filterBySearchQuery({ @@ -24,7 +24,7 @@ export const getFilteredPermissions = < }); const enabledPermissions = permissions.filter((permission) => - permissionFlagKeys.includes(permission.key), + permissionFlagGrantKeys.includes(permission.key), ); const filteredEnabledPermissions = filterBySearchQuery({ diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useWorkflowAiAgentPermissionActions.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useWorkflowAiAgentPermissionActions.ts index 503054afa30..49a1e6169bb 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useWorkflowAiAgentPermissionActions.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/hooks/useWorkflowAiAgentPermissionActions.ts @@ -1,7 +1,7 @@ import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; import { type SettingsRoleObjectPermissionKey } from '@/settings/roles/role-permissions/objects-permissions/constants/SettingsRoleObjectPermissionIconConfig'; -import { useActionRolePermissionFlagConfig } from '@/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig'; -import { useSettingsRolePermissionFlagConfig } from '@/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig'; +import { useActionRolePermissionFlagGrantConfig } from '@/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagGrantConfig'; +import { useSettingsRolePermissionFlagGrantConfig } from '@/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagGrantConfig'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { CRUD_PERMISSIONS } from '@/workflow/workflow-steps/workflow-actions/ai-agent-action/constants/WorkflowAiAgentCrudPermissions'; import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState'; @@ -20,20 +20,20 @@ import { AssignRoleToAgentDocument, CreateOneRoleDocument, UpsertObjectPermissionsDocument, - UpsertPermissionFlagsDocument, + UpsertPermissionFlagGrantsDocument, } from '~/generated-metadata/graphql'; type UseWorkflowAiAgentPermissionActionsParams = { readonly: boolean; objectPermissions: ObjectPermission[]; - permissionFlagKeys: PermissionFlagType[]; + permissionFlagGrantKeys: PermissionFlagType[]; refetchAgentAndRoles: () => Promise<{ refetchedAgent?: Agent }>; }; export const useWorkflowAiAgentPermissionActions = ({ readonly, objectPermissions, - permissionFlagKeys, + permissionFlagGrantKeys, refetchAgentAndRoles, }: UseWorkflowAiAgentPermissionActionsParams) => { const { enqueueSuccessSnackBar } = useSnackBar(); @@ -41,10 +41,10 @@ export const useWorkflowAiAgentPermissionActions = ({ useAtomState(workflowAiAgentActionAgentState); const { alphaSortedActiveNonSystemObjectMetadataItems: objectMetadataItems } = useFilteredObjectMetadataItems(); - const settingsPermissionsConfig = useSettingsRolePermissionFlagConfig({ + const settingsPermissionsConfig = useSettingsRolePermissionFlagGrantConfig({ assignmentCapabilities: { canBeAssignedToAgents: true }, }); - const actionPermissionsConfig = useActionRolePermissionFlagConfig({ + const actionPermissionsConfig = useActionRolePermissionFlagGrantConfig({ assignmentCapabilities: { canBeAssignedToAgents: true }, }); @@ -60,11 +60,11 @@ export const useWorkflowAiAgentPermissionActions = ({ const [upsertObjectPermissions] = useMutation( UpsertObjectPermissionsDocument, ); - const [upsertPermissionFlags] = useMutation(UpsertPermissionFlagsDocument); + const [upsertPermissionFlagGrants] = useMutation(UpsertPermissionFlagGrantsDocument); const roleId = workflowAiAgentActionAgent?.roleId; - const permissionFlagLabelMap = useMemo( + const permissionFlagGrantLabelMap = useMemo( () => [...settingsPermissionsConfig, ...actionPermissionsConfig].reduce< Partial> @@ -296,8 +296,8 @@ export const useWorkflowAiAgentPermissionActions = ({ } }; - const handleAddPermissionFlag = async ( - permissionFlagKey: PermissionFlagType, + const handleAddPermissionFlagGrant = async ( + permissionFlagGrantKey: PermissionFlagType, ) => { if (readonly) { return; @@ -305,15 +305,15 @@ export const useWorkflowAiAgentPermissionActions = ({ const ensuredRoleId = await ensureRoleId(); - if (!ensuredRoleId || permissionFlagKeys.includes(permissionFlagKey)) { + if (!ensuredRoleId || permissionFlagGrantKeys.includes(permissionFlagGrantKey)) { return; } - await upsertPermissionFlags({ + await upsertPermissionFlagGrants({ variables: { - upsertPermissionFlagsInput: { + upsertPermissionFlagGrantsInput: { roleId: ensuredRoleId, - permissionFlagKeys: [...permissionFlagKeys, permissionFlagKey], + permissionFlagGrantKeys: [...permissionFlagGrantKeys, permissionFlagGrantKey], }, }, }); @@ -323,33 +323,33 @@ export const useWorkflowAiAgentPermissionActions = ({ setWorkflowAiAgentPermissionsSelectedObjectId(undefined); }; - const handleDeletePermissionFlag = async ( - permissionFlagKey: PermissionFlagType, + const handleDeletePermissionFlagGrant = async ( + permissionFlagGrantKey: PermissionFlagType, ) => { if (!isDefined(roleId) || readonly) { return; } - if (!permissionFlagKeys.includes(permissionFlagKey)) { + if (!permissionFlagGrantKeys.includes(permissionFlagGrantKey)) { return; } - const permissionFlagKeysAfterRemoval = permissionFlagKeys.filter( - (flag) => flag !== permissionFlagKey, + const permissionFlagGrantKeysAfterRemoval = permissionFlagGrantKeys.filter( + (flag) => flag !== permissionFlagGrantKey, ); - await upsertPermissionFlags({ + await upsertPermissionFlagGrants({ variables: { - upsertPermissionFlagsInput: { + upsertPermissionFlagGrantsInput: { roleId, - permissionFlagKeys: permissionFlagKeysAfterRemoval, + permissionFlagGrantKeys: permissionFlagGrantKeysAfterRemoval, }, }, }); await refetchAgentAndRoles(); - const permissionLabel = permissionFlagLabelMap[permissionFlagKey]; + const permissionLabel = permissionFlagGrantLabelMap[permissionFlagGrantKey]; if (isDefined(permissionLabel)) { enqueueSuccessSnackBar({ @@ -361,7 +361,7 @@ export const useWorkflowAiAgentPermissionActions = ({ return { handleAddPermission, handleDeletePermission, - handleAddPermissionFlag, - handleDeletePermissionFlag, + handleAddPermissionFlagGrant, + handleDeletePermissionFlagGrant, }; }; diff --git a/packages/twenty-front/src/pages/settings/ai/components/SettingsAgentRoleTab.tsx b/packages/twenty-front/src/pages/settings/ai/components/SettingsAgentRoleTab.tsx index b39dce2157a..d655f3c8862 100644 --- a/packages/twenty-front/src/pages/settings/ai/components/SettingsAgentRoleTab.tsx +++ b/packages/twenty-front/src/pages/settings/ai/components/SettingsAgentRoleTab.tsx @@ -130,7 +130,7 @@ export const SettingsAgentRoleTab = ({ apiKeys: [], objectPermissions: [], fieldPermissions: [], - permissionFlags: [], + permissionFlagGrants: [], rowLevelPermissionPredicateGroups: [], rowLevelPermissionPredicates: [], }); diff --git a/packages/twenty-front/src/pages/settings/applications/SettingsApplicationDetails.tsx b/packages/twenty-front/src/pages/settings/applications/SettingsApplicationDetails.tsx index 09991c6e442..7a76d7d9040 100644 --- a/packages/twenty-front/src/pages/settings/applications/SettingsApplicationDetails.tsx +++ b/packages/twenty-front/src/pages/settings/applications/SettingsApplicationDetails.tsx @@ -6,7 +6,7 @@ import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { useUpgradeApplication } from '@/marketplace/hooks/useUpgradeApplication'; import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { TabList } from '@/ui/layout/tab-list/components/TabList'; @@ -112,7 +112,7 @@ export const SettingsApplicationDetails = () => { const { upgrade, isUpgrading } = useUpgradeApplication(); - const canInstallMarketplaceApps = useHasPermissionFlag( + const canInstallMarketplaceApps = useHasPermissionFlagGrant( PermissionFlagType.MARKETPLACE_APPS, ); diff --git a/packages/twenty-front/src/pages/settings/applications/SettingsApplications.tsx b/packages/twenty-front/src/pages/settings/applications/SettingsApplications.tsx index 1240329ae44..39fd464fede 100644 --- a/packages/twenty-front/src/pages/settings/applications/SettingsApplications.tsx +++ b/packages/twenty-front/src/pages/settings/applications/SettingsApplications.tsx @@ -1,4 +1,4 @@ -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { TabList } from '@/ui/layout/tab-list/components/TabList'; @@ -22,7 +22,7 @@ const APPLICATIONS_TAB_LIST_ID = 'applications-tab-list'; export const SettingsApplications = () => { const { t } = useLingui(); - const hasDeveloperAccess = useHasPermissionFlag( + const hasDeveloperAccess = useHasPermissionFlagGrant( PermissionFlagType.API_KEYS_AND_WEBHOOKS, ); diff --git a/packages/twenty-front/src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx b/packages/twenty-front/src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx index e975d95dfd0..257ed550c02 100644 --- a/packages/twenty-front/src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx +++ b/packages/twenty-front/src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx @@ -2,7 +2,7 @@ import { CurrentApplicationContext } from '@/applications/contexts/CurrentApplic import { useInstallMarketplaceApp } from '@/marketplace/hooks/useInstallMarketplaceApp'; import { useUpgradeApplication } from '@/marketplace/hooks/useUpgradeApplication'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { TabList } from '@/ui/layout/tab-list/components/TabList'; import { activeTabIdComponentState } from '@/ui/layout/tab-list/states/activeTabIdComponentState'; @@ -46,7 +46,7 @@ export const SettingsAvailableApplicationDetails = () => { const { install, isInstalling } = useInstallMarketplaceApp(); const { upgrade, isUpgrading } = useUpgradeApplication(); - const canInstallMarketplaceApps = useHasPermissionFlag( + const canInstallMarketplaceApps = useHasPermissionFlagGrant( PermissionFlagType.MARKETPLACE_APPS, ); diff --git a/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationPermissionsTab.tsx b/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationPermissionsTab.tsx index 0338802bcca..5faeb7beefb 100644 --- a/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationPermissionsTab.tsx +++ b/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationPermissionsTab.tsx @@ -121,12 +121,12 @@ const buildSyntheticRole = ( canReadFieldValue: permission.canReadFieldValue, canUpdateFieldValue: permission.canUpdateFieldValue, })), - permissionFlags: (defaultRole.permissionFlags ?? []).map( - (permissionFlag) => ({ - __typename: 'PermissionFlag' as const, + permissionFlagGrants: (defaultRole.permissionFlagGrants ?? []).map( + (permissionFlagGrant) => ({ + __typename: 'PermissionFlagGrant' as const, id: uuidv4(), roleId: defaultRole.universalIdentifier, - flag: permissionFlag.flag, + flag: permissionFlagGrant.flag, }), ), }); diff --git a/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMember.tsx b/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMember.tsx index a977878d43d..30b97fead4d 100644 --- a/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMember.tsx +++ b/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMember.tsx @@ -6,7 +6,7 @@ import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { useImpersonationSession } from '@/auth/hooks/useImpersonationSession'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { SettingsRolesQueryEffect } from '@/settings/roles/components/SettingsRolesQueryEffect'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal'; import { useModal } from '@/ui/layout/modal/hooks/useModal'; @@ -54,7 +54,7 @@ export const SettingsWorkspaceMember = () => { const [impersonate] = useMutation(ImpersonateDocument); const isImpersonating = useAtomStateValue(isImpersonatingState); const canImpersonate = - useHasPermissionFlag(PermissionFlagType.IMPERSONATE) && !isImpersonating; + useHasPermissionFlagGrant(PermissionFlagType.IMPERSONATE) && !isImpersonating; const { roles, diff --git a/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMembers.tsx b/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMembers.tsx index 72ef55f56fb..bb93535bcbd 100644 --- a/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMembers.tsx +++ b/packages/twenty-front/src/pages/settings/members/SettingsWorkspaceMembers.tsx @@ -3,7 +3,7 @@ import { SettingsPath } from 'twenty-shared/types'; import { getSettingsPath } from 'twenty-shared/utils'; import { IconKey, IconLock, IconUsers } from 'twenty-ui/display'; -import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFlag'; +import { useHasPermissionFlagGrant } from '@/settings/roles/hooks/useHasPermissionFlagGrant'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { TabList } from '@/ui/layout/tab-list/components/TabList'; @@ -23,7 +23,7 @@ const MEMBERS_TAB_ROLES_ID = 'roles'; export const SettingsWorkspaceMembers = () => { const { t } = useLingui(); - const hasRolesPermission = useHasPermissionFlag(PermissionFlagType.ROLES); + const hasRolesPermission = useHasPermissionFlagGrant(PermissionFlagType.ROLES); const activeTabId = useAtomComponentStateValue( activeTabIdComponentState, diff --git a/packages/twenty-front/src/testing/mock-data/generated/metadata/minimal/mock-minimal-metadata.ts b/packages/twenty-front/src/testing/mock-data/generated/metadata/minimal/mock-minimal-metadata.ts index 6c338bfc2ed..498029a18d5 100644 --- a/packages/twenty-front/src/testing/mock-data/generated/metadata/minimal/mock-minimal-metadata.ts +++ b/packages/twenty-front/src/testing/mock-data/generated/metadata/minimal/mock-minimal-metadata.ts @@ -743,7 +743,7 @@ export const mockedMinimalMetadata: MinimalMetadata = "hash": "b022456a-bd5b-4314-9fb5-0111c80a8649" }, { - "collectionName": "permissionFlag", + "collectionName": "permissionFlagGrant", "hash": "2de6c5b6-3b5c-4f61-8426-92c3d4c5daac" }, { diff --git a/packages/twenty-front/src/testing/mock-data/generated/metadata/roles/mock-roles-data.ts b/packages/twenty-front/src/testing/mock-data/generated/metadata/roles/mock-roles-data.ts index 34d420f61d7..d12475266e0 100644 --- a/packages/twenty-front/src/testing/mock-data/generated/metadata/roles/mock-roles-data.ts +++ b/packages/twenty-front/src/testing/mock-data/generated/metadata/roles/mock-roles-data.ts @@ -23,7 +23,7 @@ export const mockedRoles: Role[] = "canBeAssignedToUsers": true, "canBeAssignedToAgents": false, "canBeAssignedToApiKeys": true, - "permissionFlags": [], + "permissionFlagGrants": [], "objectPermissions": [], "fieldPermissions": [], "rowLevelPermissionPredicates": [], @@ -68,7 +68,7 @@ export const mockedRoles: Role[] = "canBeAssignedToUsers": true, "canBeAssignedToAgents": false, "canBeAssignedToApiKeys": false, - "permissionFlags": [], + "permissionFlagGrants": [], "objectPermissions": [], "fieldPermissions": [], "rowLevelPermissionPredicates": [], @@ -105,7 +105,7 @@ export const mockedRoles: Role[] = "canBeAssignedToUsers": true, "canBeAssignedToAgents": true, "canBeAssignedToApiKeys": true, - "permissionFlags": [], + "permissionFlagGrants": [], "objectPermissions": [ { "__typename": "ObjectPermission", @@ -184,7 +184,7 @@ export const mockedRoles: Role[] = "canBeAssignedToUsers": true, "canBeAssignedToAgents": false, "canBeAssignedToApiKeys": false, - "permissionFlags": [], + "permissionFlagGrants": [], "objectPermissions": [], "fieldPermissions": [], "rowLevelPermissionPredicates": [], diff --git a/packages/twenty-front/src/testing/mock-data/users.ts b/packages/twenty-front/src/testing/mock-data/users.ts index 965dcdca747..f046b5e3e99 100644 --- a/packages/twenty-front/src/testing/mock-data/users.ts +++ b/packages/twenty-front/src/testing/mock-data/users.ts @@ -198,7 +198,7 @@ export const mockedUserData: MockedUser = { workspaceMember: mockedWorkspaceMemberData, currentWorkspace: mockCurrentWorkspace, currentUserWorkspace: { - permissionFlags: [ + permissionFlagGrants: [ PermissionFlagType.WORKSPACE_MEMBERS, PermissionFlagType.CONNECTED_ACCOUNTS, ], @@ -268,7 +268,7 @@ export const mockedOnboardingUserData = ( workspaceMembers: [], currentWorkspace: mockCurrentWorkspace, currentUserWorkspace: { - permissionFlags: [PermissionFlagType.WORKSPACE_MEMBERS], + permissionFlagGrants: [PermissionFlagType.WORKSPACE_MEMBERS], objectPermissions: getTestEnrichedObjectMetadataItemsMock().map( (item) => ({ objectMetadataId: item.id, diff --git a/packages/twenty-sdk/src/cli/__tests__/apps/minimal-app/__integration__/app-dev/expected-manifest.ts b/packages/twenty-sdk/src/cli/__tests__/apps/minimal-app/__integration__/app-dev/expected-manifest.ts index e6893a1a5fe..62a00a15c65 100644 --- a/packages/twenty-sdk/src/cli/__tests__/apps/minimal-app/__integration__/app-dev/expected-manifest.ts +++ b/packages/twenty-sdk/src/cli/__tests__/apps/minimal-app/__integration__/app-dev/expected-manifest.ts @@ -330,7 +330,7 @@ export const EXPECTED_MANIFEST: Manifest = { canBeAssignedToApiKeys: false, fieldPermissions: [], objectPermissions: [], - permissionFlags: [], + permissionFlagGrants: [], }, ], }; diff --git a/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/expected-manifest.ts b/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/expected-manifest.ts index 55a84fbf248..a3d96bd7a7b 100644 --- a/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/expected-manifest.ts +++ b/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/expected-manifest.ts @@ -1385,7 +1385,7 @@ export const EXPECTED_MANIFEST: Manifest = { universalIdentifier: 'c0c1c2c3-c4c5-4000-8000-000000000001', fieldPermissions: [], objectPermissions: [], - permissionFlags: [], + permissionFlagGrants: [], }, { canBeAssignedToAgents: false, @@ -1417,7 +1417,7 @@ export const EXPECTED_MANIFEST: Manifest = { objectUniversalIdentifier: '54b589ca-eeed-4950-a176-358418b85c05', }, ], - permissionFlags: [ + permissionFlagGrants: [ { universalIdentifier: '01d7865a-7700-5d49-b2aa-62623c2cbac7', flag: PermissionFlagType.APPLICATIONS, diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/transform-conditional-availability-expressions.test.ts b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/transform-conditional-availability-expressions.test.ts index df982e7521a..40d10e995be 100644 --- a/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/transform-conditional-availability-expressions.test.ts +++ b/packages/twenty-sdk/src/cli/utilities/build/common/conditional-availability/__tests__/transform-conditional-availability-expressions.test.ts @@ -36,7 +36,7 @@ const buildMockCommandMenuContextApi = ( }, selectedRecords: [], featureFlags: {}, - permissionFlags: {}, + permissionFlagGrants: {}, targetObjectReadPermissions: {}, targetObjectWritePermissions: {}, objectMetadataItem: {}, diff --git a/packages/twenty-sdk/src/cli/utilities/build/manifest/utils/from-role-config-to-role-manifest.ts b/packages/twenty-sdk/src/cli/utilities/build/manifest/utils/from-role-config-to-role-manifest.ts index d08e659d2b0..3f97a46ad92 100644 --- a/packages/twenty-sdk/src/cli/utilities/build/manifest/utils/from-role-config-to-role-manifest.ts +++ b/packages/twenty-sdk/src/cli/utilities/build/manifest/utils/from-role-config-to-role-manifest.ts @@ -28,13 +28,13 @@ export const fromRoleConfigToRoleManifest = ( ), }), ), - permissionFlags: (roleConfig.permissionFlags ?? []).map( - (permissionFlag) => ({ + permissionFlagGrants: (roleConfig.permissionFlagGrants ?? []).map( + (permissionFlagGrant) => ({ universalIdentifier: uuidv5( - `${roleConfig.universalIdentifier}:${permissionFlag}`, + `${roleConfig.universalIdentifier}:${permissionFlagGrant}`, ROLE_UNIVERSAL_IDENTIFIER_NAMESPACE, ), - flag: permissionFlag, + flag: permissionFlagGrant, }), ), }; diff --git a/packages/twenty-sdk/src/sdk/define/index.ts b/packages/twenty-sdk/src/sdk/define/index.ts index 3efbe4b0384..fbd0ed6a11a 100644 --- a/packages/twenty-sdk/src/sdk/define/index.ts +++ b/packages/twenty-sdk/src/sdk/define/index.ts @@ -86,7 +86,7 @@ export type { export { defineApplicationRole } from '@/sdk/define/roles/define-application-role'; export { defineRole } from '@/sdk/define/roles/define-role'; -export { PermissionFlag } from '@/sdk/define/roles/permission-flag-type'; +export { PermissionFlagGrant } from '@/sdk/define/roles/permission-flag-type'; export { defineSkill } from '@/sdk/define/skills/define-skill'; diff --git a/packages/twenty-sdk/src/sdk/define/roles/__tests__/define-application-role.spec.ts b/packages/twenty-sdk/src/sdk/define/roles/__tests__/define-application-role.spec.ts index 1f8e65d730c..3e0e5eb7a15 100644 --- a/packages/twenty-sdk/src/sdk/define/roles/__tests__/define-application-role.spec.ts +++ b/packages/twenty-sdk/src/sdk/define/roles/__tests__/define-application-role.spec.ts @@ -32,16 +32,16 @@ describe('defineApplicationRole', () => { expect(result.config?.canReadAllObjectRecords).toBe(true); }); - it('should accept permissionFlags', () => { + it('should accept permissionFlagGrants', () => { const config = { ...validConfig, - permissionFlags: ['UPLOAD_FILE'], + permissionFlagGrants: ['UPLOAD_FILE'], }; const result = defineApplicationRole(config as any); expect(result.success).toBe(true); - expect(result.config?.permissionFlags).toHaveLength(1); + expect(result.config?.permissionFlagGrants).toHaveLength(1); }); it('should return error when universalIdentifier is missing', () => { diff --git a/packages/twenty-sdk/src/sdk/define/roles/__tests__/define-role.spec.ts b/packages/twenty-sdk/src/sdk/define/roles/__tests__/define-role.spec.ts index d29daf607a6..84f041644c0 100644 --- a/packages/twenty-sdk/src/sdk/define/roles/__tests__/define-role.spec.ts +++ b/packages/twenty-sdk/src/sdk/define/roles/__tests__/define-role.spec.ts @@ -32,16 +32,16 @@ describe('defineRole', () => { expect(result.config?.canReadAllObjectRecords).toBe(true); }); - it('should accept permissionFlags', () => { + it('should accept permissionFlagGrants', () => { const config = { ...validConfig, - permissionFlags: ['UPLOAD_FILE', 'DOWNLOAD_FILE'], + permissionFlagGrants: ['UPLOAD_FILE', 'DOWNLOAD_FILE'], }; const result = defineRole(config as any); expect(result.success).toBe(true); - expect(result.config?.permissionFlags).toHaveLength(2); + expect(result.config?.permissionFlagGrants).toHaveLength(2); }); it('should return error when universalIdentifier is missing', () => { diff --git a/packages/twenty-sdk/src/sdk/define/roles/permission-flag-type.ts b/packages/twenty-sdk/src/sdk/define/roles/permission-flag-type.ts index b5f9d27a5e4..a8a97b52362 100644 --- a/packages/twenty-sdk/src/sdk/define/roles/permission-flag-type.ts +++ b/packages/twenty-sdk/src/sdk/define/roles/permission-flag-type.ts @@ -1 +1 @@ -export { PermissionFlagType as PermissionFlag } from 'twenty-shared/constants'; +export { PermissionFlagType as PermissionFlagGrant } from 'twenty-shared/constants'; diff --git a/packages/twenty-sdk/src/sdk/define/roles/role-config.ts b/packages/twenty-sdk/src/sdk/define/roles/role-config.ts index e99cdedaa03..29664407411 100644 --- a/packages/twenty-sdk/src/sdk/define/roles/role-config.ts +++ b/packages/twenty-sdk/src/sdk/define/roles/role-config.ts @@ -7,9 +7,9 @@ import { type PermissionFlagType } from 'twenty-shared/constants'; export type RoleConfig = Omit< RoleManifest, - 'objectPermissions' | 'fieldPermissions' | 'permissionFlags' + 'objectPermissions' | 'fieldPermissions' | 'permissionFlagGrants' > & { objectPermissions?: Omit[]; fieldPermissions?: Omit[]; - permissionFlags?: PermissionFlagType[]; + permissionFlagGrants?: PermissionFlagType[]; }; diff --git a/packages/twenty-server/src/database/commands/list-and-delete-orphaned-workspace-entities.command.ts b/packages/twenty-server/src/database/commands/list-and-delete-orphaned-workspace-entities.command.ts index 7b49d93cd98..ab434af2cf8 100644 --- a/packages/twenty-server/src/database/commands/list-and-delete-orphaned-workspace-entities.command.ts +++ b/packages/twenty-server/src/database/commands/list-and-delete-orphaned-workspace-entities.command.ts @@ -33,7 +33,7 @@ import { ObjectPermissionEntity } from 'src/engine/metadata-modules/object-permi import { PageLayoutTabEntity } from 'src/engine/metadata-modules/page-layout-tab/entities/page-layout-tab.entity'; import { PageLayoutWidgetEntity } from 'src/engine/metadata-modules/page-layout-widget/entities/page-layout-widget.entity'; import { PageLayoutEntity } from 'src/engine/metadata-modules/page-layout/entities/page-layout.entity'; -import { PermissionFlagEntity } from 'src/engine/metadata-modules/permission-flag/permission-flag.entity'; +import { PermissionFlagGrantEntity } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity'; import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { RowLevelPermissionPredicateGroupEntity } from 'src/engine/metadata-modules/row-level-permission-predicate/entities/row-level-permission-predicate-group.entity'; @@ -67,7 +67,7 @@ const WORKSPACE_RELATED_ENTITIES: EntityTarget[] = [ ViewFilterGroupEntity, FieldPermissionEntity, ObjectPermissionEntity, - PermissionFlagEntity, + PermissionFlagGrantEntity, RoleTargetEntity, SearchFieldMetadataEntity, RowLevelPermissionPredicateEntity, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/2-4/2-4-instance-command-fast-1778235340020-rename-permission-flag-to-permission-flag-grant.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/2-4/2-4-instance-command-fast-1778235340020-rename-permission-flag-to-permission-flag-grant.ts new file mode 100644 index 00000000000..14c3ad4088d --- /dev/null +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/2-4/2-4-instance-command-fast-1778235340020-rename-permission-flag-to-permission-flag-grant.ts @@ -0,0 +1,37 @@ +import { QueryRunner } from 'typeorm'; + +import { RegisteredInstanceCommand } from 'src/engine/core-modules/upgrade/decorators/registered-instance-command.decorator'; +import { FastInstanceCommand } from 'src/engine/core-modules/upgrade/interfaces/fast-instance-command.interface'; + +@RegisteredInstanceCommand('2.4.0', 1778235340020) +export class RenamePermissionFlagToPermissionFlagGrantFastInstanceCommand + implements FastInstanceCommand +{ + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "core"."permissionFlag" RENAME TO "permissionFlagGrant"`, + ); + + await queryRunner.query( + `ALTER TABLE "core"."permissionFlagGrant" RENAME CONSTRAINT "IDX_PERMISSION_FLAG_FLAG_ROLE_ID_UNIQUE" TO "IDX_PERMISSION_FLAG_GRANT_FLAG_ROLE_ID_UNIQUE"`, + ); + + await queryRunner.query( + `ALTER INDEX "core"."IDX_PERMISSION_FLAG_ROLE_ID" RENAME TO "IDX_PERMISSION_FLAG_GRANT_ROLE_ID"`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER INDEX "core"."IDX_PERMISSION_FLAG_GRANT_ROLE_ID" RENAME TO "IDX_PERMISSION_FLAG_ROLE_ID"`, + ); + + await queryRunner.query( + `ALTER TABLE "core"."permissionFlagGrant" RENAME CONSTRAINT "IDX_PERMISSION_FLAG_GRANT_FLAG_ROLE_ID_UNIQUE" TO "IDX_PERMISSION_FLAG_FLAG_ROLE_ID_UNIQUE"`, + ); + + await queryRunner.query( + `ALTER TABLE "core"."permissionFlagGrant" RENAME TO "permissionFlag"`, + ); + } +} diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts index 81057f00cf5..5110a442baf 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts @@ -29,6 +29,7 @@ import { TransformApplicationVariableToSyncableEntityFastInstanceCommand } from import { AddToolAndWorkflowActionTriggerSettingsFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-3/2-3-instance-command-fast-1797000001000-add-tool-and-workflow-action-trigger-settings'; import { BackfillApplicationVariableUniversalIdentifierSlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-3/2-3-instance-command-slow-1777966965588-backfill-application-variable-universal-identifier'; import { MigrateToolTriggerSettingsSlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-3/2-3-instance-command-slow-1797000002000-migrate-tool-trigger-settings'; +import { RenamePermissionFlagToPermissionFlagGrantFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-4/2-4-instance-command-fast-1778235340020-rename-permission-flag-to-permission-flag-grant'; import { PermissionFlagDefinitionSyncableEntityFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-4/2-4-instance-command-fast-1778235340021-permission-flag-definition-syncable-entity'; import { AddEmailGroupChannelTypeFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-4/2-4-instance-command-fast-1778256809018-add-email-group-channel-type'; import { AddApplicationIdToPublicDomainFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-4/2-4-instance-command-fast-1798000003000-add-application-id-to-public-domain'; @@ -63,6 +64,7 @@ export const INSTANCE_COMMANDS = [ RemoveUserDefaultAvatarUrlFastInstanceCommand, TransformApplicationVariableToSyncableEntityFastInstanceCommand, BackfillApplicationVariableUniversalIdentifierSlowInstanceCommand, + RenamePermissionFlagToPermissionFlagGrantFastInstanceCommand, PermissionFlagDefinitionSyncableEntityFastInstanceCommand, AddEmailGroupChannelTypeFastInstanceCommand, AddApplicationIdToPublicDomainFastInstanceCommand, diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-permission-flag-grant-to-universal-flat-permission-flag-grant.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-permission-flag-grant-to-universal-flat-permission-flag-grant.util.ts new file mode 100644 index 00000000000..91edabb6515 --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-permission-flag-grant-to-universal-flat-permission-flag-grant.util.ts @@ -0,0 +1,23 @@ +import { type UniversalFlatPermissionFlagGrant } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag-grant.type'; +import { PermissionFlagGrantManifest } from 'twenty-shared/application'; + +export const fromPermissionFlagGrantToUniversalFlatPermissionFlagGrant = ({ + permissionFlagGrant, + roleUniversalIdentifier, + applicationUniversalIdentifier, + now, +}: { + permissionFlagGrant: PermissionFlagGrantManifest; + roleUniversalIdentifier: string; + applicationUniversalIdentifier: string; + now: string; +}): UniversalFlatPermissionFlagGrant => { + return { + universalIdentifier: permissionFlagGrant.universalIdentifier, + applicationUniversalIdentifier, + roleUniversalIdentifier, + flag: permissionFlagGrant.flag, + createdAt: now, + updatedAt: now, + }; +}; diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-permission-flag-to-universal-flat-permission-flag.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-permission-flag-to-universal-flat-permission-flag.util.ts deleted file mode 100644 index e8a8e65c702..00000000000 --- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-permission-flag-to-universal-flat-permission-flag.util.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { type UniversalFlatPermissionFlag } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag.type'; -import { PermissionFlagManifest } from 'twenty-shared/application'; - -export const fromPermissionFlagToUniversalFlatPermissionFlag = ({ - permissionFlag, - roleUniversalIdentifier, - applicationUniversalIdentifier, - now, -}: { - permissionFlag: PermissionFlagManifest; - roleUniversalIdentifier: string; - applicationUniversalIdentifier: string; - now: string; -}): UniversalFlatPermissionFlag => { - return { - universalIdentifier: permissionFlag.universalIdentifier, - applicationUniversalIdentifier, - roleUniversalIdentifier, - flag: permissionFlag.flag, - createdAt: now, - updatedAt: now, - }; -}; diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-role-manifest-to-universal-flat-role.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-role-manifest-to-universal-flat-role.util.ts index acffe6b1461..63ff44b260c 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-role-manifest-to-universal-flat-role.util.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-role-manifest-to-universal-flat-role.util.ts @@ -32,7 +32,7 @@ export const fromRoleManifestToUniversalFlatRole = ({ roleTargetUniversalIdentifiers: [], objectPermissionUniversalIdentifiers: [], fieldPermissionUniversalIdentifiers: [], - permissionFlagUniversalIdentifiers: [], + permissionFlagGrantUniversalIdentifiers: [], rowLevelPermissionPredicateUniversalIdentifiers: [], rowLevelPermissionPredicateGroupUniversalIdentifiers: [], createdAt: now, diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/utils/compute-application-manifest-all-universal-flat-entity-maps.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/utils/compute-application-manifest-all-universal-flat-entity-maps.util.ts index 0605c5de273..5d6b985c2f9 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/utils/compute-application-manifest-all-universal-flat-entity-maps.util.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-manifest/utils/compute-application-manifest-all-universal-flat-entity-maps.util.ts @@ -17,7 +17,7 @@ import { fromObjectPermissionManifestToUniversalFlatObjectPermission } from 'src import { fromPageLayoutManifestToUniversalFlatPageLayout } from 'src/engine/core-modules/application/application-manifest/converters/from-page-layout-manifest-to-universal-flat-page-layout.util'; import { fromPageLayoutTabManifestToUniversalFlatPageLayoutTab } from 'src/engine/core-modules/application/application-manifest/converters/from-page-layout-tab-manifest-to-universal-flat-page-layout-tab.util'; import { fromPageLayoutWidgetManifestToUniversalFlatPageLayoutWidget } from 'src/engine/core-modules/application/application-manifest/converters/from-page-layout-widget-manifest-to-universal-flat-page-layout-widget.util'; -import { fromPermissionFlagToUniversalFlatPermissionFlag } from 'src/engine/core-modules/application/application-manifest/converters/from-permission-flag-to-universal-flat-permission-flag.util'; +import { fromPermissionFlagGrantToUniversalFlatPermissionFlagGrant } from 'src/engine/core-modules/application/application-manifest/converters/from-permission-flag-grant-to-universal-flat-permission-flag-grant.util'; import { fromRoleManifestToUniversalFlatRole } from 'src/engine/core-modules/application/application-manifest/converters/from-role-manifest-to-universal-flat-role.util'; import { fromSkillManifestToUniversalFlatSkill } from 'src/engine/core-modules/application/application-manifest/converters/from-skill-manifest-to-universal-flat-skill.util'; import { computeSearchVectorUniversalSettingsFromObjectManifest } from 'src/engine/core-modules/application/application-manifest/utils/compute-search-vector-universal-settings-from-object-manifest.util'; @@ -212,16 +212,16 @@ export const computeApplicationManifestAllUniversalFlatEntityMaps = ({ }); } - for (const permissionFlag of roleManifest.permissionFlags ?? []) { + for (const permissionFlagGrant of roleManifest.permissionFlagGrants ?? []) { addUniversalFlatEntityToUniversalFlatEntityMapsThroughMutationOrThrow({ - universalFlatEntity: fromPermissionFlagToUniversalFlatPermissionFlag({ - permissionFlag, + universalFlatEntity: fromPermissionFlagGrantToUniversalFlatPermissionFlagGrant({ + permissionFlagGrant, roleUniversalIdentifier: roleManifest.universalIdentifier, applicationUniversalIdentifier, now, }), universalFlatEntityMapsToMutate: - allUniversalFlatEntityMaps.flatPermissionFlagMaps, + allUniversalFlatEntityMaps.flatPermissionFlagGrantMaps, }); } } diff --git a/packages/twenty-server/src/engine/core-modules/user-workspace/constants/user-workspace-entity-non-cached-properties.constant.ts b/packages/twenty-server/src/engine/core-modules/user-workspace/constants/user-workspace-entity-non-cached-properties.constant.ts index c5584ba2250..1ffd9c4d7a7 100644 --- a/packages/twenty-server/src/engine/core-modules/user-workspace/constants/user-workspace-entity-non-cached-properties.constant.ts +++ b/packages/twenty-server/src/engine/core-modules/user-workspace/constants/user-workspace-entity-non-cached-properties.constant.ts @@ -4,7 +4,7 @@ export const USER_WORKSPACE_ENTITY_NON_CACHED_PROPERTIES = [ 'workspace', 'user', 'twoFactorAuthenticationMethods', - 'permissionFlags', + 'permissionFlagGrants', 'objectPermissions', 'objectsPermissions', 'twoFactorAuthenticationMethodSummary', diff --git a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.entity.ts b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.entity.ts index 668fa27a548..dbd4a5c015b 100644 --- a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.entity.ts @@ -93,7 +93,7 @@ export class UserWorkspaceEntity extends WorkspaceRelatedEntity { >; @Field(() => [PermissionFlagType], { nullable: true }) - permissionFlags?: PermissionFlagType[]; + permissionFlagGrants?: PermissionFlagType[]; @Field(() => [ObjectPermissionDTO], { nullable: true }) objectPermissions?: ObjectPermissionDTO[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts index 8882d6823aa..de68aa11956 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts @@ -1181,7 +1181,7 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = { universalProperty: 'pageLayoutUniversalIdentifier', }, }, - permissionFlag: { + permissionFlagGrant: { flag: { toCompare: true, toStringify: false, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-foreign-key.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-foreign-key.constant.ts index 43167f37a9d..3f384d97bb8 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-foreign-key.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-foreign-key.constant.ts @@ -168,7 +168,7 @@ export const ALL_MANY_TO_ONE_METADATA_FOREIGN_KEY = { workspace: null, application: null, }, - permissionFlag: { + permissionFlagGrant: { workspace: null, application: null, role: { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-relations.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-relations.constant.ts index 75d6eafc10e..3c4823fdce2 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-relations.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-many-to-one-metadata-relations.constant.ts @@ -293,13 +293,13 @@ export const ALL_MANY_TO_ONE_METADATA_RELATIONS = { workspace: null, application: null, }, - permissionFlag: { + permissionFlagGrant: { workspace: null, application: null, role: { metadataName: 'role', foreignKey: 'roleId', - inverseOneToManyProperty: 'permissionFlags', + inverseOneToManyProperty: 'permissionFlagGrants', isNullable: false, universalForeignKey: 'roleUniversalIdentifier', }, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-entity-by-metadata-name.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-entity-by-metadata-name.constant.ts index 94418c2c202..7db0893bffb 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-entity-by-metadata-name.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-entity-by-metadata-name.constant.ts @@ -17,7 +17,7 @@ import { PageLayoutTabEntity } from 'src/engine/metadata-modules/page-layout-tab import { PageLayoutWidgetEntity } from 'src/engine/metadata-modules/page-layout-widget/entities/page-layout-widget.entity'; import { PageLayoutEntity } from 'src/engine/metadata-modules/page-layout/entities/page-layout.entity'; import { PermissionFlagDefinitionEntity } from 'src/engine/metadata-modules/permission-flag-definition/entities/permission-flag-definition.entity'; -import { PermissionFlagEntity } from 'src/engine/metadata-modules/permission-flag/permission-flag.entity'; +import { PermissionFlagGrantEntity } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity'; import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { RowLevelPermissionPredicateGroupEntity } from 'src/engine/metadata-modules/row-level-permission-predicate/entities/row-level-permission-predicate-group.entity'; @@ -57,7 +57,7 @@ export const ALL_METADATA_ENTITY_BY_METADATA_NAME = { agent: AgentEntity, commandMenuItem: CommandMenuItemEntity, navigationMenuItem: NavigationMenuItemEntity, - permissionFlag: PermissionFlagEntity, + permissionFlagGrant: PermissionFlagGrantEntity, permissionFlagDefinition: PermissionFlagDefinitionEntity, webhook: WebhookEntity, applicationVariable: ApplicationVariableEntity, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-required-metadata-for-validation.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-required-metadata-for-validation.constant.ts index a38ff086458..2d7c7060ead 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-required-metadata-for-validation.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-required-metadata-for-validation.constant.ts @@ -76,11 +76,11 @@ export const ALL_METADATA_REQUIRED_METADATA_FOR_VALIDATION = { view: true, pageLayout: true, }, - permissionFlag: { + permissionFlagGrant: { role: true, }, permissionFlagDefinition: { - permissionFlag: true, + permissionFlagGrant: true, }, objectPermission: { role: true, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-serialized-relation.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-serialized-relation.constant.ts index 27bb15f9430..fd41b2df80f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-serialized-relation.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-serialized-relation.constant.ts @@ -33,7 +33,7 @@ export const ALL_METADATA_SERIALIZED_RELATION = { logicFunction: {}, role: {}, roleTarget: {}, - permissionFlag: {}, + permissionFlagGrant: {}, permissionFlagDefinition: {}, objectPermission: {}, fieldPermission: {}, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-one-to-many-metadata-relations.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-one-to-many-metadata-relations.constant.ts index ff89215fb36..6ad6c0fdf2c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-one-to-many-metadata-relations.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-one-to-many-metadata-relations.constant.ts @@ -168,11 +168,11 @@ export const ALL_ONE_TO_MANY_METADATA_RELATIONS = { universalFlatEntityForeignKeyAggregator: 'objectPermissionUniversalIdentifiers', }, - permissionFlags: { - metadataName: 'permissionFlag', - flatEntityForeignKeyAggregator: 'permissionFlagIds', + permissionFlagGrants: { + metadataName: 'permissionFlagGrant', + flatEntityForeignKeyAggregator: 'permissionFlagGrantIds', universalFlatEntityForeignKeyAggregator: - 'permissionFlagUniversalIdentifiers', + 'permissionFlagGrantUniversalIdentifiers', }, fieldPermissions: { metadataName: 'fieldPermission', @@ -194,7 +194,7 @@ export const ALL_ONE_TO_MANY_METADATA_RELATIONS = { }, }, roleTarget: {}, - permissionFlag: {}, + permissionFlagGrant: {}, permissionFlagDefinition: {}, objectPermission: {}, fieldPermission: {}, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module.ts index 13e7f94aba3..165966cccaa 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module.ts @@ -13,7 +13,7 @@ import { WorkspaceFlatPageLayoutTabMapCacheService } from 'src/engine/metadata-m import { WorkspaceFlatPageLayoutWidgetMapCacheService } from 'src/engine/metadata-modules/flat-page-layout-widget/services/workspace-flat-page-layout-widget-map-cache.service'; import { WorkspaceFlatPageLayoutMapCacheService } from 'src/engine/metadata-modules/flat-page-layout/services/workspace-flat-page-layout-map-cache.service'; import { WorkspaceFlatPermissionFlagDefinitionMapCacheService } from 'src/engine/metadata-modules/flat-permission-flag-definition/services/workspace-flat-permission-flag-definition-map-cache.service'; -import { WorkspaceFlatPermissionFlagMapCacheService } from 'src/engine/metadata-modules/flat-permission-flag/services/workspace-flat-permission-flag-map-cache.service'; +import { WorkspaceFlatPermissionFlagGrantMapCacheService } from 'src/engine/metadata-modules/flat-permission-flag-grant/services/workspace-flat-permission-flag-grant-map-cache.service'; import { WorkspaceFlatRowLevelPermissionPredicateGroupMapCacheService } from 'src/engine/metadata-modules/flat-row-level-permission-predicate/services/workspace-flat-row-level-permission-predicate-group-map-cache.service'; import { WorkspaceFlatRowLevelPermissionPredicateMapCacheService } from 'src/engine/metadata-modules/flat-row-level-permission-predicate/services/workspace-flat-row-level-permission-predicate-map-cache.service'; import { WorkspaceFlatViewFieldGroupMapCacheService } from 'src/engine/metadata-modules/flat-view-field-group/services/workspace-flat-view-field-group-map-cache.service'; @@ -33,7 +33,7 @@ import { PageLayoutTabEntity } from 'src/engine/metadata-modules/page-layout-tab import { PageLayoutWidgetEntity } from 'src/engine/metadata-modules/page-layout-widget/entities/page-layout-widget.entity'; import { PageLayoutEntity } from 'src/engine/metadata-modules/page-layout/entities/page-layout.entity'; import { PermissionFlagDefinitionEntity } from 'src/engine/metadata-modules/permission-flag-definition/entities/permission-flag-definition.entity'; -import { PermissionFlagEntity } from 'src/engine/metadata-modules/permission-flag/permission-flag.entity'; +import { PermissionFlagGrantEntity } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { RowLevelPermissionPredicateGroupEntity } from 'src/engine/metadata-modules/row-level-permission-predicate/entities/row-level-permission-predicate-group.entity'; import { RowLevelPermissionPredicateEntity } from 'src/engine/metadata-modules/row-level-permission-predicate/entities/row-level-permission-predicate.entity'; @@ -66,7 +66,7 @@ import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache PageLayoutEntity, PageLayoutTabEntity, PageLayoutWidgetEntity, - PermissionFlagEntity, + PermissionFlagGrantEntity, PermissionFlagDefinitionEntity, RowLevelPermissionPredicateEntity, RowLevelPermissionPredicateGroupEntity, @@ -88,7 +88,7 @@ import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache WorkspaceFlatViewGroupMapCacheService, WorkspaceFlatObjectPermissionMapCacheService, WorkspaceFlatFieldPermissionMapCacheService, - WorkspaceFlatPermissionFlagMapCacheService, + WorkspaceFlatPermissionFlagGrantMapCacheService, WorkspaceFlatPermissionFlagDefinitionMapCacheService, WorkspaceFlatViewSortMapCacheService, WorkspaceFlatPageLayoutMapCacheService, @@ -110,7 +110,7 @@ import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache WorkspaceFlatViewGroupMapCacheService, WorkspaceFlatObjectPermissionMapCacheService, WorkspaceFlatFieldPermissionMapCacheService, - WorkspaceFlatPermissionFlagMapCacheService, + WorkspaceFlatPermissionFlagGrantMapCacheService, WorkspaceFlatPermissionFlagDefinitionMapCacheService, WorkspaceFlatViewSortMapCacheService, WorkspaceFlatPageLayoutMapCacheService, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name.ts index 569d5c627bd..f7a4c00826b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name.ts @@ -26,8 +26,8 @@ import { type FlatPageLayoutMaps } from 'src/engine/metadata-modules/flat-page-l import { type FlatPageLayout } from 'src/engine/metadata-modules/flat-page-layout/types/flat-page-layout.type'; import { type FlatPermissionFlagDefinitionMaps } from 'src/engine/metadata-modules/flat-permission-flag-definition/types/flat-permission-flag-definition-maps.type'; import { type FlatPermissionFlagDefinition } from 'src/engine/metadata-modules/flat-permission-flag-definition/types/flat-permission-flag-definition.type'; -import { type FlatPermissionFlagMaps } from 'src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag-maps.type'; -import { type FlatPermissionFlag } from 'src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag.type'; +import { type FlatPermissionFlagGrantMaps } from 'src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant-maps.type'; +import { type FlatPermissionFlagGrant } from 'src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant.type'; import { type FlatRoleTargetMaps } from 'src/engine/metadata-modules/flat-role-target/types/flat-role-target-maps.type'; import { type FlatRoleTarget } from 'src/engine/metadata-modules/flat-role-target/types/flat-role-target.type'; import { type FlatRole } from 'src/engine/metadata-modules/flat-role/types/flat-role.type'; @@ -72,7 +72,7 @@ import { type UniversalFlatPageLayoutTab } from 'src/engine/workspace-manager/wo import { type UniversalFlatPageLayoutWidget } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-page-layout-widget.type'; import { type UniversalFlatPageLayout } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-page-layout.type'; import { type UniversalFlatPermissionFlagDefinition } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag-definition.type'; -import { type UniversalFlatPermissionFlag } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag.type'; +import { type UniversalFlatPermissionFlagGrant } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag-grant.type'; import { type UniversalFlatRoleTarget } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-role-target.type'; import { type UniversalFlatRole } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-role.type'; import { type UniversalFlatRowLevelPermissionPredicateGroup } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-row-level-permission-predicate-group.type'; @@ -208,13 +208,13 @@ import { type UniversalUpdatePermissionFlagDefinitionAction, } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-definition/types/workspace-migration-permission-flag-definition-action.type'; import { - type FlatCreatePermissionFlagAction, - type FlatDeletePermissionFlagAction, - type FlatUpdatePermissionFlagAction, - type UniversalCreatePermissionFlagAction, - type UniversalDeletePermissionFlagAction, - type UniversalUpdatePermissionFlagAction, -} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag/types/workspace-migration-permission-flag-action.type'; + type FlatCreatePermissionFlagGrantAction, + type FlatDeletePermissionFlagGrantAction, + type FlatUpdatePermissionFlagGrantAction, + type UniversalCreatePermissionFlagGrantAction, + type UniversalDeletePermissionFlagGrantAction, + type UniversalUpdatePermissionFlagGrantAction, +} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-grant/types/workspace-migration-permission-flag-grant-action.type'; import { type FlatCreateRoleTargetAction, type FlatDeleteRoleTargetAction, @@ -636,21 +636,21 @@ export type AllFlatEntityTypesByMetadataName = { universalFlatEntity: UniversalFlatNavigationMenuItem; entity: NavigationMenuItemEntity; }; - permissionFlag: { - flatEntityMaps: FlatPermissionFlagMaps; + permissionFlagGrant: { + flatEntityMaps: FlatPermissionFlagGrantMaps; universalActions: { - create: UniversalCreatePermissionFlagAction; - update: UniversalUpdatePermissionFlagAction; - delete: UniversalDeletePermissionFlagAction; + create: UniversalCreatePermissionFlagGrantAction; + update: UniversalUpdatePermissionFlagGrantAction; + delete: UniversalDeletePermissionFlagGrantAction; }; flatActions: { - create: FlatCreatePermissionFlagAction; - update: FlatUpdatePermissionFlagAction; - delete: FlatDeletePermissionFlagAction; + create: FlatCreatePermissionFlagGrantAction; + update: FlatUpdatePermissionFlagGrantAction; + delete: FlatDeletePermissionFlagGrantAction; }; - flatEntity: FlatPermissionFlag; - universalFlatEntity: UniversalFlatPermissionFlag; - entity: MetadataEntity<'permissionFlag'>; + flatEntity: FlatPermissionFlagGrant; + universalFlatEntity: UniversalFlatPermissionFlagGrant; + entity: MetadataEntity<'permissionFlagGrant'>; }; permissionFlagDefinition: { flatEntityMaps: FlatPermissionFlagDefinitionMaps; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/constants/flat-permission-flag-editable-properties.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/constants/flat-permission-flag-grant-editable-properties.constant.ts similarity index 57% rename from packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/constants/flat-permission-flag-editable-properties.constant.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/constants/flat-permission-flag-grant-editable-properties.constant.ts index 35775f4b219..6b2c0def80b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/constants/flat-permission-flag-editable-properties.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/constants/flat-permission-flag-grant-editable-properties.constant.ts @@ -1,6 +1,6 @@ import { type MetadataEntityPropertyName } from 'src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant'; -export const FLAT_PERMISSION_FLAG_EDITABLE_PROPERTIES = [ +export const FLAT_PERMISSION_FLAG_GRANT_EDITABLE_PROPERTIES = [ 'flag', 'roleId', -] as const satisfies MetadataEntityPropertyName<'permissionFlag'>[]; +] as const satisfies MetadataEntityPropertyName<'permissionFlagGrant'>[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/services/workspace-flat-permission-flag-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/services/workspace-flat-permission-flag-grant-map-cache.service.ts similarity index 60% rename from packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/services/workspace-flat-permission-flag-map-cache.service.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/services/workspace-flat-permission-flag-grant-map-cache.service.ts index 8b890cf3361..be724c7c65c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/services/workspace-flat-permission-flag-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/services/workspace-flat-permission-flag-grant-map-cache.service.ts @@ -5,9 +5,9 @@ import { Repository } from 'typeorm'; import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity'; import { createEmptyFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/constant/create-empty-flat-entity-maps.constant'; -import { type FlatPermissionFlagMaps } from 'src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag-maps.type'; -import { fromPermissionFlagEntityToFlatPermissionFlag } from 'src/engine/metadata-modules/flat-permission-flag/utils/from-permission-flag-entity-to-flat-permission-flag.util'; -import { PermissionFlagEntity } from 'src/engine/metadata-modules/permission-flag/permission-flag.entity'; +import { type FlatPermissionFlagGrantMaps } from 'src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant-maps.type'; +import { fromPermissionFlagGrantEntityToFlatPermissionFlagGrant } from 'src/engine/metadata-modules/flat-permission-flag-grant/utils/from-permission-flag-grant-entity-to-flat-permission-flag-grant.util'; +import { PermissionFlagGrantEntity } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { WorkspaceCacheProvider } from 'src/engine/workspace-cache/interfaces/workspace-cache-provider.service'; import { WorkspaceCache } from 'src/engine/workspace-cache/decorators/workspace-cache.decorator'; @@ -15,11 +15,11 @@ import { createIdToUniversalIdentifierMap } from 'src/engine/workspace-cache/uti import { addFlatEntityToFlatEntityMapsThroughMutationOrThrow } from 'src/engine/workspace-manager/workspace-migration/utils/add-flat-entity-to-flat-entity-maps-through-mutation-or-throw.util'; @Injectable() -@WorkspaceCache('flatPermissionFlagMaps') -export class WorkspaceFlatPermissionFlagMapCacheService extends WorkspaceCacheProvider { +@WorkspaceCache('flatPermissionFlagGrantMaps') +export class WorkspaceFlatPermissionFlagGrantMapCacheService extends WorkspaceCacheProvider { constructor( - @InjectRepository(PermissionFlagEntity) - private readonly permissionFlagRepository: Repository, + @InjectRepository(PermissionFlagGrantEntity) + private readonly permissionFlagGrantRepository: Repository, @InjectRepository(ApplicationEntity) private readonly applicationRepository: Repository, @InjectRepository(RoleEntity) @@ -28,9 +28,9 @@ export class WorkspaceFlatPermissionFlagMapCacheService extends WorkspaceCachePr super(); } - async computeForCache(workspaceId: string): Promise { - const [permissionFlags, applications, roles] = await Promise.all([ - this.permissionFlagRepository.find({ + async computeForCache(workspaceId: string): Promise { + const [permissionFlagGrants, applications, roles] = await Promise.all([ + this.permissionFlagGrantRepository.find({ where: { workspaceId }, withDeleted: true, }), @@ -51,21 +51,21 @@ export class WorkspaceFlatPermissionFlagMapCacheService extends WorkspaceCachePr const roleIdToUniversalIdentifierMap = createIdToUniversalIdentifierMap(roles); - const flatPermissionFlagMaps = createEmptyFlatEntityMaps(); + const flatPermissionFlagGrantMaps = createEmptyFlatEntityMaps(); - for (const permissionFlagEntity of permissionFlags) { - const flatPermissionFlag = fromPermissionFlagEntityToFlatPermissionFlag({ - entity: permissionFlagEntity, + for (const permissionFlagGrantEntity of permissionFlagGrants) { + const flatPermissionFlagGrant = fromPermissionFlagGrantEntityToFlatPermissionFlagGrant({ + entity: permissionFlagGrantEntity, applicationIdToUniversalIdentifierMap, roleIdToUniversalIdentifierMap, }); addFlatEntityToFlatEntityMapsThroughMutationOrThrow({ - flatEntity: flatPermissionFlag, - flatEntityMapsToMutate: flatPermissionFlagMaps, + flatEntity: flatPermissionFlagGrant, + flatEntityMapsToMutate: flatPermissionFlagGrantMaps, }); } - return flatPermissionFlagMaps; + return flatPermissionFlagGrantMaps; } } diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant-maps.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant-maps.type.ts new file mode 100644 index 00000000000..0c5904884db --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant-maps.type.ts @@ -0,0 +1,4 @@ +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { type FlatPermissionFlagGrant } from 'src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant.type'; + +export type FlatPermissionFlagGrantMaps = FlatEntityMaps; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant.type.ts new file mode 100644 index 00000000000..c6953f70500 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant.type.ts @@ -0,0 +1,4 @@ +import { type FlatEntityFrom } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-from.type'; +import { type PermissionFlagGrantEntity } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity'; + +export type FlatPermissionFlagGrant = FlatEntityFrom; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/utils/from-create-permission-flag-input-to-flat-permission-flag-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/utils/from-create-permission-flag-grant-input-to-flat-permission-flag-grant-to-create.util.ts similarity index 64% rename from packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/utils/from-create-permission-flag-input-to-flat-permission-flag-to-create.util.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/utils/from-create-permission-flag-grant-input-to-flat-permission-flag-grant-to-create.util.ts index 8e423abbf5d..ad93d7a1a56 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/utils/from-create-permission-flag-input-to-flat-permission-flag-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/utils/from-create-permission-flag-grant-input-to-flat-permission-flag-grant-to-create.util.ts @@ -3,25 +3,25 @@ import { v4 } from 'uuid'; import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type'; import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; import { resolveEntityRelationUniversalIdentifiers } from 'src/engine/metadata-modules/flat-entity/utils/resolve-entity-relation-universal-identifiers.util'; -import { type CreatePermissionFlagInput } from 'src/engine/metadata-modules/permission-flag/dtos/create-permission-flag.input'; -import { type UniversalFlatPermissionFlag } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag.type'; +import { type CreatePermissionFlagGrantInput } from 'src/engine/metadata-modules/permission-flag-grant/dtos/create-permission-flag-grant.input'; +import { type UniversalFlatPermissionFlagGrant } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag-grant.type'; -export const fromCreatePermissionFlagInputToFlatPermissionFlagToCreate = ({ - createPermissionFlagInput, +export const fromCreatePermissionFlagGrantInputToFlatPermissionFlagGrantToCreate = ({ + createPermissionFlagGrantInput, flatApplication, flatRoleMaps, }: { - createPermissionFlagInput: CreatePermissionFlagInput; + createPermissionFlagGrantInput: CreatePermissionFlagGrantInput; flatApplication: FlatApplication; -} & Pick): UniversalFlatPermissionFlag & { +} & Pick): UniversalFlatPermissionFlagGrant & { id: string; } => { - const { roleId, flag, universalIdentifier } = createPermissionFlagInput; + const { roleId, flag, universalIdentifier } = createPermissionFlagGrantInput; const now = new Date().toISOString(); const { roleUniversalIdentifier } = resolveEntityRelationUniversalIdentifiers( { - metadataName: 'permissionFlag', + metadataName: 'permissionFlagGrant', foreignKeyValues: { roleId }, flatEntityMaps: { flatRoleMaps }, }, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/utils/from-permission-flag-entity-to-flat-permission-flag.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/utils/from-permission-flag-grant-entity-to-flat-permission-flag-grant.util.ts similarity index 51% rename from packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/utils/from-permission-flag-entity-to-flat-permission-flag.util.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/utils/from-permission-flag-grant-entity-to-flat-permission-flag-grant.util.ts index 8c7a0d079ce..62656726285 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/utils/from-permission-flag-entity-to-flat-permission-flag.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag-grant/utils/from-permission-flag-grant-entity-to-flat-permission-flag-grant.util.ts @@ -5,48 +5,48 @@ import { FlatEntityMapsExceptionCode, } from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; import { getMetadataEntityRelationProperties } from 'src/engine/metadata-modules/flat-entity/utils/get-metadata-entity-relation-properties.util'; -import { type FlatPermissionFlag } from 'src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag.type'; +import { type FlatPermissionFlagGrant } from 'src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant.type'; import { type FromEntityToFlatEntityArgs } from 'src/engine/workspace-cache/types/from-entity-to-flat-entity-args.type'; -export const fromPermissionFlagEntityToFlatPermissionFlag = ({ - entity: permissionFlagEntity, +export const fromPermissionFlagGrantEntityToFlatPermissionFlagGrant = ({ + entity: permissionFlagGrantEntity, applicationIdToUniversalIdentifierMap, roleIdToUniversalIdentifierMap, -}: FromEntityToFlatEntityArgs<'permissionFlag'>): FlatPermissionFlag => { - const permissionFlagEntityWithoutRelations = removePropertiesFromRecord( - permissionFlagEntity, - getMetadataEntityRelationProperties('permissionFlag'), +}: FromEntityToFlatEntityArgs<'permissionFlagGrant'>): FlatPermissionFlagGrant => { + const permissionFlagGrantEntityWithoutRelations = removePropertiesFromRecord( + permissionFlagGrantEntity, + getMetadataEntityRelationProperties('permissionFlagGrant'), ); const applicationUniversalIdentifier = applicationIdToUniversalIdentifierMap.get( - permissionFlagEntity.applicationId, + permissionFlagGrantEntity.applicationId, ); if (!isDefined(applicationUniversalIdentifier)) { throw new FlatEntityMapsException( - `Application with id ${permissionFlagEntity.applicationId} not found for permissionFlag ${permissionFlagEntity.id}`, + `Application with id ${permissionFlagGrantEntity.applicationId} not found for permissionFlagGrant ${permissionFlagGrantEntity.id}`, FlatEntityMapsExceptionCode.ENTITY_NOT_FOUND, ); } const roleUniversalIdentifier = roleIdToUniversalIdentifierMap.get( - permissionFlagEntity.roleId, + permissionFlagGrantEntity.roleId, ); if (!isDefined(roleUniversalIdentifier)) { throw new FlatEntityMapsException( - `Role with id ${permissionFlagEntity.roleId} not found for permissionFlag ${permissionFlagEntity.id}`, + `Role with id ${permissionFlagGrantEntity.roleId} not found for permissionFlagGrant ${permissionFlagGrantEntity.id}`, FlatEntityMapsExceptionCode.ENTITY_NOT_FOUND, ); } return { - ...permissionFlagEntityWithoutRelations, - createdAt: permissionFlagEntity.createdAt.toISOString(), - updatedAt: permissionFlagEntity.updatedAt.toISOString(), + ...permissionFlagGrantEntityWithoutRelations, + createdAt: permissionFlagGrantEntity.createdAt.toISOString(), + updatedAt: permissionFlagGrantEntity.updatedAt.toISOString(), universalIdentifier: - permissionFlagEntityWithoutRelations.universalIdentifier, + permissionFlagGrantEntityWithoutRelations.universalIdentifier, applicationUniversalIdentifier, roleUniversalIdentifier, }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag-maps.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag-maps.type.ts deleted file mode 100644 index 307f46edbed..00000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag-maps.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; -import { type FlatPermissionFlag } from 'src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag.type'; - -export type FlatPermissionFlagMaps = FlatEntityMaps; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag.type.ts deleted file mode 100644 index db2f265cd57..00000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type FlatEntityFrom } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-from.type'; -import { type PermissionFlagEntity } from 'src/engine/metadata-modules/permission-flag/permission-flag.entity'; - -export type FlatPermissionFlag = FlatEntityFrom; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-role/types/flat-role.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-role/types/flat-role.type.ts index 4e04c099ec0..ea341d2cd0c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-role/types/flat-role.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-role/types/flat-role.type.ts @@ -2,8 +2,8 @@ import { type FlatEntityFrom } from 'src/engine/metadata-modules/flat-entity/typ import { type RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; export type FlatRole = FlatEntityFrom & { - // TODO remove once objectPermission permissionFlag fieldPermission have been migrated to v2 + // TODO remove once objectPermission permissionFlagGrant fieldPermission have been migrated to v2 objectPermissionIds: string[]; - permissionFlagIds: string[]; + permissionFlagGrantIds: string[]; fieldPermissionIds: string[]; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-create-role-input-to-flat-role-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-create-role-input-to-flat-role-to-create.util.ts index 5b6a081cd6f..43f4e724107 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-create-role-input-to-flat-role-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-create-role-input-to-flat-role-to-create.util.ts @@ -54,9 +54,9 @@ export const fromCreateRoleInputToFlatRoleToCreate = ({ roleTargetIds: [], roleTargetUniversalIdentifiers: [], objectPermissionIds: [], - permissionFlagIds: [], + permissionFlagGrantIds: [], objectPermissionUniversalIdentifiers: [], - permissionFlagUniversalIdentifiers: [], + permissionFlagGrantUniversalIdentifiers: [], fieldPermissionIds: [], fieldPermissionUniversalIdentifiers: [], rowLevelPermissionPredicateIds: [], diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-role-entity-to-flat-role.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-role-entity-to-flat-role.util.ts index 7ff3d8a385a..2f9d6dbafc5 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-role-entity-to-flat-role.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-role-entity-to-flat-role.util.ts @@ -13,10 +13,10 @@ import { type RegroupedEntity } from 'src/engine/workspace-cache/utils/regroup-e type FromRoleEntityToFlatRoleArgs = { entity: Omit< EntityWithRegroupedOneToManyRelations>, - 'objectPermissions' | 'permissionFlags' | 'fieldPermissions' + 'objectPermissions' | 'permissionFlagGrants' | 'fieldPermissions' > & { objectPermissions: RegroupedEntity[]; - permissionFlags: RegroupedEntity[]; + permissionFlagGrants: RegroupedEntity[]; fieldPermissions: RegroupedEntity[]; }; } & EntityManyToOneIdByUniversalIdentifierMaps<'role'>; @@ -57,7 +57,7 @@ export const fromRoleEntityToFlatRole = ({ applicationId: roleEntity.applicationId, roleTargetIds: roleEntity.roleTargets.map(({ id }) => id), objectPermissionIds: roleEntity.objectPermissions.map(({ id }) => id), - permissionFlagIds: roleEntity.permissionFlags.map(({ id }) => id), + permissionFlagGrantIds: roleEntity.permissionFlagGrants.map(({ id }) => id), fieldPermissionIds: roleEntity.fieldPermissions.map(({ id }) => id), rowLevelPermissionPredicateIds: roleEntity.rowLevelPermissionPredicates.map( ({ id }) => id, @@ -71,7 +71,7 @@ export const fromRoleEntityToFlatRole = ({ objectPermissionUniversalIdentifiers: roleEntity.objectPermissions.map( ({ universalIdentifier }) => universalIdentifier, ), - permissionFlagUniversalIdentifiers: roleEntity.permissionFlags.map( + permissionFlagGrantUniversalIdentifiers: roleEntity.permissionFlagGrants.map( ({ universalIdentifier }) => universalIdentifier, ), fieldPermissionUniversalIdentifiers: roleEntity.fieldPermissions.map( diff --git a/packages/twenty-server/src/engine/metadata-modules/permission-flag-definition/permission-flag-definition.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/permission-flag-definition/permission-flag-definition.resolver.ts index 663874632f8..a1e8bf5ff7c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/permission-flag-definition/permission-flag-definition.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/permission-flag-definition/permission-flag-definition.resolver.ts @@ -33,7 +33,7 @@ export class PermissionFlagDefinitionResolver { private readonly featureFlagService: FeatureFlagService, ) {} - private async assertCustomPermissionFlagsEnabled( + private async assertCustomPermissionFlagGrantsEnabled( workspaceId: string, ): Promise { const isEnabled = await this.featureFlagService.isFeatureEnabled( @@ -74,7 +74,7 @@ export class PermissionFlagDefinitionResolver { @Args('input') input: CreatePermissionFlagDefinitionInput, @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { - await this.assertCustomPermissionFlagsEnabled(workspace.id); + await this.assertCustomPermissionFlagGrantsEnabled(workspace.id); return await this.permissionFlagDefinitionService.create( input, @@ -88,7 +88,7 @@ export class PermissionFlagDefinitionResolver { @Args('input') input: UpdatePermissionFlagDefinitionInput, @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { - await this.assertCustomPermissionFlagsEnabled(workspace.id); + await this.assertCustomPermissionFlagGrantsEnabled(workspace.id); return await this.permissionFlagDefinitionService.update( input, @@ -102,7 +102,7 @@ export class PermissionFlagDefinitionResolver { @Args('id', { type: () => UUIDScalarType }) id: string, @AuthWorkspace() workspace: WorkspaceEntity, ): Promise { - await this.assertCustomPermissionFlagsEnabled(workspace.id); + await this.assertCustomPermissionFlagGrantsEnabled(workspace.id); return await this.permissionFlagDefinitionService.delete(id, workspace.id); } diff --git a/packages/twenty-server/src/engine/metadata-modules/permission-flag/dtos/create-permission-flag.input.ts b/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/dtos/create-permission-flag-grant.input.ts similarity index 75% rename from packages/twenty-server/src/engine/metadata-modules/permission-flag/dtos/create-permission-flag.input.ts rename to packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/dtos/create-permission-flag-grant.input.ts index e5d463866df..cd2b6044d14 100644 --- a/packages/twenty-server/src/engine/metadata-modules/permission-flag/dtos/create-permission-flag.input.ts +++ b/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/dtos/create-permission-flag-grant.input.ts @@ -1,6 +1,6 @@ import { PermissionFlagType } from 'twenty-shared/constants'; -export type CreatePermissionFlagInput = { +export type CreatePermissionFlagGrantInput = { roleId: string; flag: PermissionFlagType; universalIdentifier?: string; diff --git a/packages/twenty-server/src/engine/metadata-modules/permission-flag/dtos/permission-flag.dto.ts b/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/dtos/permission-flag-grant.dto.ts similarity index 85% rename from packages/twenty-server/src/engine/metadata-modules/permission-flag/dtos/permission-flag.dto.ts rename to packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/dtos/permission-flag-grant.dto.ts index 2e5c16d5a22..d9e9dbeffac 100644 --- a/packages/twenty-server/src/engine/metadata-modules/permission-flag/dtos/permission-flag.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/dtos/permission-flag-grant.dto.ts @@ -4,8 +4,8 @@ import { PermissionFlagType } from 'twenty-shared/constants'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; -@ObjectType('PermissionFlag') -export class PermissionFlagDTO { +@ObjectType('PermissionFlagGrant') +export class PermissionFlagGrantDTO { @Field(() => UUIDScalarType, { nullable: false }) id: string; diff --git a/packages/twenty-server/src/engine/metadata-modules/permission-flag/dtos/upsert-permission-flag-input.ts b/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/dtos/upsert-permission-flag-grant-input.ts similarity index 83% rename from packages/twenty-server/src/engine/metadata-modules/permission-flag/dtos/upsert-permission-flag-input.ts rename to packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/dtos/upsert-permission-flag-grant-input.ts index 063944d3e2c..5279cbcd009 100644 --- a/packages/twenty-server/src/engine/metadata-modules/permission-flag/dtos/upsert-permission-flag-input.ts +++ b/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/dtos/upsert-permission-flag-grant-input.ts @@ -6,7 +6,7 @@ import { PermissionFlagType } from 'twenty-shared/constants'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; @InputType() -export class UpsertPermissionFlagsInput { +export class UpsertPermissionFlagGrantsInput { @IsUUID() @IsNotEmpty() @Field(() => UUIDScalarType) @@ -15,5 +15,5 @@ export class UpsertPermissionFlagsInput { @IsArray() @IsEnum(PermissionFlagType, { each: true }) @Field(() => [PermissionFlagType]) - permissionFlagKeys: PermissionFlagType[]; + permissionFlagGrantKeys: PermissionFlagType[]; } diff --git a/packages/twenty-server/src/engine/metadata-modules/permission-flag/permission-flag.entity.ts b/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity.ts similarity index 73% rename from packages/twenty-server/src/engine/metadata-modules/permission-flag/permission-flag.entity.ts rename to packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity.ts index b77fce9c1a9..43c6e9b4b27 100644 --- a/packages/twenty-server/src/engine/metadata-modules/permission-flag/permission-flag.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity.ts @@ -15,17 +15,17 @@ import { import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { SyncableEntity } from 'src/engine/workspace-manager/types/syncable-entity.interface'; -@Entity('permissionFlag') -@Unique('IDX_PERMISSION_FLAG_FLAG_ROLE_ID_UNIQUE', ['flag', 'roleId']) -@Index('IDX_PERMISSION_FLAG_ROLE_ID', ['roleId']) -export class PermissionFlagEntity extends SyncableEntity { +@Entity('permissionFlagGrant') +@Unique('IDX_PERMISSION_FLAG_GRANT_FLAG_ROLE_ID_UNIQUE', ['flag', 'roleId']) +@Index('IDX_PERMISSION_FLAG_GRANT_ROLE_ID', ['roleId']) +export class PermissionFlagGrantEntity extends SyncableEntity { @PrimaryGeneratedColumn('uuid') id: string; @Column({ nullable: false, type: 'uuid' }) roleId: string; - @ManyToOne(() => RoleEntity, (role) => role.permissionFlags, { + @ManyToOne(() => RoleEntity, (role) => role.permissionFlagGrants, { onDelete: 'CASCADE', }) @JoinColumn({ name: 'roleId' }) diff --git a/packages/twenty-server/src/engine/metadata-modules/permission-flag/permission-flag.module.ts b/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.module.ts similarity index 72% rename from packages/twenty-server/src/engine/metadata-modules/permission-flag/permission-flag.module.ts rename to packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.module.ts index f77d76940d4..3b2218e5f95 100644 --- a/packages/twenty-server/src/engine/metadata-modules/permission-flag/permission-flag.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.module.ts @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common'; import { ApplicationModule } from 'src/engine/core-modules/application/application.module'; import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; -import { PermissionFlagService } from 'src/engine/metadata-modules/permission-flag/permission-flag.service'; +import { PermissionFlagGrantService } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.service'; import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache.module'; import { WorkspaceMigrationModule } from 'src/engine/workspace-manager/workspace-migration/workspace-migration.module'; @@ -13,7 +13,7 @@ import { WorkspaceMigrationModule } from 'src/engine/workspace-manager/workspace WorkspaceMigrationModule, WorkspaceManyOrAllFlatEntityMapsCacheModule, ], - providers: [PermissionFlagService], - exports: [PermissionFlagService], + providers: [PermissionFlagGrantService], + exports: [PermissionFlagGrantService], }) -export class PermissionFlagModule {} +export class PermissionFlagGrantModule {} diff --git a/packages/twenty-server/src/engine/metadata-modules/permission-flag/permission-flag.service.ts b/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.service.ts similarity index 70% rename from packages/twenty-server/src/engine/metadata-modules/permission-flag/permission-flag.service.ts rename to packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.service.ts index 192393ab09a..dd67f025f38 100644 --- a/packages/twenty-server/src/engine/metadata-modules/permission-flag/permission-flag.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.service.ts @@ -6,9 +6,9 @@ import { isDefined } from 'twenty-shared/utils'; import { ApplicationService } from 'src/engine/core-modules/application/application.service'; import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; -import { type FlatPermissionFlag } from 'src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag.type'; -import { fromCreatePermissionFlagInputToFlatPermissionFlagToCreate } from 'src/engine/metadata-modules/flat-permission-flag/utils/from-create-permission-flag-input-to-flat-permission-flag-to-create.util'; -import { type UpsertPermissionFlagsInput } from 'src/engine/metadata-modules/permission-flag/dtos/upsert-permission-flag-input'; +import { type FlatPermissionFlagGrant } from 'src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant.type'; +import { fromCreatePermissionFlagGrantInputToFlatPermissionFlagGrantToCreate } from 'src/engine/metadata-modules/flat-permission-flag-grant/utils/from-create-permission-flag-grant-input-to-flat-permission-flag-grant-to-create.util'; +import { type UpsertPermissionFlagGrantsInput } from 'src/engine/metadata-modules/permission-flag-grant/dtos/upsert-permission-flag-grant-input'; import { PermissionsException, PermissionsExceptionCode, @@ -18,25 +18,25 @@ import { WorkspaceMigrationBuilderException } from 'src/engine/workspace-manager import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration/services/workspace-migration-validate-build-and-run-service'; @Injectable() -export class PermissionFlagService { +export class PermissionFlagGrantService { constructor( private readonly workspaceMigrationValidateBuildAndRunService: WorkspaceMigrationValidateBuildAndRunService, private readonly workspaceManyOrAllFlatEntityMapsCacheService: WorkspaceManyOrAllFlatEntityMapsCacheService, private readonly applicationService: ApplicationService, ) {} - public async upsertPermissionFlags({ + public async upsertPermissionFlagGrants({ workspaceId, input, }: { workspaceId: string; - input: UpsertPermissionFlagsInput; - }): Promise { - const { flatPermissionFlagMaps, flatRoleMaps } = + input: UpsertPermissionFlagGrantsInput; + }): Promise { + const { flatPermissionFlagGrantMaps, flatRoleMaps } = await this.workspaceManyOrAllFlatEntityMapsCacheService.getOrRecomputeManyOrAllFlatEntityMaps( { workspaceId, - flatMapsKeys: ['flatPermissionFlagMaps', 'flatRoleMaps'], + flatMapsKeys: ['flatPermissionFlagGrantMaps', 'flatRoleMaps'], }, ); @@ -55,7 +55,7 @@ export class PermissionFlagService { ); } - const invalidFlags = input.permissionFlagKeys.filter( + const invalidFlags = input.permissionFlagGrantKeys.filter( (flag) => !Object.values(PermissionFlagType).includes(flag), ); @@ -71,16 +71,16 @@ export class PermissionFlagService { const roleUniversalIdentifier = role.universalIdentifier; - const currentPermissionFlagsForRole = Object.values( - flatPermissionFlagMaps.byUniversalIdentifier, + const currentPermissionFlagGrantsForRole = Object.values( + flatPermissionFlagGrantMaps.byUniversalIdentifier, ).filter( - (pf): pf is FlatPermissionFlag => + (pf): pf is FlatPermissionFlagGrant => isDefined(pf) && pf.roleUniversalIdentifier === roleUniversalIdentifier, ); - const inputSet = new Set(input.permissionFlagKeys); + const inputSet = new Set(input.permissionFlagGrantKeys); const existingSet = new Set( - currentPermissionFlagsForRole.map((pf) => pf.flag), + currentPermissionFlagGrantsForRole.map((pf) => pf.flag), ); const { workspaceCustomFlatApplication } = @@ -88,22 +88,22 @@ export class PermissionFlagService { { workspaceId }, ); - const flatEntityToCreate = input.permissionFlagKeys + const flatEntityToCreate = input.permissionFlagGrantKeys .filter((flag) => !existingSet.has(flag)) .map((flag) => - fromCreatePermissionFlagInputToFlatPermissionFlagToCreate({ - createPermissionFlagInput: { roleId: input.roleId, flag }, + fromCreatePermissionFlagGrantInputToFlatPermissionFlagGrantToCreate({ + createPermissionFlagGrantInput: { roleId: input.roleId, flag }, flatApplication: workspaceCustomFlatApplication, flatRoleMaps, }), ); - const flatEntityToDelete = currentPermissionFlagsForRole.filter( + const flatEntityToDelete = currentPermissionFlagGrantsForRole.filter( (pf) => !inputSet.has(pf.flag), ); if (flatEntityToCreate.length === 0 && flatEntityToDelete.length === 0) { - const unchanged = currentPermissionFlagsForRole.filter((pf) => + const unchanged = currentPermissionFlagGrantsForRole.filter((pf) => inputSet.has(pf.flag), ); return unchanged; @@ -113,7 +113,7 @@ export class PermissionFlagService { await this.workspaceMigrationValidateBuildAndRunService.validateBuildAndRunWorkspaceMigration( { allFlatEntityOperationByMetadataName: { - permissionFlag: { + permissionFlagGrant: { flatEntityToCreate, flatEntityToDelete, flatEntityToUpdate: [], @@ -133,18 +133,18 @@ export class PermissionFlagService { ); } - const { flatPermissionFlagMaps: freshFlatPermissionFlagMaps } = + const { flatPermissionFlagGrantMaps: freshFlatPermissionFlagGrantMaps } = await this.workspaceManyOrAllFlatEntityMapsCacheService.getOrRecomputeManyOrAllFlatEntityMaps( { workspaceId, - flatMapsKeys: ['flatPermissionFlagMaps'], + flatMapsKeys: ['flatPermissionFlagGrantMaps'], }, ); const resultFlags = Object.values( - freshFlatPermissionFlagMaps.byUniversalIdentifier, + freshFlatPermissionFlagGrantMaps.byUniversalIdentifier, ).filter( - (pf): pf is FlatPermissionFlag => + (pf): pf is FlatPermissionFlagGrant => isDefined(pf) && pf.roleUniversalIdentifier === roleUniversalIdentifier, ); diff --git a/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/utils/from-flat-permission-flag-grant-to-permission-flag-grant-dto.util.ts b/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/utils/from-flat-permission-flag-grant-to-permission-flag-grant-dto.util.ts new file mode 100644 index 00000000000..cdfc887a82f --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/permission-flag-grant/utils/from-flat-permission-flag-grant-to-permission-flag-grant-dto.util.ts @@ -0,0 +1,10 @@ +import { type FlatPermissionFlagGrant } from 'src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant.type'; +import { type PermissionFlagGrantDTO } from 'src/engine/metadata-modules/permission-flag-grant/dtos/permission-flag-grant.dto'; + +export const fromFlatPermissionFlagGrantToPermissionFlagGrantDto = ( + flatPermissionFlagGrant: FlatPermissionFlagGrant, +): PermissionFlagGrantDTO => ({ + id: flatPermissionFlagGrant.id, + roleId: flatPermissionFlagGrant.roleId, + flag: flatPermissionFlagGrant.flag, +}); diff --git a/packages/twenty-server/src/engine/metadata-modules/permission-flag/utils/from-flat-permission-flag-to-permission-flag-dto.util.ts b/packages/twenty-server/src/engine/metadata-modules/permission-flag/utils/from-flat-permission-flag-to-permission-flag-dto.util.ts deleted file mode 100644 index 97e3bb8cb35..00000000000 --- a/packages/twenty-server/src/engine/metadata-modules/permission-flag/utils/from-flat-permission-flag-to-permission-flag-dto.util.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { type FlatPermissionFlag } from 'src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag.type'; -import { type PermissionFlagDTO } from 'src/engine/metadata-modules/permission-flag/dtos/permission-flag.dto'; - -export const fromFlatPermissionFlagToPermissionFlagDto = ( - flatPermissionFlag: FlatPermissionFlag, -): PermissionFlagDTO => ({ - id: flatPermissionFlag.id, - roleId: flatPermissionFlag.roleId, - flag: flatPermissionFlag.flag, -}); diff --git a/packages/twenty-server/src/engine/metadata-modules/permissions/__tests__/permissions.service.spec.ts b/packages/twenty-server/src/engine/metadata-modules/permissions/__tests__/permissions.service.spec.ts index 23e058bf753..d5a4e308a15 100644 --- a/packages/twenty-server/src/engine/metadata-modules/permissions/__tests__/permissions.service.spec.ts +++ b/packages/twenty-server/src/engine/metadata-modules/permissions/__tests__/permissions.service.spec.ts @@ -60,7 +60,7 @@ describe('PermissionsService', () => { canBeAssignedToUsers: true, canBeAssignedToAgents: true, canBeAssignedToApiKeys: true, - permissionFlags: [], + permissionFlagGrants: [], workspaceId: 'test-workspace-id', createdAt: new Date(), updatedAt: new Date(), @@ -133,7 +133,7 @@ describe('PermissionsService', () => { canBeAssignedToUsers: true, canBeAssignedToAgents: true, canBeAssignedToApiKeys: true, - permissionFlags: [], + permissionFlagGrants: [], workspaceId: 'test-workspace-id', createdAt: new Date(), updatedAt: new Date(), @@ -184,7 +184,7 @@ describe('PermissionsService', () => { canBeAssignedToUsers: true, canBeAssignedToAgents: true, canBeAssignedToApiKeys: true, - permissionFlags: [], + permissionFlagGrants: [], roleTargets: [], objectPermissions: [], fieldPermissions: [], @@ -254,7 +254,7 @@ describe('PermissionsService', () => { canBeAssignedToUsers: true, canBeAssignedToAgents: true, canBeAssignedToApiKeys: true, - permissionFlags: [], + permissionFlagGrants: [], roleTargets: [], objectPermissions: [], fieldPermissions: [], @@ -292,8 +292,8 @@ describe('PermissionsService', () => { }); }); - describe('Granular permissions with permissionFlags', () => { - it('should grant specific tool permission when included in permissionFlags even if canAccessAllTools is false', () => { + describe('Granular permissions with permissionFlagGrants', () => { + it('should grant specific tool permission when included in permissionFlagGrants even if canAccessAllTools is false', () => { const roleWithSpecificPermission: Partial = { id: 'test-role-id', label: 'Test Role', @@ -308,7 +308,7 @@ describe('PermissionsService', () => { canBeAssignedToUsers: true, canBeAssignedToAgents: true, canBeAssignedToApiKeys: true, - permissionFlags: [ + permissionFlagGrants: [ { id: 'permission-1', flag: PermissionFlagType.UPLOAD_FILE, @@ -338,7 +338,7 @@ describe('PermissionsService', () => { ).toBe(false); }); - it('should grant specific settings permission when included in permissionFlags even if canUpdateAllSettings is false', () => { + it('should grant specific settings permission when included in permissionFlagGrants even if canUpdateAllSettings is false', () => { const roleWithSpecificPermission: Partial = { id: 'test-role-id', label: 'Test Role', @@ -353,7 +353,7 @@ describe('PermissionsService', () => { canBeAssignedToUsers: true, canBeAssignedToAgents: true, canBeAssignedToApiKeys: true, - permissionFlags: [ + permissionFlagGrants: [ { id: 'permission-1', flag: PermissionFlagType.ROLES, @@ -400,7 +400,7 @@ describe('PermissionsService', () => { canBeAssignedToUsers: true, canBeAssignedToAgents: true, canBeAssignedToApiKeys: true, - permissionFlags: [], + permissionFlagGrants: [], roleTargets: [], objectPermissions: [], fieldPermissions: [], diff --git a/packages/twenty-server/src/engine/metadata-modules/permissions/permissions.service.ts b/packages/twenty-server/src/engine/metadata-modules/permissions/permissions.service.ts index 9fb0566c866..fc22567a8ae 100644 --- a/packages/twenty-server/src/engine/metadata-modules/permissions/permissions.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/permissions/permissions.service.ts @@ -65,8 +65,8 @@ export class PermissionsService { } const defaultSettingsPermissions = - this.getDefaultUserWorkspacePermissions().permissionFlags; - const permissionFlags = Object.keys(PermissionFlagType).reduce( + this.getDefaultUserWorkspacePermissions().permissionFlagGrants; + const permissionFlagGrants = Object.keys(PermissionFlagType).reduce( (acc, feature) => { const hasBasePermission = this.isToolPermission(feature) ? roleOfUserWorkspace.canAccessAllTools @@ -76,8 +76,8 @@ export class PermissionsService { ...acc, [feature]: hasBasePermission || - roleOfUserWorkspace.permissionFlags.some( - (permissionFlag) => permissionFlag.flag === feature, + roleOfUserWorkspace.permissionFlagGrants.some( + (permissionFlagGrant) => permissionFlagGrant.flag === feature, ), }; }, @@ -92,14 +92,14 @@ export class PermissionsService { const objectsPermissions = rolesPermissions[roleOfUserWorkspace.id] ?? {}; return { - permissionFlags, + permissionFlagGrants, objectsPermissions, }; } public getDefaultUserWorkspacePermissions = () => ({ - permissionFlags: { + permissionFlagGrants: { [PermissionFlagType.API_KEYS_AND_WEBHOOKS]: false, [PermissionFlagType.WORKSPACE]: false, [PermissionFlagType.WORKSPACE_MEMBERS]: false, @@ -150,7 +150,7 @@ export class PermissionsService { const role = await this.roleRepository.findOne({ where: { id: roleId, workspaceId }, - relations: ['permissionFlags'], + relations: ['permissionFlagGrants'], }); if (!isDefined(role)) { @@ -203,7 +203,7 @@ export class PermissionsService { const role = await this.roleRepository.findOne({ where: { id: applicationRoleId, workspaceId }, - relations: ['permissionFlags'], + relations: ['permissionFlagGrants'], }); if (!isDefined(role)) { @@ -240,10 +240,10 @@ export class PermissionsService { return true; } - const permissionFlags = role.permissionFlags ?? []; + const permissionFlagGrants = role.permissionFlagGrants ?? []; - return permissionFlags.some( - (permissionFlag) => permissionFlag.flag === setting, + return permissionFlagGrants.some( + (permissionFlagGrant) => permissionFlagGrant.flag === setting, ); } @@ -292,7 +292,7 @@ export class PermissionsService { const result = await this.getRolesFromPermissionConfig( rolePermissionConfig, workspaceId, - ['permissionFlags'], + ['permissionFlagGrants'], ); if (result === null) { @@ -318,7 +318,7 @@ export class PermissionsService { const result = await this.getRolesFromPermissionConfig( rolePermissionConfig, workspaceId, - ['permissionFlags'], + ['permissionFlagGrants'], ); if (result === null) { @@ -332,10 +332,10 @@ export class PermissionsService { return true; } - const permissionFlags = role.permissionFlags ?? []; + const permissionFlagGrants = role.permissionFlagGrants ?? []; - return permissionFlags.some( - (permissionFlag) => permissionFlag.flag === flag, + return permissionFlagGrants.some( + (permissionFlagGrant) => permissionFlagGrant.flag === flag, ); }; diff --git a/packages/twenty-server/src/engine/metadata-modules/permissions/types/user-workspace-permissions.ts b/packages/twenty-server/src/engine/metadata-modules/permissions/types/user-workspace-permissions.ts index f36fd716d72..0260fcd2111 100644 --- a/packages/twenty-server/src/engine/metadata-modules/permissions/types/user-workspace-permissions.ts +++ b/packages/twenty-server/src/engine/metadata-modules/permissions/types/user-workspace-permissions.ts @@ -2,6 +2,6 @@ import { type ObjectsPermissions } from 'twenty-shared/types'; import { type PermissionFlagType } from 'twenty-shared/constants'; export type UserWorkspacePermissions = { - permissionFlags: Record; + permissionFlagGrants: Record; objectsPermissions: ObjectsPermissions; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/role/dtos/role.dto.ts b/packages/twenty-server/src/engine/metadata-modules/role/dtos/role.dto.ts index d3a39b4c6c2..bc012a8c8c8 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/dtos/role.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/dtos/role.dto.ts @@ -7,7 +7,7 @@ import { WorkspaceMemberDTO } from 'src/engine/core-modules/user/dtos/workspace- import { AgentDTO } from 'src/engine/metadata-modules/ai/ai-agent/dtos/agent.dto'; import { FieldPermissionDTO } from 'src/engine/metadata-modules/object-permission/dtos/field-permission.dto'; import { ObjectPermissionDTO } from 'src/engine/metadata-modules/object-permission/dtos/object-permission.dto'; -import { PermissionFlagDTO } from 'src/engine/metadata-modules/permission-flag/dtos/permission-flag.dto'; +import { PermissionFlagGrantDTO } from 'src/engine/metadata-modules/permission-flag-grant/dtos/permission-flag-grant.dto'; import { type RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity'; import { RowLevelPermissionPredicateGroupDTO } from 'src/engine/metadata-modules/row-level-permission-predicate/dtos/row-level-permission-predicate-group.dto'; import { RowLevelPermissionPredicateDTO } from 'src/engine/metadata-modules/row-level-permission-predicate/dtos/row-level-permission-predicate.dto'; @@ -86,8 +86,8 @@ export class RoleDTO { @Field({ nullable: false }) canDestroyAllObjectRecords: boolean; - @Field(() => [PermissionFlagDTO], { nullable: true }) - permissionFlags?: PermissionFlagDTO[]; + @Field(() => [PermissionFlagGrantDTO], { nullable: true }) + permissionFlagGrants?: PermissionFlagGrantDTO[]; @Field(() => [ObjectPermissionDTO], { nullable: true }) objectPermissions?: ObjectPermissionDTO[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/role/dtos/user-workspace-permissions.dto.ts b/packages/twenty-server/src/engine/metadata-modules/role/dtos/user-workspace-permissions.dto.ts index a7f693b346d..29a1dbf14f3 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/dtos/user-workspace-permissions.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/dtos/user-workspace-permissions.dto.ts @@ -2,5 +2,5 @@ import { type UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace export type UserWorkspacePermissionsDto = Pick< UserWorkspaceEntity, - 'objectPermissions' | 'permissionFlags' | 'objectsPermissions' + 'objectPermissions' | 'permissionFlagGrants' | 'objectsPermissions' >; diff --git a/packages/twenty-server/src/engine/metadata-modules/role/role.entity.ts b/packages/twenty-server/src/engine/metadata-modules/role/role.entity.ts index 932d118102c..c78c151c583 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/role.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/role.entity.ts @@ -11,7 +11,7 @@ import { import { FieldPermissionEntity } from 'src/engine/metadata-modules/object-permission/field-permission/field-permission.entity'; import { ObjectPermissionEntity } from 'src/engine/metadata-modules/object-permission/object-permission.entity'; -import { PermissionFlagEntity } from 'src/engine/metadata-modules/permission-flag/permission-flag.entity'; +import { PermissionFlagGrantEntity } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity'; import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity'; import { RowLevelPermissionPredicateGroupEntity } from 'src/engine/metadata-modules/row-level-permission-predicate/entities/row-level-permission-predicate-group.entity'; import { RowLevelPermissionPredicateEntity } from 'src/engine/metadata-modules/row-level-permission-predicate/entities/row-level-permission-predicate.entity'; @@ -81,10 +81,10 @@ export class RoleEntity extends SyncableEntity implements Required { objectPermissions: Relation; @OneToMany( - () => PermissionFlagEntity, - (permissionFlag: PermissionFlagEntity) => permissionFlag.role, + () => PermissionFlagGrantEntity, + (permissionFlagGrant: PermissionFlagGrantEntity) => permissionFlagGrant.role, ) - permissionFlags: Relation; + permissionFlagGrants: Relation; @OneToMany( () => FieldPermissionEntity, diff --git a/packages/twenty-server/src/engine/metadata-modules/role/role.module.ts b/packages/twenty-server/src/engine/metadata-modules/role/role.module.ts index 5e9d9a5da53..d7386f011ab 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/role.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/role.module.ts @@ -15,8 +15,8 @@ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadat import { FieldPermissionEntity } from 'src/engine/metadata-modules/object-permission/field-permission/field-permission.entity'; import { ObjectPermissionEntity } from 'src/engine/metadata-modules/object-permission/object-permission.entity'; import { ObjectPermissionModule } from 'src/engine/metadata-modules/object-permission/object-permission.module'; -import { PermissionFlagEntity } from 'src/engine/metadata-modules/permission-flag/permission-flag.entity'; -import { PermissionFlagModule } from 'src/engine/metadata-modules/permission-flag/permission-flag.module'; +import { PermissionFlagGrantEntity } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity'; +import { PermissionFlagGrantModule } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.module'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; @@ -39,7 +39,7 @@ import { WorkspaceMigrationModule } from 'src/engine/workspace-manager/workspace RoleEntity, RoleTargetEntity, ObjectPermissionEntity, - PermissionFlagEntity, + PermissionFlagGrantEntity, FieldPermissionEntity, UserWorkspaceEntity, ObjectMetadataEntity, @@ -52,7 +52,7 @@ import { WorkspaceMigrationModule } from 'src/engine/workspace-manager/workspace ApiKeyModule, PermissionsModule, ObjectPermissionModule, - PermissionFlagModule, + PermissionFlagGrantModule, RowLevelPermissionModule, WorkspaceManyOrAllFlatEntityMapsCacheModule, WorkspaceMigrationModule, diff --git a/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts index 0b4f756c8d3..9cfafdc2421 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts @@ -39,10 +39,10 @@ import { FieldPermissionService } from 'src/engine/metadata-modules/object-permi import { ObjectPermissionService } from 'src/engine/metadata-modules/object-permission/object-permission.service'; import { fromFlatFieldPermissionToFieldPermissionDto } from 'src/engine/metadata-modules/object-permission/utils/from-flat-field-permission-to-field-permission-dto.util'; import { fromFlatObjectPermissionToObjectPermissionDto } from 'src/engine/metadata-modules/object-permission/utils/from-flat-object-permission-to-object-permission-dto.util'; -import { PermissionFlagDTO } from 'src/engine/metadata-modules/permission-flag/dtos/permission-flag.dto'; -import { UpsertPermissionFlagsInput } from 'src/engine/metadata-modules/permission-flag/dtos/upsert-permission-flag-input'; -import { PermissionFlagService } from 'src/engine/metadata-modules/permission-flag/permission-flag.service'; -import { fromFlatPermissionFlagToPermissionFlagDto } from 'src/engine/metadata-modules/permission-flag/utils/from-flat-permission-flag-to-permission-flag-dto.util'; +import { PermissionFlagGrantDTO } from 'src/engine/metadata-modules/permission-flag-grant/dtos/permission-flag-grant.dto'; +import { UpsertPermissionFlagGrantsInput } from 'src/engine/metadata-modules/permission-flag-grant/dtos/upsert-permission-flag-grant-input'; +import { PermissionFlagGrantService } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.service'; +import { fromFlatPermissionFlagGrantToPermissionFlagGrantDto } from 'src/engine/metadata-modules/permission-flag-grant/utils/from-flat-permission-flag-grant-to-permission-flag-grant-dto.util'; import { PermissionsException, PermissionsExceptionCode, @@ -87,7 +87,7 @@ export class RoleResolver { private readonly roleService: RoleService, private readonly userWorkspaceService: UserWorkspaceService, private readonly objectPermissionService: ObjectPermissionService, - private readonly settingPermissionService: PermissionFlagService, + private readonly settingPermissionService: PermissionFlagGrantService, private readonly agentRoleService: AiAgentRoleService, private readonly apiKeyRoleService: ApiKeyRoleService, private readonly fieldPermissionService: FieldPermissionService, @@ -223,18 +223,18 @@ export class RoleResolver { ); } - @Mutation(() => [PermissionFlagDTO]) - async upsertPermissionFlags( + @Mutation(() => [PermissionFlagGrantDTO]) + async upsertPermissionFlagGrants( @AuthWorkspace() workspace: WorkspaceEntity, - @Args('upsertPermissionFlagsInput') - upsertPermissionFlagsInput: UpsertPermissionFlagsInput, - ): Promise { - const flatPermissionFlags = - await this.settingPermissionService.upsertPermissionFlags({ + @Args('upsertPermissionFlagGrantsInput') + upsertPermissionFlagGrantsInput: UpsertPermissionFlagGrantsInput, + ): Promise { + const flatPermissionFlagGrants = + await this.settingPermissionService.upsertPermissionFlagGrants({ workspaceId: workspace.id, - input: upsertPermissionFlagsInput, + input: upsertPermissionFlagGrantsInput, }); - return flatPermissionFlags.map(fromFlatPermissionFlagToPermissionFlagDto); + return flatPermissionFlagGrants.map(fromFlatPermissionFlagGrantToPermissionFlagGrantDto); } @Mutation(() => [FieldPermissionDTO]) diff --git a/packages/twenty-server/src/engine/metadata-modules/role/role.service.ts b/packages/twenty-server/src/engine/metadata-modules/role/role.service.ts index 8f57ecebb9f..f0e995e6da9 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/role.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/role.service.ts @@ -49,7 +49,7 @@ export class RoleService { }, relations: { roleTargets: true, - permissionFlags: true, + permissionFlagGrants: true, objectPermissions: true, fieldPermissions: true, }, @@ -67,7 +67,7 @@ export class RoleService { }, relations: { roleTargets: true, - permissionFlags: true, + permissionFlagGrants: true, objectPermissions: true, fieldPermissions: true, }, diff --git a/packages/twenty-server/src/engine/metadata-modules/role/services/__tests__/workspace-roles-permissions-cache.service.spec.ts b/packages/twenty-server/src/engine/metadata-modules/role/services/__tests__/workspace-roles-permissions-cache.service.spec.ts index e2b4610137d..f2ad93bfbde 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/services/__tests__/workspace-roles-permissions-cache.service.spec.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/services/__tests__/workspace-roles-permissions-cache.service.spec.ts @@ -8,7 +8,7 @@ import { type Repository } from 'typeorm'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { FieldPermissionEntity } from 'src/engine/metadata-modules/object-permission/field-permission/field-permission.entity'; import { ObjectPermissionEntity } from 'src/engine/metadata-modules/object-permission/object-permission.entity'; -import { PermissionFlagEntity } from 'src/engine/metadata-modules/permission-flag/permission-flag.entity'; +import { PermissionFlagGrantEntity } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { WorkspaceRolesPermissionsCacheService } from 'src/engine/metadata-modules/role/services/workspace-roles-permissions-cache.service'; import { RowLevelPermissionPredicateGroupEntity } from 'src/engine/metadata-modules/row-level-permission-predicate/entities/row-level-permission-predicate-group.entity'; @@ -23,7 +23,7 @@ const PERSON_OBJECT_METADATA_ID = '44444444-4444-4444-8444-444444444444'; const createBaseRole = ( overrides: Partial & - Pick, + Pick, ): RoleEntity => ({ id: ROLE_ID, @@ -56,8 +56,8 @@ describe('WorkspaceRolesPermissionsCacheService', () => { let objectPermissionRepository: jest.Mocked< Pick, 'find'> >; - let permissionFlagRepository: jest.Mocked< - Pick, 'find'> + let permissionFlagGrantRepository: jest.Mocked< + Pick, 'find'> >; const workspaceObjectMetadataFixture: ObjectMetadataEntity[] = [ @@ -94,7 +94,7 @@ describe('WorkspaceRolesPermissionsCacheService', () => { find: jest.fn().mockResolvedValue([]), }; - permissionFlagRepository = { + permissionFlagGrantRepository = { find: jest.fn().mockResolvedValue([]), }; const fieldPermissionRepository = { @@ -123,8 +123,8 @@ describe('WorkspaceRolesPermissionsCacheService', () => { useValue: objectPermissionRepository, }, { - provide: getRepositoryToken(PermissionFlagEntity), - useValue: permissionFlagRepository, + provide: getRepositoryToken(PermissionFlagGrantEntity), + useValue: permissionFlagGrantRepository, }, { provide: getRepositoryToken(FieldPermissionEntity), @@ -148,7 +148,7 @@ describe('WorkspaceRolesPermissionsCacheService', () => { it('should deny all record permissions when role has neither workspace members access nor update-all-settings', async () => { roleRepository.find.mockResolvedValue([ createBaseRole({ - permissionFlags: [], + permissionFlagGrants: [], objectPermissions: [], }), ]); @@ -164,16 +164,16 @@ describe('WorkspaceRolesPermissionsCacheService', () => { }); it('should grant all record permissions when role has WORKSPACE_MEMBERS permission flag', async () => { - permissionFlagRepository.find.mockResolvedValue([ + permissionFlagGrantRepository.find.mockResolvedValue([ { roleId: ROLE_ID, flag: PermissionFlagType.WORKSPACE_MEMBERS, - } as PermissionFlagEntity, + } as PermissionFlagGrantEntity, ]); roleRepository.find.mockResolvedValue([ createBaseRole({ - permissionFlags: [], + permissionFlagGrants: [], objectPermissions: [], }), ]); @@ -192,7 +192,7 @@ describe('WorkspaceRolesPermissionsCacheService', () => { roleRepository.find.mockResolvedValue([ createBaseRole({ canUpdateAllSettings: true, - permissionFlags: [], + permissionFlagGrants: [], objectPermissions: [], }), ]); @@ -210,7 +210,7 @@ describe('WorkspaceRolesPermissionsCacheService', () => { it('should deny all record permissions when role has neither workflows access nor update-all-settings', async () => { roleRepository.find.mockResolvedValue([ createBaseRole({ - permissionFlags: [], + permissionFlagGrants: [], objectPermissions: [], }), ]); @@ -225,16 +225,16 @@ describe('WorkspaceRolesPermissionsCacheService', () => { }); it('should grant all record permissions when role has WORKFLOWS permission flag', async () => { - permissionFlagRepository.find.mockResolvedValue([ + permissionFlagGrantRepository.find.mockResolvedValue([ { roleId: ROLE_ID, flag: PermissionFlagType.WORKFLOWS, - } as PermissionFlagEntity, + } as PermissionFlagGrantEntity, ]); roleRepository.find.mockResolvedValue([ createBaseRole({ - permissionFlags: [], + permissionFlagGrants: [], objectPermissions: [], }), ]); @@ -264,7 +264,7 @@ describe('WorkspaceRolesPermissionsCacheService', () => { roleRepository.find.mockResolvedValue([ createBaseRole({ - permissionFlags: [], + permissionFlagGrants: [], objectPermissions: [], }), ]); @@ -285,7 +285,7 @@ describe('WorkspaceRolesPermissionsCacheService', () => { canUpdateAllObjectRecords: true, canSoftDeleteAllObjectRecords: true, canDestroyAllObjectRecords: true, - permissionFlags: [], + permissionFlagGrants: [], objectPermissions: [], }), ]); diff --git a/packages/twenty-server/src/engine/metadata-modules/role/services/workspace-flat-role-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/role/services/workspace-flat-role-map-cache.service.ts index 92a3e5690f0..76d72cb262b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/services/workspace-flat-role-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/services/workspace-flat-role-map-cache.service.ts @@ -12,7 +12,7 @@ import { type FlatRole } from 'src/engine/metadata-modules/flat-role/types/flat- import { fromRoleEntityToFlatRole } from 'src/engine/metadata-modules/flat-role/utils/from-role-entity-to-flat-role.util'; import { FieldPermissionEntity } from 'src/engine/metadata-modules/object-permission/field-permission/field-permission.entity'; import { ObjectPermissionEntity } from 'src/engine/metadata-modules/object-permission/object-permission.entity'; -import { PermissionFlagEntity } from 'src/engine/metadata-modules/permission-flag/permission-flag.entity'; +import { PermissionFlagGrantEntity } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity'; import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { RowLevelPermissionPredicateGroupEntity } from 'src/engine/metadata-modules/row-level-permission-predicate/entities/row-level-permission-predicate-group.entity'; @@ -36,8 +36,8 @@ export class WorkspaceFlatRoleMapCacheService extends WorkspaceCacheProvider< private readonly roleTargetRepository: Repository, @InjectRepository(ObjectPermissionEntity) private readonly objectPermissionRepository: Repository, - @InjectRepository(PermissionFlagEntity) - private readonly permissionFlagRepository: Repository, + @InjectRepository(PermissionFlagGrantEntity) + private readonly permissionFlagGrantRepository: Repository, @InjectRepository(FieldPermissionEntity) private readonly fieldPermissionRepository: Repository, @InjectRepository(RowLevelPermissionPredicateEntity) @@ -56,7 +56,7 @@ export class WorkspaceFlatRoleMapCacheService extends WorkspaceCacheProvider< applications, roleTargets, objectPermissions, - permissionFlags, + permissionFlagGrants, fieldPermissions, rowLevelPermissionPredicates, rowLevelPermissionPredicateGroups, @@ -80,7 +80,7 @@ export class WorkspaceFlatRoleMapCacheService extends WorkspaceCacheProvider< select: ['id', 'universalIdentifier', 'roleId'], withDeleted: true, }), - this.permissionFlagRepository.find({ + this.permissionFlagGrantRepository.find({ where: { workspaceId }, select: ['id', 'universalIdentifier', 'roleId'], withDeleted: true, @@ -105,7 +105,7 @@ export class WorkspaceFlatRoleMapCacheService extends WorkspaceCacheProvider< const [ roleTargetsByRoleId, objectPermissionsByRoleId, - permissionFlagsByRoleId, + permissionFlagGrantsByRoleId, fieldPermissionsByRoleId, rowLevelPermissionPredicatesByRoleId, rowLevelPermissionPredicateGroupsByRoleId, @@ -120,7 +120,7 @@ export class WorkspaceFlatRoleMapCacheService extends WorkspaceCacheProvider< foreignKey: 'roleId', }, { - entities: permissionFlags, + entities: permissionFlagGrants, foreignKey: 'roleId', }, { @@ -149,7 +149,7 @@ export class WorkspaceFlatRoleMapCacheService extends WorkspaceCacheProvider< ...roleEntity, roleTargets: roleTargetsByRoleId.get(roleEntity.id) || [], objectPermissions: objectPermissionsByRoleId.get(roleEntity.id) || [], - permissionFlags: permissionFlagsByRoleId.get(roleEntity.id) || [], + permissionFlagGrants: permissionFlagGrantsByRoleId.get(roleEntity.id) || [], fieldPermissions: fieldPermissionsByRoleId.get(roleEntity.id) || [], rowLevelPermissionPredicates: rowLevelPermissionPredicatesByRoleId.get(roleEntity.id) || [], diff --git a/packages/twenty-server/src/engine/metadata-modules/role/services/workspace-roles-permissions-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/role/services/workspace-roles-permissions-cache.service.ts index bdbec046854..9fda0a6d091 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/services/workspace-roles-permissions-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/services/workspace-roles-permissions-cache.service.ts @@ -16,7 +16,7 @@ import { WorkspaceCacheProvider } from 'src/engine/workspace-cache/interfaces/wo import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { FieldPermissionEntity } from 'src/engine/metadata-modules/object-permission/field-permission/field-permission.entity'; import { ObjectPermissionEntity } from 'src/engine/metadata-modules/object-permission/object-permission.entity'; -import { PermissionFlagEntity } from 'src/engine/metadata-modules/permission-flag/permission-flag.entity'; +import { PermissionFlagGrantEntity } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; import { RowLevelPermissionPredicateGroupEntity } from 'src/engine/metadata-modules/row-level-permission-predicate/entities/row-level-permission-predicate-group.entity'; import { RowLevelPermissionPredicateEntity } from 'src/engine/metadata-modules/row-level-permission-predicate/entities/row-level-permission-predicate.entity'; @@ -41,8 +41,8 @@ export class WorkspaceRolesPermissionsCacheService extends WorkspaceCacheProvide private readonly roleRepository: Repository, @InjectRepository(ObjectPermissionEntity) private readonly objectPermissionRepository: Repository, - @InjectRepository(PermissionFlagEntity) - private readonly permissionFlagRepository: Repository, + @InjectRepository(PermissionFlagGrantEntity) + private readonly permissionFlagGrantRepository: Repository, @InjectRepository(FieldPermissionEntity) private readonly fieldPermissionRepository: Repository, @InjectRepository(RowLevelPermissionPredicateEntity) @@ -59,7 +59,7 @@ export class WorkspaceRolesPermissionsCacheService extends WorkspaceCacheProvide const [ roles, objectPermissions, - permissionFlags, + permissionFlagGrants, fieldPermissions, rowLevelPermissionPredicates, rowLevelPermissionPredicateGroups, @@ -71,7 +71,7 @@ export class WorkspaceRolesPermissionsCacheService extends WorkspaceCacheProvide this.objectPermissionRepository.find({ where: { workspaceId }, }), - this.permissionFlagRepository.find({ + this.permissionFlagGrantRepository.find({ where: { workspaceId }, }), this.fieldPermissionRepository.find({ @@ -91,9 +91,9 @@ export class WorkspaceRolesPermissionsCacheService extends WorkspaceCacheProvide entities: objectPermissions, foreignKey: 'roleId', }); - const permissionFlagsByRoleId = - regroupEntitiesByRelatedEntityId<'permissionFlag'>({ - entities: permissionFlags, + const permissionFlagGrantsByRoleId = + regroupEntitiesByRelatedEntityId<'permissionFlagGrant'>({ + entities: permissionFlagGrants, foreignKey: 'roleId', }); const fieldPermissionsByRoleId = @@ -117,7 +117,7 @@ export class WorkspaceRolesPermissionsCacheService extends WorkspaceCacheProvide for (const role of roles) { const roleObjectPermissions = objectPermissionsByRoleId.get(role.id) ?? []; - const rolePermissionFlags = permissionFlagsByRoleId.get(role.id) ?? []; + const rolePermissionFlagGrants = permissionFlagGrantsByRoleId.get(role.id) ?? []; const roleFieldPermissions = fieldPermissionsByRoleId.get(role.id) ?? []; const roleRowLevelPermissionPredicates = rowLevelPermissionPredicatesByRoleId.get(role.id) ?? []; @@ -150,7 +150,7 @@ export class WorkspaceRolesPermissionsCacheService extends WorkspaceCacheProvide const hasWorkflowsPermissions = this.hasSettingsGatedObjectPermissions( role, - rolePermissionFlags, + rolePermissionFlagGrants, PermissionFlagType.WORKFLOWS, ); @@ -163,7 +163,7 @@ export class WorkspaceRolesPermissionsCacheService extends WorkspaceCacheProvide const hasWorkspaceMembersPermissions = this.hasSettingsGatedObjectPermissions( role, - rolePermissionFlags, + rolePermissionFlagGrants, PermissionFlagType.WORKSPACE_MEMBERS, ); @@ -269,13 +269,13 @@ export class WorkspaceRolesPermissionsCacheService extends WorkspaceCacheProvide private hasSettingsGatedObjectPermissions( role: RoleEntity, - permissionFlags: PermissionFlagEntity[], + permissionFlagGrants: PermissionFlagGrantEntity[], permissionFlagType: PermissionFlagType, ): boolean { const hasPermissionFromRole = role.canUpdateAllSettings; const hasPermissionFromSettingPermissions = isDefined( - permissionFlags.find( - (permissionFlag) => permissionFlag.flag === permissionFlagType, + permissionFlagGrants.find( + (permissionFlagGrant) => permissionFlagGrant.flag === permissionFlagType, ), ); diff --git a/packages/twenty-server/src/engine/metadata-modules/role/utils/fromRoleEntityToRoleDto.util.ts b/packages/twenty-server/src/engine/metadata-modules/role/utils/fromRoleEntityToRoleDto.util.ts index a40b266b488..365acda0398 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/utils/fromRoleEntityToRoleDto.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/utils/fromRoleEntityToRoleDto.util.ts @@ -19,7 +19,7 @@ export const fromRoleEntityToRoleDto = (role: RoleEntity): RoleDTO => { canBeAssignedToAgents: role.canBeAssignedToAgents, canBeAssignedToApiKeys: role.canBeAssignedToApiKeys, roleTargets: role.roleTargets, - permissionFlags: role.permissionFlags, + permissionFlagGrants: role.permissionFlagGrants, objectPermissions: role.objectPermissions, fieldPermissions: role.fieldPermissions, }; diff --git a/packages/twenty-server/src/engine/metadata-modules/role/utils/fromUserWorkspacePermissionsToUserWorkspacePermissionsDto.ts b/packages/twenty-server/src/engine/metadata-modules/role/utils/fromUserWorkspacePermissionsToUserWorkspacePermissionsDto.ts index 903ed419376..9795e8b4dcb 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/utils/fromUserWorkspacePermissionsToUserWorkspacePermissionsDto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/utils/fromUserWorkspacePermissionsToUserWorkspacePermissionsDto.ts @@ -5,7 +5,7 @@ import { type UserWorkspacePermissionsDto } from 'src/engine/metadata-modules/ro export const fromUserWorkspacePermissionsToUserWorkspacePermissionsDto = ({ objectsPermissions: rawObjectsPermissions, - permissionFlags: rawSettingsPermissions, + permissionFlagGrants: rawSettingsPermissions, }: UserWorkspacePermissions): UserWorkspacePermissionsDto => { const objectPermissions = Object.entries(rawObjectsPermissions).map( ([objectMetadataId, permissions]) => ({ @@ -23,13 +23,13 @@ export const fromUserWorkspacePermissionsToUserWorkspacePermissionsDto = ({ const objectsPermissions = objectPermissions; - const permissionFlags = ( + const permissionFlagGrants = ( Object.keys(rawSettingsPermissions) as PermissionFlagType[] ).filter((feature) => rawSettingsPermissions[feature] === true); return { objectPermissions, objectsPermissions, - permissionFlags, + permissionFlagGrants, }; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.service.ts b/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.service.ts index 4f9c683ec78..3d404ef6405 100644 --- a/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/user-role/user-role.service.ts @@ -108,7 +108,7 @@ export class UserRoleService { }, relations: { role: { - permissionFlags: true, + permissionFlagGrants: true, }, }, }); diff --git a/packages/twenty-server/src/engine/metadata-modules/view-permissions/services/view-access.service.ts b/packages/twenty-server/src/engine/metadata-modules/view-permissions/services/view-access.service.ts index 66a6e496fb0..b9ad5eb08d6 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-permissions/services/view-access.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-permissions/services/view-access.service.ts @@ -142,7 +142,7 @@ export class ViewAccessService { workspaceId, }); - return permissions.permissionFlags[PermissionFlagType.VIEWS] ?? false; + return permissions.permissionFlagGrants[PermissionFlagType.VIEWS] ?? false; } if (isDefined(apiKeyId)) { diff --git a/packages/twenty-server/src/engine/workspace-cache/types/workspace-cache-key.type.ts b/packages/twenty-server/src/engine/workspace-cache/types/workspace-cache-key.type.ts index 3abd68d97d3..d27c4a97635 100644 --- a/packages/twenty-server/src/engine/workspace-cache/types/workspace-cache-key.type.ts +++ b/packages/twenty-server/src/engine/workspace-cache/types/workspace-cache-key.type.ts @@ -35,7 +35,7 @@ export const WORKSPACE_CACHE_KEYS_V2 = { flatApplicationMaps: 'flat-maps:flatApplicationMaps', flatRoleMaps: 'flat-maps:role', flatRoleTargetMaps: 'flat-maps:role-target', - flatPermissionFlagMaps: 'flat-maps:permission-flag', + flatPermissionFlagGrantMaps: 'flat-maps:permission-flag-grant', flatPermissionFlagDefinitionMaps: 'flat-maps:permission-flag-definition', flatObjectPermissionMaps: 'flat-maps:object-permission', flatFieldPermissionMaps: 'flat-maps:field-permission', diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/constants/standard-command-menu-item.constant.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/constants/standard-command-menu-item.constant.ts index c66087e5045..ab439c27aad 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/constants/standard-command-menu-item.constant.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/constants/standard-command-menu-item.constant.ts @@ -148,7 +148,7 @@ export const STANDARD_COMMAND_MENU_ITEMS = { position: 10, shortLabel: 'Export', availabilityType: CommandMenuItemAvailabilityType.RECORD_SELECTION, - conditionalAvailabilityExpression: 'permissionFlags.EXPORT_CSV', + conditionalAvailabilityExpression: 'permissionFlagGrants.EXPORT_CSV', availabilityObjectMetadataUniversalIdentifier: null, frontComponentUniversalIdentifier: null, engineComponentKey: EngineComponentKey.EXPORT_RECORDS, @@ -193,7 +193,7 @@ export const STANDARD_COMMAND_MENU_ITEMS = { shortLabel: 'Import', availabilityType: CommandMenuItemAvailabilityType.GLOBAL_OBJECT_CONTEXT, conditionalAvailabilityExpression: - 'not hasAnySoftDeleteFilterOnView and permissionFlags.IMPORT_CSV', + 'not hasAnySoftDeleteFilterOnView and permissionFlagGrants.IMPORT_CSV', availabilityObjectMetadataUniversalIdentifier: null, frontComponentUniversalIdentifier: null, engineComponentKey: EngineComponentKey.IMPORT_RECORDS, @@ -207,7 +207,7 @@ export const STANDARD_COMMAND_MENU_ITEMS = { position: 14, shortLabel: 'Export', availabilityType: CommandMenuItemAvailabilityType.GLOBAL_OBJECT_CONTEXT, - conditionalAvailabilityExpression: 'permissionFlags.EXPORT_CSV', + conditionalAvailabilityExpression: 'permissionFlagGrants.EXPORT_CSV', availabilityObjectMetadataUniversalIdentifier: null, frontComponentUniversalIdentifier: null, engineComponentKey: EngineComponentKey.EXPORT_VIEW, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/role-metadata/create-standard-role-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/role-metadata/create-standard-role-flat-metadata.util.ts index 26d3c04405e..f545dfd6e88 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/role-metadata/create-standard-role-flat-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/role-metadata/create-standard-role-flat-metadata.util.ts @@ -72,8 +72,8 @@ export const createStandardRoleFlatMetadata = ({ TWENTY_STANDARD_APPLICATION.universalIdentifier, createdAt: now, updatedAt: now, - permissionFlagIds: [], - permissionFlagUniversalIdentifiers: [], + permissionFlagGrantIds: [], + permissionFlagGrantUniversalIdentifiers: [], objectPermissionUniversalIdentifiers: [], fieldPermissionIds: [], fieldPermissionUniversalIdentifiers: [], diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/twenty-standard-application-all-flat-entity-maps.constant.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/twenty-standard-application-all-flat-entity-maps.constant.ts index 48932731cc7..223d8ef08d7 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/twenty-standard-application-all-flat-entity-maps.constant.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/twenty-standard-application-all-flat-entity-maps.constant.ts @@ -211,7 +211,7 @@ export const computeTwentyStandardApplicationAllFlatEntityMaps = ({ twentyStandardApplicationId, standardObjectMetadataRelatedEntityIds, dependencyFlatEntityMaps: { - flatPermissionFlagMaps: createEmptyFlatEntityMaps(), + flatPermissionFlagGrantMaps: createEmptyFlatEntityMaps(), }, }); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/utils/enrich-create-workspace-migration-action-with-ids.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/utils/enrich-create-workspace-migration-action-with-ids.util.ts index cdc0bb2a5a2..fa2f1ee6c46 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/utils/enrich-create-workspace-migration-action-with-ids.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/utils/enrich-create-workspace-migration-action-with-ids.util.ts @@ -167,7 +167,7 @@ export const enrichCreateWorkspaceMigrationActionsWithIds = ({ case 'navigationMenuItem': case 'frontComponent': case 'viewSort': - case 'permissionFlag': + case 'permissionFlagGrant': case 'permissionFlagDefinition': case 'objectPermission': case 'fieldPermission': diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/workspace-migration-build-orchestrator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/workspace-migration-build-orchestrator.service.ts index 7f13dc51c06..74c3069b7e7 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/workspace-migration-build-orchestrator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/workspace-migration-build-orchestrator.service.ts @@ -29,7 +29,7 @@ import { WorkspaceMigrationPageLayoutTabActionsBuilderService } from 'src/engine import { WorkspaceMigrationPageLayoutWidgetActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/page-layout-widget/workspace-migration-page-layout-widget-actions-builder.service'; import { WorkspaceMigrationPageLayoutActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/page-layout/workspace-migration-page-layout-actions-builder.service'; import { WorkspaceMigrationPermissionFlagDefinitionActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-definition/workspace-migration-permission-flag-definition-actions-builder.service'; -import { WorkspaceMigrationPermissionFlagActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag/workspace-migration-permission-flag-actions-builder.service'; +import { WorkspaceMigrationPermissionFlagGrantActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-grant/workspace-migration-permission-flag-grant-actions-builder.service'; import { WorkspaceMigrationRoleTargetActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/role-target/workspace-migration-role-target-actions-builder.service'; import { WorkspaceMigrationRoleActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/role/workspace-migration-role-actions-builder.service'; import { WorkspaceMigrationRowLevelPermissionPredicateGroupActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/row-level-permission-predicate-group/workspace-migration-row-level-permission-predicate-group-actions-builder.service'; @@ -59,7 +59,7 @@ export class WorkspaceMigrationBuildOrchestratorService { private readonly workspaceMigrationViewSortActionsBuilderService: WorkspaceMigrationViewSortActionsBuilderService, private readonly workspaceMigrationFieldPermissionActionsBuilderService: WorkspaceMigrationFieldPermissionActionsBuilderService, private readonly workspaceMigrationObjectPermissionActionsBuilderService: WorkspaceMigrationObjectPermissionActionsBuilderService, - private readonly workspaceMigrationPermissionFlagActionsBuilderService: WorkspaceMigrationPermissionFlagActionsBuilderService, + private readonly workspaceMigrationPermissionFlagGrantActionsBuilderService: WorkspaceMigrationPermissionFlagGrantActionsBuilderService, private readonly workspaceMigrationPermissionFlagDefinitionActionsBuilderService: WorkspaceMigrationPermissionFlagDefinitionActionsBuilderService, private readonly workspaceMigrationLogicFunctionActionsBuilderService: WorkspaceMigrationLogicFunctionActionsBuilderService, private readonly workspaceMigrationRoleTargetActionsBuilderService: WorkspaceMigrationRoleTargetActionsBuilderService, @@ -160,7 +160,7 @@ export class WorkspaceMigrationBuildOrchestratorService { flatRoleMaps, flatObjectPermissionMaps, flatFieldPermissionMaps, - flatPermissionFlagMaps, + flatPermissionFlagGrantMaps, flatPermissionFlagDefinitionMaps, flatRoleTargetMaps, flatAgentMaps, @@ -561,28 +561,28 @@ export class WorkspaceMigrationBuildOrchestratorService { } } - if (isDefined(flatPermissionFlagMaps)) { - const { from: fromFlatPermissionFlagMaps, to: toFlatPermissionFlagMaps } = - flatPermissionFlagMaps; + if (isDefined(flatPermissionFlagGrantMaps)) { + const { from: fromFlatPermissionFlagGrantMaps, to: toFlatPermissionFlagGrantMaps } = + flatPermissionFlagGrantMaps; - const permissionFlagResult = - await this.workspaceMigrationPermissionFlagActionsBuilderService.validateAndBuild( + const permissionFlagGrantResult = + await this.workspaceMigrationPermissionFlagGrantActionsBuilderService.validateAndBuild( { additionalCacheDataMaps, - from: fromFlatPermissionFlagMaps, - to: toFlatPermissionFlagMaps, + from: fromFlatPermissionFlagGrantMaps, + to: toFlatPermissionFlagGrantMaps, buildOptions, dependencyOptimisticFlatEntityMaps: optimisticAllFlatEntityMaps, workspaceId, }, ); - if (permissionFlagResult.status === 'fail') { - orchestratorFailureReport.permissionFlag.push( - ...permissionFlagResult.errors, + if (permissionFlagGrantResult.status === 'fail') { + orchestratorFailureReport.permissionFlagGrant.push( + ...permissionFlagGrantResult.errors, ); } else { - orchestratorActionsReport.permissionFlag = permissionFlagResult.actions; + orchestratorActionsReport.permissionFlagGrant = permissionFlagGrantResult.actions; } } @@ -1017,9 +1017,9 @@ export class WorkspaceMigrationBuildOrchestratorService { /// // Permission flags - ...aggregatedOrchestratorActionsReport.permissionFlag.delete, - ...aggregatedOrchestratorActionsReport.permissionFlag.create, - ...aggregatedOrchestratorActionsReport.permissionFlag.update, + ...aggregatedOrchestratorActionsReport.permissionFlagGrant.delete, + ...aggregatedOrchestratorActionsReport.permissionFlagGrant.create, + ...aggregatedOrchestratorActionsReport.permissionFlagGrant.update, /// // Permission flag definitions diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/constants/all-jsonb-properties-with-serialized-relation-by-metadata-name.constant.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/constants/all-jsonb-properties-with-serialized-relation-by-metadata-name.constant.ts index 57288cce7d7..d09cdb4842e 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/constants/all-jsonb-properties-with-serialized-relation-by-metadata-name.constant.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/constants/all-jsonb-properties-with-serialized-relation-by-metadata-name.constant.ts @@ -38,7 +38,7 @@ export const ALL_JSONB_PROPERTIES_WITH_SERIALIZED_RELATION_BY_METADATA_NAME = { }, commandMenuItem: {}, navigationMenuItem: {}, - permissionFlag: {}, + permissionFlagGrant: {}, permissionFlagDefinition: {}, objectPermission: {}, fieldPermission: {}, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag-grant.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag-grant.type.ts new file mode 100644 index 00000000000..9fef1d48e38 --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag-grant.type.ts @@ -0,0 +1,7 @@ +import { type PermissionFlagGrantEntity } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity'; +import { type UniversalFlatEntityFrom } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type'; + +export type UniversalFlatPermissionFlagGrant = UniversalFlatEntityFrom< + PermissionFlagGrantEntity, + 'permissionFlagGrant' +>; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag.type.ts deleted file mode 100644 index 9cd8debb9d5..00000000000 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-permission-flag.type.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { type PermissionFlagEntity } from 'src/engine/metadata-modules/permission-flag/permission-flag.entity'; -import { type UniversalFlatEntityFrom } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type'; - -export type UniversalFlatPermissionFlag = UniversalFlatEntityFrom< - PermissionFlagEntity, - 'permissionFlag' ->; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag/types/workspace-migration-permission-flag-action.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-grant/types/workspace-migration-permission-flag-grant-action.type.ts similarity index 62% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag/types/workspace-migration-permission-flag-action.type.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-grant/types/workspace-migration-permission-flag-grant-action.type.ts index 506cbbe488c..8d64f43ba3d 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag/types/workspace-migration-permission-flag-action.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-grant/types/workspace-migration-permission-flag-grant-action.type.ts @@ -5,20 +5,20 @@ import { type BaseUniversalCreateWorkspaceMigrationAction } from 'src/engine/wor import { type BaseUniversalDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-delete-workspace-migration-action.type'; import { type BaseUniversalUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-update-workspace-migration-action.type'; -export type FlatCreatePermissionFlagAction = - BaseFlatCreateWorkspaceMigrationAction<'permissionFlag'>; +export type FlatCreatePermissionFlagGrantAction = + BaseFlatCreateWorkspaceMigrationAction<'permissionFlagGrant'>; -export type FlatUpdatePermissionFlagAction = - BaseFlatUpdateWorkspaceMigrationAction<'permissionFlag'>; +export type FlatUpdatePermissionFlagGrantAction = + BaseFlatUpdateWorkspaceMigrationAction<'permissionFlagGrant'>; -export type FlatDeletePermissionFlagAction = - BaseFlatDeleteWorkspaceMigrationAction<'permissionFlag'>; +export type FlatDeletePermissionFlagGrantAction = + BaseFlatDeleteWorkspaceMigrationAction<'permissionFlagGrant'>; -export type UniversalCreatePermissionFlagAction = - BaseUniversalCreateWorkspaceMigrationAction<'permissionFlag'>; +export type UniversalCreatePermissionFlagGrantAction = + BaseUniversalCreateWorkspaceMigrationAction<'permissionFlagGrant'>; -export type UniversalUpdatePermissionFlagAction = - BaseUniversalUpdateWorkspaceMigrationAction<'permissionFlag'>; +export type UniversalUpdatePermissionFlagGrantAction = + BaseUniversalUpdateWorkspaceMigrationAction<'permissionFlagGrant'>; -export type UniversalDeletePermissionFlagAction = - BaseUniversalDeleteWorkspaceMigrationAction<'permissionFlag'>; +export type UniversalDeletePermissionFlagGrantAction = + BaseUniversalDeleteWorkspaceMigrationAction<'permissionFlagGrant'>; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag/workspace-migration-permission-flag-actions-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-grant/workspace-migration-permission-flag-grant-actions-builder.service.ts similarity index 54% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag/workspace-migration-permission-flag-actions-builder.service.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-grant/workspace-migration-permission-flag-grant-actions-builder.service.ts index d7d19c4419c..ca057920fbb 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag/workspace-migration-permission-flag-actions-builder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-grant/workspace-migration-permission-flag-grant-actions-builder.service.ts @@ -3,32 +3,32 @@ import { Injectable } from '@nestjs/common'; import { ALL_METADATA_NAME } from 'twenty-shared/metadata'; import { WorkspaceEntityMigrationBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/services/workspace-entity-migration-builder.service'; -import { UniversalUpdatePermissionFlagAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag/types/workspace-migration-permission-flag-action.type'; -import { FlatPermissionFlagValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-validator.service'; +import { UniversalUpdatePermissionFlagGrantAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-grant/types/workspace-migration-permission-flag-grant-action.type'; +import { FlatPermissionFlagGrantValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-grant-validator.service'; import { UniversalFlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/universal-flat-entity-validation-args.type'; import { UniversalFlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/universal-flat-entity-validation-result.type'; import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/universal-flat-entity-update-validation-args.type'; @Injectable() -export class WorkspaceMigrationPermissionFlagActionsBuilderService extends WorkspaceEntityMigrationBuilderService< - typeof ALL_METADATA_NAME.permissionFlag +export class WorkspaceMigrationPermissionFlagGrantActionsBuilderService extends WorkspaceEntityMigrationBuilderService< + typeof ALL_METADATA_NAME.permissionFlagGrant > { constructor( - private readonly flatPermissionFlagValidatorService: FlatPermissionFlagValidatorService, + private readonly flatPermissionFlagGrantValidatorService: FlatPermissionFlagGrantValidatorService, ) { - super(ALL_METADATA_NAME.permissionFlag); + super(ALL_METADATA_NAME.permissionFlagGrant); } protected validateFlatEntityCreation( args: UniversalFlatEntityValidationArgs< - typeof ALL_METADATA_NAME.permissionFlag + typeof ALL_METADATA_NAME.permissionFlagGrant >, ): UniversalFlatEntityValidationReturnType< - typeof ALL_METADATA_NAME.permissionFlag, + typeof ALL_METADATA_NAME.permissionFlagGrant, 'create' > { const validationResult = - this.flatPermissionFlagValidatorService.validateFlatPermissionFlagCreation( + this.flatPermissionFlagGrantValidatorService.validateFlatPermissionFlagGrantCreation( args, ); @@ -39,28 +39,28 @@ export class WorkspaceMigrationPermissionFlagActionsBuilderService extends Works }; } - const { flatEntityToValidate: flatPermissionFlagToValidate } = args; + const { flatEntityToValidate: flatPermissionFlagGrantToValidate } = args; return { status: 'success', action: { type: 'create', - metadataName: 'permissionFlag', - flatEntity: flatPermissionFlagToValidate, + metadataName: 'permissionFlagGrant', + flatEntity: flatPermissionFlagGrantToValidate, }, }; } protected validateFlatEntityDeletion( args: UniversalFlatEntityValidationArgs< - typeof ALL_METADATA_NAME.permissionFlag + typeof ALL_METADATA_NAME.permissionFlagGrant >, ): UniversalFlatEntityValidationReturnType< - typeof ALL_METADATA_NAME.permissionFlag, + typeof ALL_METADATA_NAME.permissionFlagGrant, 'delete' > { const validationResult = - this.flatPermissionFlagValidatorService.validateFlatPermissionFlagDeletion( + this.flatPermissionFlagGrantValidatorService.validateFlatPermissionFlagGrantDeletion( args, ); @@ -71,28 +71,28 @@ export class WorkspaceMigrationPermissionFlagActionsBuilderService extends Works }; } - const { flatEntityToValidate: flatPermissionFlagToValidate } = args; + const { flatEntityToValidate: flatPermissionFlagGrantToValidate } = args; return { status: 'success', action: { type: 'delete', - metadataName: 'permissionFlag', - universalIdentifier: flatPermissionFlagToValidate.universalIdentifier, + metadataName: 'permissionFlagGrant', + universalIdentifier: flatPermissionFlagGrantToValidate.universalIdentifier, }, }; } protected validateFlatEntityUpdate( args: FlatEntityUpdateValidationArgs< - typeof ALL_METADATA_NAME.permissionFlag + typeof ALL_METADATA_NAME.permissionFlagGrant >, ): UniversalFlatEntityValidationReturnType< - typeof ALL_METADATA_NAME.permissionFlag, + typeof ALL_METADATA_NAME.permissionFlagGrant, 'update' > { const validationResult = - this.flatPermissionFlagValidatorService.validateFlatPermissionFlagUpdate( + this.flatPermissionFlagGrantValidatorService.validateFlatPermissionFlagGrantUpdate( args, ); @@ -105,16 +105,16 @@ export class WorkspaceMigrationPermissionFlagActionsBuilderService extends Works const { universalIdentifier, flatEntityUpdate } = args; - const updatePermissionFlagAction: UniversalUpdatePermissionFlagAction = { + const updatePermissionFlagGrantAction: UniversalUpdatePermissionFlagGrantAction = { type: 'update', - metadataName: 'permissionFlag', + metadataName: 'permissionFlagGrant', universalIdentifier, update: flatEntityUpdate, }; return { status: 'success', - action: updatePermissionFlagAction, + action: updatePermissionFlagGrantAction, }; } } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/__tests__/flat-permission-flag-definition-validator.service.spec.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/__tests__/flat-permission-flag-definition-validator.service.spec.ts index 44392c57e2b..f30d7680971 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/__tests__/flat-permission-flag-definition-validator.service.spec.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/__tests__/flat-permission-flag-definition-validator.service.spec.ts @@ -5,7 +5,7 @@ import { ALL_METADATA_NAME } from 'twenty-shared/metadata'; import { createEmptyFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/constant/create-empty-flat-entity-maps.constant'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; -import { type FlatPermissionFlag } from 'src/engine/metadata-modules/flat-permission-flag/types/flat-permission-flag.type'; +import { type FlatPermissionFlagGrant } from 'src/engine/metadata-modules/flat-permission-flag-grant/types/flat-permission-flag-grant.type'; import { type FlatPermissionFlagDefinition } from 'src/engine/metadata-modules/flat-permission-flag-definition/types/flat-permission-flag-definition.type'; import { type PermissionFlagDefinitionPermissionType } from 'src/engine/metadata-modules/permission-flag-definition/constants/permission-flag-definition-permission-type.constant'; import { PermissionFlagDefinitionExceptionCode } from 'src/engine/metadata-modules/permission-flag-definition/permission-flag-definition.exception'; @@ -38,12 +38,12 @@ const buildFlatDefinition = ( const buildEmptyMaps = (): FlatEntityMaps => createEmptyFlatEntityMaps() as unknown as FlatEntityMaps; -const buildEmptyPermissionFlagMaps = (): FlatEntityMaps => - createEmptyFlatEntityMaps() as unknown as FlatEntityMaps; +const buildEmptyPermissionFlagGrantMaps = (): FlatEntityMaps => + createEmptyFlatEntityMaps() as unknown as FlatEntityMaps; -const buildFlatPermissionFlag = ( - overrides: Partial = {}, -): FlatPermissionFlag => +const buildFlatPermissionFlagGrant = ( + overrides: Partial = {}, +): FlatPermissionFlagGrant => ({ id: '00000000-0000-0000-0000-000000000101', universalIdentifier: '00000000-0000-0000-0000-000000000101', @@ -55,7 +55,7 @@ const buildFlatPermissionFlag = ( createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), ...overrides, - }) as unknown as FlatPermissionFlag; + }) as unknown as FlatPermissionFlagGrant; const buildArgs = ( flatEntityToValidate: FlatPermissionFlagDefinition, @@ -280,7 +280,7 @@ describe('FlatPermissionFlagDefinitionValidatorService', () => { flatEntityToValidate: existing, optimisticFlatEntityMapsAndRelatedFlatEntityMaps: { flatPermissionFlagDefinitionMaps: optimisticMaps, - flatPermissionFlagMaps: buildEmptyPermissionFlagMaps(), + flatPermissionFlagGrantMaps: buildEmptyPermissionFlagGrantMaps(), }, buildOptions: {} as never, } as unknown as Parameters< @@ -297,7 +297,7 @@ describe('FlatPermissionFlagDefinitionValidatorService', () => { }), optimisticFlatEntityMapsAndRelatedFlatEntityMaps: { flatPermissionFlagDefinitionMaps: buildEmptyMaps(), - flatPermissionFlagMaps: buildEmptyPermissionFlagMaps(), + flatPermissionFlagGrantMaps: buildEmptyPermissionFlagGrantMaps(), }, buildOptions: {} as never, } as unknown as Parameters< @@ -322,7 +322,7 @@ describe('FlatPermissionFlagDefinitionValidatorService', () => { flatEntityToValidate: existing, optimisticFlatEntityMapsAndRelatedFlatEntityMaps: { flatPermissionFlagDefinitionMaps: optimisticMaps, - flatPermissionFlagMaps: buildEmptyPermissionFlagMaps(), + flatPermissionFlagGrantMaps: buildEmptyPermissionFlagGrantMaps(), }, buildOptions: { isSystemBuild: false, @@ -346,19 +346,19 @@ describe('FlatPermissionFlagDefinitionValidatorService', () => { optimisticMaps.byUniversalIdentifier[existing.universalIdentifier] = existing; - const permissionFlagMaps = buildEmptyPermissionFlagMaps(); - const permissionFlag = buildFlatPermissionFlag({ + const permissionFlagGrantMaps = buildEmptyPermissionFlagGrantMaps(); + const permissionFlagGrant = buildFlatPermissionFlagGrant({ flag: PermissionFlagType.WORKSPACE, }); - permissionFlagMaps.byUniversalIdentifier[ - permissionFlag.universalIdentifier - ] = permissionFlag; + permissionFlagGrantMaps.byUniversalIdentifier[ + permissionFlagGrant.universalIdentifier + ] = permissionFlagGrant; const result = service.validateFlatPermissionFlagDefinitionDeletion({ flatEntityToValidate: existing, optimisticFlatEntityMapsAndRelatedFlatEntityMaps: { flatPermissionFlagDefinitionMaps: optimisticMaps, - flatPermissionFlagMaps: permissionFlagMaps, + flatPermissionFlagGrantMaps: permissionFlagGrantMaps, }, buildOptions: { isSystemBuild: false, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-definition-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-definition-validator.service.ts index 6c46d2bb27f..e48238dc7db 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-definition-validator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-definition-validator.service.ts @@ -171,7 +171,7 @@ export class FlatPermissionFlagDefinitionValidatorService { optimisticFlatEntityMapsAndRelatedFlatEntityMaps: { flatPermissionFlagDefinitionMaps: optimisticFlatPermissionFlagDefinitionMaps, - flatPermissionFlagMaps: optimisticFlatPermissionFlagMaps, + flatPermissionFlagGrantMaps: optimisticFlatPermissionFlagGrantMaps, }, buildOptions, }: UniversalFlatEntityValidationArgs< @@ -215,10 +215,10 @@ export class FlatPermissionFlagDefinitionValidatorService { } const isPermissionFlagDefinitionInUse = Object.values( - optimisticFlatPermissionFlagMaps.byUniversalIdentifier, + optimisticFlatPermissionFlagGrantMaps.byUniversalIdentifier, ).some( - (permissionFlag) => - isDefined(permissionFlag) && permissionFlag.flag === existing.key, + (permissionFlagGrant) => + isDefined(permissionFlagGrant) && permissionFlagGrant.flag === existing.key, ); if (isPermissionFlagDefinitionInUse) { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-grant-validator.service.ts similarity index 74% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-validator.service.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-grant-validator.service.ts index 1bcf3a42907..352d600c38b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-validator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-grant-validator.service.ts @@ -14,42 +14,42 @@ import { UniversalFlatEntityValidationArgs } from 'src/engine/workspace-manager/ import { validateRoleBelongsToCallerApplication } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/utils/validate-role-belongs-to-caller-application.util'; @Injectable() -export class FlatPermissionFlagValidatorService { - validateFlatPermissionFlagCreation({ - flatEntityToValidate: flatPermissionFlagToValidate, +export class FlatPermissionFlagGrantValidatorService { + validateFlatPermissionFlagGrantCreation({ + flatEntityToValidate: flatPermissionFlagGrantToValidate, optimisticFlatEntityMapsAndRelatedFlatEntityMaps: { - flatPermissionFlagMaps: optimisticFlatPermissionFlagMaps, + flatPermissionFlagGrantMaps: optimisticFlatPermissionFlagGrantMaps, flatRoleMaps, }, buildOptions, }: UniversalFlatEntityValidationArgs< - typeof ALL_METADATA_NAME.permissionFlag - >): FailedFlatEntityValidation<'permissionFlag', 'create'> { + typeof ALL_METADATA_NAME.permissionFlagGrant + >): FailedFlatEntityValidation<'permissionFlagGrant', 'create'> { const validationResult = getEmptyFlatEntityValidationError({ flatEntityMinimalInformation: { - universalIdentifier: flatPermissionFlagToValidate.universalIdentifier, + universalIdentifier: flatPermissionFlagGrantToValidate.universalIdentifier, roleUniversalIdentifier: - flatPermissionFlagToValidate.roleUniversalIdentifier, + flatPermissionFlagGrantToValidate.roleUniversalIdentifier, }, - metadataName: 'permissionFlag', + metadataName: 'permissionFlagGrant', type: 'create', }); const existingByUniversalId = findFlatEntityByUniversalIdentifier({ - universalIdentifier: flatPermissionFlagToValidate.universalIdentifier, - flatEntityMaps: optimisticFlatPermissionFlagMaps, + universalIdentifier: flatPermissionFlagGrantToValidate.universalIdentifier, + flatEntityMaps: optimisticFlatPermissionFlagGrantMaps, }); if (isDefined(existingByUniversalId)) { validationResult.errors.push({ code: PermissionsExceptionCode.INVALID_SETTING, - message: t`Permission flag with universal identifier ${flatPermissionFlagToValidate.universalIdentifier} already exists`, + message: t`Permission flag with universal identifier ${flatPermissionFlagGrantToValidate.universalIdentifier} already exists`, userFriendlyMessage: msg`Permission flag already exists`, }); } const referencedRole = findFlatEntityByUniversalIdentifier({ - universalIdentifier: flatPermissionFlagToValidate.roleUniversalIdentifier, + universalIdentifier: flatPermissionFlagGrantToValidate.roleUniversalIdentifier, flatEntityMaps: flatRoleMaps, }); @@ -77,9 +77,9 @@ export class FlatPermissionFlagValidatorService { } const isValidFlag = - isDefined(flatPermissionFlagToValidate.flag) && + isDefined(flatPermissionFlagGrantToValidate.flag) && Object.values(PermissionFlagType).includes( - flatPermissionFlagToValidate.flag, + flatPermissionFlagGrantToValidate.flag, ); if (!isValidFlag) { @@ -91,15 +91,15 @@ export class FlatPermissionFlagValidatorService { } const duplicateForSameRole = Object.values( - optimisticFlatPermissionFlagMaps.byUniversalIdentifier, + optimisticFlatPermissionFlagGrantMaps.byUniversalIdentifier, ).filter( (pf) => isDefined(pf) && pf.roleUniversalIdentifier === - flatPermissionFlagToValidate.roleUniversalIdentifier && - pf.flag === flatPermissionFlagToValidate.flag && + flatPermissionFlagGrantToValidate.roleUniversalIdentifier && + pf.flag === flatPermissionFlagGrantToValidate.flag && pf.universalIdentifier !== - flatPermissionFlagToValidate.universalIdentifier, + flatPermissionFlagGrantToValidate.universalIdentifier, ); if (duplicateForSameRole.length > 0) { @@ -113,31 +113,31 @@ export class FlatPermissionFlagValidatorService { return validationResult; } - validateFlatPermissionFlagUpdate({ + validateFlatPermissionFlagGrantUpdate({ universalIdentifier, flatEntityUpdate, optimisticFlatEntityMapsAndRelatedFlatEntityMaps: { - flatPermissionFlagMaps: optimisticFlatPermissionFlagMaps, + flatPermissionFlagGrantMaps: optimisticFlatPermissionFlagGrantMaps, flatRoleMaps, }, buildOptions, }: FlatEntityUpdateValidationArgs< - typeof ALL_METADATA_NAME.permissionFlag - >): FailedFlatEntityValidation<'permissionFlag', 'update'> { - const existingFlatPermissionFlag = findFlatEntityByUniversalIdentifier({ + typeof ALL_METADATA_NAME.permissionFlagGrant + >): FailedFlatEntityValidation<'permissionFlagGrant', 'update'> { + const existingFlatPermissionFlagGrant = findFlatEntityByUniversalIdentifier({ universalIdentifier, - flatEntityMaps: optimisticFlatPermissionFlagMaps, + flatEntityMaps: optimisticFlatPermissionFlagGrantMaps, }); const validationResult = getEmptyFlatEntityValidationError({ flatEntityMinimalInformation: { universalIdentifier, }, - metadataName: 'permissionFlag', + metadataName: 'permissionFlagGrant', type: 'update', }); - if (!isDefined(existingFlatPermissionFlag)) { + if (!isDefined(existingFlatPermissionFlagGrant)) { validationResult.errors.push({ code: PermissionsExceptionCode.PERMISSION_NOT_FOUND, message: t`Permission flag to update not found`, @@ -147,13 +147,13 @@ export class FlatPermissionFlagValidatorService { return validationResult; } - const updatedFlatPermissionFlag = { - ...existingFlatPermissionFlag, + const updatedFlatPermissionFlagGrant = { + ...existingFlatPermissionFlagGrant, ...flatEntityUpdate, }; const referencedRole = findFlatEntityByUniversalIdentifier({ - universalIdentifier: updatedFlatPermissionFlag.roleUniversalIdentifier, + universalIdentifier: updatedFlatPermissionFlagGrant.roleUniversalIdentifier, flatEntityMaps: flatRoleMaps, }); @@ -195,13 +195,13 @@ export class FlatPermissionFlagValidatorService { } const duplicateForSameRole = Object.values( - optimisticFlatPermissionFlagMaps.byUniversalIdentifier, + optimisticFlatPermissionFlagGrantMaps.byUniversalIdentifier, ).filter( (pf) => isDefined(pf) && pf.roleUniversalIdentifier === - updatedFlatPermissionFlag.roleUniversalIdentifier && - pf.flag === updatedFlatPermissionFlag.flag && + updatedFlatPermissionFlagGrant.roleUniversalIdentifier && + pf.flag === updatedFlatPermissionFlagGrant.flag && pf.universalIdentifier !== universalIdentifier, ); @@ -216,29 +216,29 @@ export class FlatPermissionFlagValidatorService { return validationResult; } - validateFlatPermissionFlagDeletion({ + validateFlatPermissionFlagGrantDeletion({ flatEntityToValidate: { universalIdentifier }, optimisticFlatEntityMapsAndRelatedFlatEntityMaps: { - flatPermissionFlagMaps: optimisticFlatPermissionFlagMaps, + flatPermissionFlagGrantMaps: optimisticFlatPermissionFlagGrantMaps, flatRoleMaps, }, }: UniversalFlatEntityValidationArgs< - typeof ALL_METADATA_NAME.permissionFlag - >): FailedFlatEntityValidation<'permissionFlag', 'delete'> { + typeof ALL_METADATA_NAME.permissionFlagGrant + >): FailedFlatEntityValidation<'permissionFlagGrant', 'delete'> { const validationResult = getEmptyFlatEntityValidationError({ flatEntityMinimalInformation: { universalIdentifier, }, - metadataName: 'permissionFlag', + metadataName: 'permissionFlagGrant', type: 'delete', }); - const existingFlatPermissionFlag = findFlatEntityByUniversalIdentifier({ + const existingFlatPermissionFlagGrant = findFlatEntityByUniversalIdentifier({ universalIdentifier, - flatEntityMaps: optimisticFlatPermissionFlagMaps, + flatEntityMaps: optimisticFlatPermissionFlagGrantMaps, }); - if (!isDefined(existingFlatPermissionFlag)) { + if (!isDefined(existingFlatPermissionFlagGrant)) { validationResult.errors.push({ code: PermissionsExceptionCode.PERMISSION_NOT_FOUND, message: t`Permission flag to delete not found`, @@ -246,7 +246,7 @@ export class FlatPermissionFlagValidatorService { }); } else { const referencedRole = findFlatEntityByUniversalIdentifier({ - universalIdentifier: existingFlatPermissionFlag.roleUniversalIdentifier, + universalIdentifier: existingFlatPermissionFlagGrant.roleUniversalIdentifier, flatEntityMaps: flatRoleMaps, }); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/workspace-migration-builder-validators.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/workspace-migration-builder-validators.module.ts index d5fb9d22237..9688a6243f7 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/workspace-migration-builder-validators.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/workspace-migration-builder-validators.module.ts @@ -17,7 +17,7 @@ import { FlatPageLayoutTabValidatorService } from 'src/engine/workspace-manager/ import { FlatPageLayoutValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-page-layout-validator.service'; import { FlatPageLayoutWidgetValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-page-layout-widget-validator.service'; import { FlatPermissionFlagDefinitionValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-definition-validator.service'; -import { FlatPermissionFlagValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-validator.service'; +import { FlatPermissionFlagGrantValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-permission-flag-grant-validator.service'; import { FlatRoleTargetValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-role-target-validator.service'; import { FlatRoleValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-role-validator.service'; import { FlatRowLevelPermissionPredicateGroupValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-row-level-permission-predicate-group-validator.service'; @@ -46,7 +46,7 @@ import { FlatConnectionProviderValidatorService } from 'src/engine/workspace-man FlatViewSortValidatorService, FlatFieldPermissionValidatorService, FlatObjectPermissionValidatorService, - FlatPermissionFlagValidatorService, + FlatPermissionFlagGrantValidatorService, FlatPermissionFlagDefinitionValidatorService, FlatIndexValidatorService, FlatFieldMetadataValidatorService, @@ -80,7 +80,7 @@ import { FlatConnectionProviderValidatorService } from 'src/engine/workspace-man FlatViewSortValidatorService, FlatFieldPermissionValidatorService, FlatObjectPermissionValidatorService, - FlatPermissionFlagValidatorService, + FlatPermissionFlagGrantValidatorService, FlatPermissionFlagDefinitionValidatorService, FlatIndexValidatorService, FlatFieldMetadataValidatorService, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/workspace-migration-builder.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/workspace-migration-builder.module.ts index 9e014388248..ad1d99f51af 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/workspace-migration-builder.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/workspace-migration-builder.module.ts @@ -16,7 +16,7 @@ import { WorkspaceMigrationPageLayoutTabActionsBuilderService } from 'src/engine import { WorkspaceMigrationPageLayoutWidgetActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/page-layout-widget/workspace-migration-page-layout-widget-actions-builder.service'; import { WorkspaceMigrationPageLayoutActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/page-layout/workspace-migration-page-layout-actions-builder.service'; import { WorkspaceMigrationPermissionFlagDefinitionActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-definition/workspace-migration-permission-flag-definition-actions-builder.service'; -import { WorkspaceMigrationPermissionFlagActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag/workspace-migration-permission-flag-actions-builder.service'; +import { WorkspaceMigrationPermissionFlagGrantActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-grant/workspace-migration-permission-flag-grant-actions-builder.service'; import { WorkspaceMigrationRoleTargetActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/role-target/workspace-migration-role-target-actions-builder.service'; import { WorkspaceMigrationRoleActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/role/workspace-migration-role-actions-builder.service'; import { WorkspaceMigrationRowLevelPermissionPredicateGroupActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/row-level-permission-predicate-group/workspace-migration-row-level-permission-predicate-group-actions-builder.service'; @@ -48,7 +48,7 @@ import { WorkspaceMigrationBuilderValidatorsModule } from 'src/engine/workspace- WorkspaceMigrationViewSortActionsBuilderService, WorkspaceMigrationFieldPermissionActionsBuilderService, WorkspaceMigrationObjectPermissionActionsBuilderService, - WorkspaceMigrationPermissionFlagActionsBuilderService, + WorkspaceMigrationPermissionFlagGrantActionsBuilderService, WorkspaceMigrationPermissionFlagDefinitionActionsBuilderService, WorkspaceMigrationIndexActionsBuilderService, WorkspaceMigrationLogicFunctionActionsBuilderService, @@ -81,7 +81,7 @@ import { WorkspaceMigrationBuilderValidatorsModule } from 'src/engine/workspace- WorkspaceMigrationViewSortActionsBuilderService, WorkspaceMigrationFieldPermissionActionsBuilderService, WorkspaceMigrationObjectPermissionActionsBuilderService, - WorkspaceMigrationPermissionFlagActionsBuilderService, + WorkspaceMigrationPermissionFlagGrantActionsBuilderService, WorkspaceMigrationPermissionFlagDefinitionActionsBuilderService, WorkspaceMigrationFieldActionsBuilderService, WorkspaceMigrationLogicFunctionActionsBuilderService, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag/services/create-permission-flag-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-grant/services/create-permission-flag-grant-action-handler.service.ts similarity index 80% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag/services/create-permission-flag-action-handler.service.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-grant/services/create-permission-flag-grant-action-handler.service.ts index 515d557d24a..49170885084 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag/services/create-permission-flag-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-grant/services/create-permission-flag-grant-action-handler.service.ts @@ -5,25 +5,25 @@ import { v4 } from 'uuid'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface'; import { resolveUniversalRelationIdentifiersToIds } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util'; import { - FlatCreatePermissionFlagAction, - UniversalCreatePermissionFlagAction, -} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag/types/workspace-migration-permission-flag-action.type'; + FlatCreatePermissionFlagGrantAction, + UniversalCreatePermissionFlagGrantAction, +} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-grant/types/workspace-migration-permission-flag-grant-action.type'; import { WorkspaceMigrationActionRunnerArgs, WorkspaceMigrationActionRunnerContext, } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type'; @Injectable() -export class CreatePermissionFlagActionHandlerService extends WorkspaceMigrationRunnerActionHandler( +export class CreatePermissionFlagGrantActionHandlerService extends WorkspaceMigrationRunnerActionHandler( 'create', - 'permissionFlag', + 'permissionFlagGrant', ) { override async transpileUniversalActionToFlatAction({ action, allFlatEntityMaps, flatApplication, workspaceId, - }: WorkspaceMigrationActionRunnerArgs): Promise { + }: WorkspaceMigrationActionRunnerArgs): Promise { const { roleId } = resolveUniversalRelationIdentifiersToIds({ flatEntityMaps: allFlatEntityMaps, metadataName: action.metadataName, @@ -43,7 +43,7 @@ export class CreatePermissionFlagActionHandlerService extends WorkspaceMigration } async executeForMetadata( - context: WorkspaceMigrationActionRunnerContext, + context: WorkspaceMigrationActionRunnerContext, ): Promise { const { flatAction, queryRunner } = context; const { flatEntity } = flatAction; @@ -55,7 +55,7 @@ export class CreatePermissionFlagActionHandlerService extends WorkspaceMigration } async executeForWorkspaceSchema( - _context: WorkspaceMigrationActionRunnerContext, + _context: WorkspaceMigrationActionRunnerContext, ): Promise { return; } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag/services/delete-permission-flag-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-grant/services/delete-permission-flag-grant-action-handler.service.ts similarity index 60% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag/services/delete-permission-flag-action-handler.service.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-grant/services/delete-permission-flag-grant-action-handler.service.ts index 21aebd6b4fd..f4a4b4a087c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag/services/delete-permission-flag-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-grant/services/delete-permission-flag-grant-action-handler.service.ts @@ -1,49 +1,49 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { PermissionFlagEntity } from 'src/engine/metadata-modules/permission-flag/permission-flag.entity'; +import { PermissionFlagGrantEntity } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity'; import { - FlatDeletePermissionFlagAction, - UniversalDeletePermissionFlagAction, -} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag/types/workspace-migration-permission-flag-action.type'; + FlatDeletePermissionFlagGrantAction, + UniversalDeletePermissionFlagGrantAction, +} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-grant/types/workspace-migration-permission-flag-grant-action.type'; import { WorkspaceMigrationActionRunnerArgs, WorkspaceMigrationActionRunnerContext, } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type'; @Injectable() -export class DeletePermissionFlagActionHandlerService extends WorkspaceMigrationRunnerActionHandler( +export class DeletePermissionFlagGrantActionHandlerService extends WorkspaceMigrationRunnerActionHandler( 'delete', - 'permissionFlag', + 'permissionFlagGrant', ) { constructor() { super(); } override async transpileUniversalActionToFlatAction( - context: WorkspaceMigrationActionRunnerArgs, - ): Promise { + context: WorkspaceMigrationActionRunnerArgs, + ): Promise { return this.transpileUniversalDeleteActionToFlatDeleteAction(context); } async executeForMetadata( - context: WorkspaceMigrationActionRunnerContext, + context: WorkspaceMigrationActionRunnerContext, ): Promise { const { flatAction, queryRunner, workspaceId } = context; - const permissionFlagRepository = - queryRunner.manager.getRepository( - PermissionFlagEntity, + const permissionFlagGrantRepository = + queryRunner.manager.getRepository( + PermissionFlagGrantEntity, ); - await permissionFlagRepository.delete({ + await permissionFlagGrantRepository.delete({ id: flatAction.entityId, workspaceId, }); } async executeForWorkspaceSchema( - _context: WorkspaceMigrationActionRunnerContext, + _context: WorkspaceMigrationActionRunnerContext, ): Promise { return; } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag/services/update-permission-flag-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-grant/services/update-permission-flag-grant-action-handler.service.ts similarity index 63% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag/services/update-permission-flag-action-handler.service.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-grant/services/update-permission-flag-grant-action-handler.service.ts index 0c260882e2a..c6a7087a2d5 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag/services/update-permission-flag-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-grant/services/update-permission-flag-grant-action-handler.service.ts @@ -2,69 +2,69 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface'; import { findFlatEntityByUniversalIdentifierOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier-or-throw.util'; -import { PermissionFlagEntity } from 'src/engine/metadata-modules/permission-flag/permission-flag.entity'; +import { PermissionFlagGrantEntity } from 'src/engine/metadata-modules/permission-flag-grant/permission-flag-grant.entity'; import { resolveUniversalUpdateRelationIdentifiersToIds } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-update-relation-identifiers-to-ids.util'; import { - FlatUpdatePermissionFlagAction, - UniversalUpdatePermissionFlagAction, -} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag/types/workspace-migration-permission-flag-action.type'; + FlatUpdatePermissionFlagGrantAction, + UniversalUpdatePermissionFlagGrantAction, +} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/permission-flag-grant/types/workspace-migration-permission-flag-grant-action.type'; import { WorkspaceMigrationActionRunnerArgs, WorkspaceMigrationActionRunnerContext, } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type'; @Injectable() -export class UpdatePermissionFlagActionHandlerService extends WorkspaceMigrationRunnerActionHandler( +export class UpdatePermissionFlagGrantActionHandlerService extends WorkspaceMigrationRunnerActionHandler( 'update', - 'permissionFlag', + 'permissionFlagGrant', ) { constructor() { super(); } override async transpileUniversalActionToFlatAction( - context: WorkspaceMigrationActionRunnerArgs, - ): Promise { + context: WorkspaceMigrationActionRunnerArgs, + ): Promise { const { action, allFlatEntityMaps } = context; - const flatPermissionFlag = findFlatEntityByUniversalIdentifierOrThrow({ - flatEntityMaps: allFlatEntityMaps.flatPermissionFlagMaps, + const flatPermissionFlagGrant = findFlatEntityByUniversalIdentifierOrThrow({ + flatEntityMaps: allFlatEntityMaps.flatPermissionFlagGrantMaps, universalIdentifier: action.universalIdentifier, }); const update = resolveUniversalUpdateRelationIdentifiersToIds({ - metadataName: 'permissionFlag', + metadataName: 'permissionFlagGrant', universalUpdate: action.update, allFlatEntityMaps, }); return { type: 'update', - metadataName: 'permissionFlag', - entityId: flatPermissionFlag.id, + metadataName: 'permissionFlagGrant', + entityId: flatPermissionFlagGrant.id, update, }; } async executeForMetadata( - context: WorkspaceMigrationActionRunnerContext, + context: WorkspaceMigrationActionRunnerContext, ): Promise { const { flatAction, queryRunner, workspaceId } = context; const { entityId, update } = flatAction; - const permissionFlagRepository = - queryRunner.manager.getRepository( - PermissionFlagEntity, + const permissionFlagGrantRepository = + queryRunner.manager.getRepository( + PermissionFlagGrantEntity, ); - await permissionFlagRepository.update( + await permissionFlagGrantRepository.update( { id: entityId, workspaceId }, update, ); } async executeForWorkspaceSchema( - _context: WorkspaceMigrationActionRunnerContext, + _context: WorkspaceMigrationActionRunnerContext, ): Promise { return; } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/role/services/create-role-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/role/services/create-role-action-handler.service.ts index 963780d797b..e5ba4bb3e8b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/role/services/create-role-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/role/services/create-role-action-handler.service.ts @@ -44,7 +44,7 @@ export class CreateRoleActionHandlerService extends WorkspaceMigrationRunnerActi rowLevelPermissionPredicateIds: [], rowLevelPermissionPredicateGroupIds: [], objectPermissionIds: [], - permissionFlagIds: [], + permissionFlagGrantIds: [], fieldPermissionIds: [], ...emptyUniversalForeignKeyAggregators, }, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/workspace-schema-migration-runner-action-handlers.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/workspace-schema-migration-runner-action-handlers.module.ts index cf13e7e4ffc..eeeb37a797e 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/workspace-schema-migration-runner-action-handlers.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/workspace-schema-migration-runner-action-handlers.module.ts @@ -46,9 +46,9 @@ import { UpdatePageLayoutActionHandlerService } from 'src/engine/workspace-manag import { CreatePermissionFlagDefinitionActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-definition/services/create-permission-flag-definition-action-handler.service'; import { DeletePermissionFlagDefinitionActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-definition/services/delete-permission-flag-definition-action-handler.service'; import { UpdatePermissionFlagDefinitionActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-definition/services/update-permission-flag-definition-action-handler.service'; -import { CreatePermissionFlagActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag/services/create-permission-flag-action-handler.service'; -import { DeletePermissionFlagActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag/services/delete-permission-flag-action-handler.service'; -import { UpdatePermissionFlagActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag/services/update-permission-flag-action-handler.service'; +import { CreatePermissionFlagGrantActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-grant/services/create-permission-flag-grant-action-handler.service'; +import { DeletePermissionFlagGrantActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-grant/services/delete-permission-flag-grant-action-handler.service'; +import { UpdatePermissionFlagGrantActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/permission-flag-grant/services/update-permission-flag-grant-action-handler.service'; import { CreateRoleTargetActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/role-target/services/create-role-target-action-handler.service'; import { DeleteRoleTargetActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/role-target/services/delete-role-target-action-handler.service'; import { UpdateRoleTargetActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/role-target/services/update-role-target-action-handler.service'; @@ -154,9 +154,9 @@ import { UpdateConnectionProviderActionHandlerService } from 'src/engine/workspa DeleteRoleTargetActionHandlerService, UpdateRoleTargetActionHandlerService, - CreatePermissionFlagActionHandlerService, - UpdatePermissionFlagActionHandlerService, - DeletePermissionFlagActionHandlerService, + CreatePermissionFlagGrantActionHandlerService, + UpdatePermissionFlagGrantActionHandlerService, + DeletePermissionFlagGrantActionHandlerService, CreatePermissionFlagDefinitionActionHandlerService, UpdatePermissionFlagDefinitionActionHandlerService, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/constants/metadata-event-to-emit.constant.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/constants/metadata-event-to-emit.constant.ts index 87ec5a49881..db0e3a0bfc8 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/constants/metadata-event-to-emit.constant.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/constants/metadata-event-to-emit.constant.ts @@ -19,7 +19,7 @@ export const METADATA_EVENTS_TO_EMIT = { pageLayoutTab: true, commandMenuItem: true, navigationMenuItem: true, - permissionFlag: true, + permissionFlagGrant: true, permissionFlagDefinition: true, objectPermission: true, fieldPermission: true, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/services/workspace-migration-runner.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/services/workspace-migration-runner.service.ts index 9d776fbf6be..91b09fca22b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/services/workspace-migration-runner.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/services/workspace-migration-runner.service.ts @@ -90,7 +90,7 @@ export class WorkspaceMigrationRunnerService { const shouldInvalidateRolesPermissionsCache = flatMapsKeysSet.has('flatObjectPermissionMaps') || flatMapsKeysSet.has('flatFieldPermissionMaps') || - flatMapsKeysSet.has('flatPermissionFlagMaps'); + flatMapsKeysSet.has('flatPermissionFlagGrantMaps'); if ( shouldIncrementMetadataGraphqlSchemaVersion || diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/derive-metadata-events-from-create-action.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/derive-metadata-events-from-create-action.util.ts index ec9b63546a4..06dc51e8597 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/derive-metadata-events-from-create-action.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/derive-metadata-events-from-create-action.util.ts @@ -92,7 +92,7 @@ const deriveAllMetadataEventsFromCreateAction = ( case 'commandMenuItem': case 'frontComponent': case 'navigationMenuItem': - case 'permissionFlag': + case 'permissionFlagGrant': case 'permissionFlagDefinition': case 'objectPermission': case 'fieldPermission': diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/derive-metadata-events-from-delete-action.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/derive-metadata-events-from-delete-action.util.ts index cd564b5062b..66e60ceed52 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/derive-metadata-events-from-delete-action.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/derive-metadata-events-from-delete-action.util.ts @@ -56,7 +56,7 @@ const deriveAllMetadataEventsFromDeleteAction = ({ case 'commandMenuItem': case 'frontComponent': case 'navigationMenuItem': - case 'permissionFlag': + case 'permissionFlagGrant': case 'permissionFlagDefinition': case 'objectPermission': case 'fieldPermission': diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/derive-metadata-events-from-update-action.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/derive-metadata-events-from-update-action.util.ts index 709c12b6dcb..bffe0b7755e 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/derive-metadata-events-from-update-action.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/derive-metadata-events-from-update-action.util.ts @@ -134,7 +134,7 @@ const deriveAllMetadataEventsFromUpdateAction = ({ case 'commandMenuItem': case 'frontComponent': case 'navigationMenuItem': - case 'permissionFlag': + case 'permissionFlagGrant': case 'permissionFlagDefinition': case 'objectPermission': case 'fieldPermission': diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-create-action-on-all-flat-entity-maps.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-create-action-on-all-flat-entity-maps.util.ts index 3711920e15c..53f9e2fa2b2 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-create-action-on-all-flat-entity-maps.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-create-action-on-all-flat-entity-maps.util.ts @@ -68,7 +68,7 @@ export const optimisticallyApplyCreateActionOnAllFlatEntityMaps = ({ case 'commandMenuItem': case 'frontComponent': case 'navigationMenuItem': - case 'permissionFlag': + case 'permissionFlagGrant': case 'permissionFlagDefinition': case 'objectPermission': case 'fieldPermission': diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-delete-action-on-all-flat-entity-maps.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-delete-action-on-all-flat-entity-maps.util.ts index 5c5dec73084..998d077f74f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-delete-action-on-all-flat-entity-maps.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-delete-action-on-all-flat-entity-maps.util.ts @@ -40,7 +40,7 @@ export const optimisticallyApplyDeleteActionOnAllFlatEntityMaps = ({ case 'commandMenuItem': case 'frontComponent': case 'navigationMenuItem': - case 'permissionFlag': + case 'permissionFlagGrant': case 'permissionFlagDefinition': case 'objectPermission': case 'fieldPermission': diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-update-action-on-all-flat-entity-maps.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-update-action-on-all-flat-entity-maps.util.ts index 666f7239a7c..9a95f6850d7 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-update-action-on-all-flat-entity-maps.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-update-action-on-all-flat-entity-maps.util.ts @@ -61,7 +61,7 @@ export const optimisticallyApplyUpdateActionOnAllFlatEntityMaps = ({ case 'commandMenuItem': case 'frontComponent': case 'navigationMenuItem': - case 'permissionFlag': + case 'permissionFlagGrant': case 'permissionFlagDefinition': case 'objectPermission': case 'fieldPermission': diff --git a/packages/twenty-server/test/integration/graphql/suites/settings-permissions/granular-settings-permissions.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/settings-permissions/granular-settings-permissions.integration-spec.ts index 50f365d0088..3fa181e1385 100644 --- a/packages/twenty-server/test/integration/graphql/suites/settings-permissions/granular-settings-permissions.integration-spec.ts +++ b/packages/twenty-server/test/integration/graphql/suites/settings-permissions/granular-settings-permissions.integration-spec.ts @@ -59,10 +59,10 @@ describe('Granular settings permissions', () => { // Assign specific setting permissions to the custom role const upsertSettingPermissionsQuery = { query: ` - mutation UpsertPermissionFlags { - upsertPermissionFlags(upsertPermissionFlagsInput: { + mutation UpsertPermissionFlagGrants { + upsertPermissionFlagGrants(upsertPermissionFlagGrantsInput: { roleId: "${customRoleId}" - permissionFlagKeys: [${PermissionFlagType.DATA_MODEL}, ${PermissionFlagType.WORKSPACE}, ${PermissionFlagType.WORKFLOWS}] + permissionFlagGrantKeys: [${PermissionFlagType.DATA_MODEL}, ${PermissionFlagType.WORKSPACE}, ${PermissionFlagType.WORKFLOWS}] }) { id flag @@ -335,7 +335,7 @@ describe('Granular settings permissions', () => { id label canUpdateAllSettings - permissionFlags { + permissionFlagGrants { flag } `, @@ -349,12 +349,12 @@ describe('Granular settings permissions', () => { jestExpectToBeDefined(customRole); expect(customRole.canUpdateAllSettings).toBe(false); - expect(customRole.permissionFlags).toHaveLength(3); - jestExpectToBeDefined(customRole.permissionFlags); - expect(customRole.permissionFlags.map((p) => p.flag)).toContain( + expect(customRole.permissionFlagGrants).toHaveLength(3); + jestExpectToBeDefined(customRole.permissionFlagGrants); + expect(customRole.permissionFlagGrants.map((p) => p.flag)).toContain( PermissionFlagType.DATA_MODEL, ); - expect(customRole.permissionFlags.map((p) => p.flag)).toContain( + expect(customRole.permissionFlagGrants.map((p) => p.flag)).toContain( PermissionFlagType.WORKSPACE, ); }); @@ -365,10 +365,10 @@ describe('Granular settings permissions', () => { // Add SECURITY permission to the custom role const upsertSecurityPermissionQuery = { query: ` - mutation UpsertPermissionFlags { - upsertPermissionFlags(upsertPermissionFlagsInput: { + mutation UpsertPermissionFlagGrants { + upsertPermissionFlagGrants(upsertPermissionFlagGrantsInput: { roleId: "${customRoleId}" - permissionFlagKeys: [${PermissionFlagType.DATA_MODEL}, ${PermissionFlagType.WORKSPACE}, ${PermissionFlagType.SECURITY}] + permissionFlagGrantKeys: [${PermissionFlagType.DATA_MODEL}, ${PermissionFlagType.WORKSPACE}, ${PermissionFlagType.SECURITY}] }) { id flag @@ -385,13 +385,13 @@ describe('Granular settings permissions', () => { expect(response.status).toBe(200); expect(response.body.errors).toBeUndefined(); - expect(response.body.data.upsertPermissionFlags).toHaveLength(3); + expect(response.body.data.upsertPermissionFlagGrants).toHaveLength(3); // Verify the permission was added using the new integration test utilities const { data, errors } = await findRoles({ gqlFields: ` id - permissionFlags { + permissionFlagGrants { flag } `, @@ -406,9 +406,9 @@ describe('Granular settings permissions', () => { ); jestExpectToBeDefined(updatedRole); - expect(updatedRole.permissionFlags).toHaveLength(3); - jestExpectToBeDefined(updatedRole.permissionFlags); - expect(updatedRole.permissionFlags.map((p) => p.flag)).toContain( + expect(updatedRole.permissionFlagGrants).toHaveLength(3); + jestExpectToBeDefined(updatedRole.permissionFlagGrants); + expect(updatedRole.permissionFlagGrants.map((p) => p.flag)).toContain( PermissionFlagType.SECURITY, ); }); @@ -417,10 +417,10 @@ describe('Granular settings permissions', () => { // Remove SECURITY permission, keep only DATA_MODEL and WORKSPACE const upsertReducedPermissionsQuery = { query: ` - mutation UpsertPermissionFlags { - upsertPermissionFlags(upsertPermissionFlagsInput: { + mutation UpsertPermissionFlagGrants { + upsertPermissionFlagGrants(upsertPermissionFlagGrantsInput: { roleId: "${customRoleId}" - permissionFlagKeys: [${PermissionFlagType.DATA_MODEL}, ${PermissionFlagType.WORKSPACE}] + permissionFlagGrantKeys: [${PermissionFlagType.DATA_MODEL}, ${PermissionFlagType.WORKSPACE}] }) { id flag @@ -437,13 +437,13 @@ describe('Granular settings permissions', () => { expect(response.status).toBe(200); expect(response.body.errors).toBeUndefined(); - expect(response.body.data.upsertPermissionFlags).toHaveLength(2); + expect(response.body.data.upsertPermissionFlagGrants).toHaveLength(2); // Verify SECURITY permission was removed using the new integration test utilities const { data, errors } = await findRoles({ gqlFields: ` id - permissionFlags { + permissionFlagGrants { flag } `, @@ -458,9 +458,9 @@ describe('Granular settings permissions', () => { ); jestExpectToBeDefined(updatedRole); - jestExpectToBeDefined(updatedRole.permissionFlags); - expect(updatedRole.permissionFlags).toHaveLength(2); - expect(updatedRole.permissionFlags.map((p) => p.flag)).not.toContain( + jestExpectToBeDefined(updatedRole.permissionFlagGrants); + expect(updatedRole.permissionFlagGrants).toHaveLength(2); + expect(updatedRole.permissionFlagGrants.map((p) => p.flag)).not.toContain( PermissionFlagType.SECURITY, ); }); diff --git a/packages/twenty-server/test/integration/graphql/suites/settings-permissions/roles.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/settings-permissions/roles.integration-spec.ts index eee296ecf99..a80d2f35183 100644 --- a/packages/twenty-server/test/integration/graphql/suites/settings-permissions/roles.integration-spec.ts +++ b/packages/twenty-server/test/integration/graphql/suites/settings-permissions/roles.integration-spec.ts @@ -558,14 +558,14 @@ describe('roles permissions', () => { }); }); - describe('upsertPermissionFlags', () => { + describe('upsertPermissionFlagGrants', () => { const upsertSettingPermissionsMutation = ({ roleId, }: { roleId: string; }) => ` - mutation UpsertPermissionFlags { - upsertPermissionFlags(upsertPermissionFlagsInput: {roleId: "${roleId}", permissionFlagKeys: [${PermissionFlagType.DATA_MODEL}]}) { + mutation UpsertPermissionFlagGrants { + upsertPermissionFlagGrants(upsertPermissionFlagGrantsInput: {roleId: "${roleId}", permissionFlagGrantKeys: [${PermissionFlagType.DATA_MODEL}]}) { id roleId flag @@ -601,9 +601,9 @@ describe('roles permissions', () => { expect(res.body.errors[0].extensions.code).toBe( ErrorCode.METADATA_VALIDATION_FAILED, ); - const permissionFlagErrors = - res.body.errors[0].extensions.errors?.permissionFlag ?? []; - const hasRoleNotEditable = permissionFlagErrors.some( + const permissionFlagGrantErrors = + res.body.errors[0].extensions.errors?.permissionFlagGrant ?? []; + const hasRoleNotEditable = permissionFlagGrantErrors.some( (failure: { errors?: Array<{ code?: string }> }) => failure.errors?.some( (err) => @@ -629,7 +629,7 @@ describe('roles permissions', () => { .expect((res) => { expect(res.body.data).toBeDefined(); expect(res.body.errors).toBeUndefined(); - expect(res.body.data.upsertPermissionFlags).toEqual( + expect(res.body.data.upsertPermissionFlagGrants).toEqual( expect.arrayContaining([ expect.objectContaining({ roleId: createdEditableRoleId, diff --git a/packages/twenty-server/test/integration/graphql/suites/workspace/successful-user-and-workspace-creation.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/workspace/successful-user-and-workspace-creation.integration-spec.ts index 241b6e195c1..576773570a2 100644 --- a/packages/twenty-server/test/integration/graphql/suites/workspace/successful-user-and-workspace-creation.integration-spec.ts +++ b/packages/twenty-server/test/integration/graphql/suites/workspace/successful-user-and-workspace-creation.integration-spec.ts @@ -216,7 +216,7 @@ describe('Successful user and workspace creation', () => { 'roleTarget', 'objectPermission', 'fieldPermission', - 'permissionFlag', + 'permissionFlagGrant', 'logicFunction', 'agent', 'view', diff --git a/packages/twenty-server/test/integration/metadata/suites/application/failing-sync-application-cross-app-permission-create-on-standard-role.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/application/failing-sync-application-cross-app-permission-create-on-standard-role.integration-spec.ts index 0bed38c19a3..aeb80620441 100644 --- a/packages/twenty-server/test/integration/metadata/suites/application/failing-sync-application-cross-app-permission-create-on-standard-role.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/application/failing-sync-application-cross-app-permission-create-on-standard-role.integration-spec.ts @@ -10,7 +10,7 @@ import { STANDARD_ROLE } from 'src/engine/workspace-manager/twenty-standard-appl const TEST_APP_ID = 'a1b2c3d4-0010-4000-a000-000000000010'; const TEST_ROLE_ID = 'a1b2c3d4-0010-4000-a000-000000000011'; -const TEST_PERMISSION_FLAG_ID = 'a1b2c3d4-0010-4000-a000-000000000012'; +const TEST_PERMISSION_FLAG_GRANT_ID = 'a1b2c3d4-0010-4000-a000-000000000012'; const TEST_OBJECT_PERMISSION_ID = 'a1b2c3d4-0010-4000-a000-000000000013'; const TEST_FIELD_PERMISSION_ID = 'a1b2c3d4-0010-4000-a000-000000000014'; const FAKE_OBJECT_ID = 'a1b2c3d4-0010-4000-a000-000000000020'; @@ -48,9 +48,9 @@ describe('Sync application should fail when creating permissions on a standard r label: 'Stolen Admin Role', description: 'Attempts to add permissions to the standard admin role', - permissionFlags: [ + permissionFlagGrants: [ { - universalIdentifier: TEST_PERMISSION_FLAG_ID, + universalIdentifier: TEST_PERMISSION_FLAG_GRANT_ID, flag: PermissionFlagType.WORKSPACE, }, ], diff --git a/packages/twenty-server/test/integration/metadata/suites/application/failing-sync-application-cross-app-permission-retarget-on-update.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/application/failing-sync-application-cross-app-permission-retarget-on-update.integration-spec.ts index cc6e6108fca..7689868effc 100644 --- a/packages/twenty-server/test/integration/metadata/suites/application/failing-sync-application-cross-app-permission-retarget-on-update.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/application/failing-sync-application-cross-app-permission-retarget-on-update.integration-spec.ts @@ -11,7 +11,7 @@ import { STANDARD_ROLE } from 'src/engine/workspace-manager/twenty-standard-appl const TEST_APP_ID = 'a1b2c3d4-0020-4000-a000-000000000010'; const TEST_ROLE_ID = 'a1b2c3d4-0020-4000-a000-000000000011'; -const TEST_PERMISSION_FLAG_ID = 'a1b2c3d4-0020-4000-a000-000000000012'; +const TEST_PERMISSION_FLAG_GRANT_ID = 'a1b2c3d4-0020-4000-a000-000000000012'; const TEST_OBJECT_PERMISSION_ID = 'a1b2c3d4-0020-4000-a000-000000000013'; const TEST_FIELD_PERMISSION_ID = 'a1b2c3d4-0020-4000-a000-000000000014'; @@ -45,9 +45,9 @@ describe('Sync application should fail when retargeting existing permissions to universalIdentifier: TEST_ROLE_ID, label: 'App Default Role', description: 'Default role for the test app', - permissionFlags: [ + permissionFlagGrants: [ { - universalIdentifier: TEST_PERMISSION_FLAG_ID, + universalIdentifier: TEST_PERMISSION_FLAG_GRANT_ID, flag: PermissionFlagType.WORKSPACE, }, ], @@ -75,9 +75,9 @@ describe('Sync application should fail when retargeting existing permissions to universalIdentifier: STANDARD_ROLE.admin.universalIdentifier, label: 'Admin', description: 'Attempts to retarget permission flag to admin role', - permissionFlags: [ + permissionFlagGrants: [ { - universalIdentifier: TEST_PERMISSION_FLAG_ID, + universalIdentifier: TEST_PERMISSION_FLAG_GRANT_ID, flag: PermissionFlagType.WORKSPACE, }, ], diff --git a/packages/twenty-server/test/integration/metadata/suites/permission-flag/__snapshots__/failing-permission-flag-upsert.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/__snapshots__/failing-permission-flag-upsert.integration-spec.ts.snap similarity index 88% rename from packages/twenty-server/test/integration/metadata/suites/permission-flag/__snapshots__/failing-permission-flag-upsert.integration-spec.ts.snap rename to packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/__snapshots__/failing-permission-flag-upsert.integration-spec.ts.snap index 043f2e40152..ca739e89a49 100644 --- a/packages/twenty-server/test/integration/metadata/suites/permission-flag/__snapshots__/failing-permission-flag-upsert.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/__snapshots__/failing-permission-flag-upsert.integration-spec.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing -exports[`Permission flag upsert should fail when permissionFlagKeys contains invalid enum value 1`] = ` +exports[`Permission flag upsert should fail when permissionFlagGrantKeys contains invalid enum value 1`] = ` { "extensions": { "code": "BAD_USER_INPUT", @@ -19,7 +19,7 @@ exports[`Permission flag upsert should fail when role is not editable (system ro "extensions": { "code": "METADATA_VALIDATION_FAILED", "errors": { - "permissionFlag": [ + "permissionFlagGrant": [ { "errors": [ { @@ -37,15 +37,15 @@ exports[`Permission flag upsert should fail when role is not editable (system ro "roleUniversalIdentifier": Any, "universalIdentifier": Any, }, - "metadataName": "permissionFlag", + "metadataName": "permissionFlagGrant", "status": "fail", "type": "create", }, ], }, - "message": "Validation failed for 1 permissionFlag", + "message": "Validation failed for 1 permissionFlagGrant", "summary": { - "permissionFlag": 1, + "permissionFlagGrant": 1, "totalErrors": 1, }, "userFriendlyMessage": "Cannot target a role owned by another application.", diff --git a/packages/twenty-server/test/integration/metadata/suites/permission-flag/failing-permission-flag-upsert.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/failing-permission-flag-grant-upsert.integration-spec.ts similarity index 79% rename from packages/twenty-server/test/integration/metadata/suites/permission-flag/failing-permission-flag-upsert.integration-spec.ts rename to packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/failing-permission-flag-grant-upsert.integration-spec.ts index 0dc275ff9ef..549b9ad3e1f 100644 --- a/packages/twenty-server/test/integration/metadata/suites/permission-flag/failing-permission-flag-upsert.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/failing-permission-flag-grant-upsert.integration-spec.ts @@ -1,5 +1,5 @@ import { expectOneNotInternalServerErrorSnapshot } from 'test/integration/graphql/utils/expect-one-not-internal-server-error-snapshot.util'; -import { upsertPermissionFlags } from 'test/integration/metadata/suites/permission-flag/utils/upsert-permission-flags.util'; +import { upsertPermissionFlagGrants } from 'test/integration/metadata/suites/permission-flag-grant/utils/upsert-permission-flag-grants.util'; import { createOneRole } from 'test/integration/metadata/suites/role/utils/create-one-role.util'; import { deleteOneRole } from 'test/integration/metadata/suites/role/utils/delete-one-role.util'; import { findRoles } from 'test/integration/metadata/suites/role/utils/find-roles.util'; @@ -12,7 +12,7 @@ import { import { isDefined } from 'twenty-shared/utils'; import { v4 } from 'uuid'; -import { type UpsertPermissionFlagsInput } from 'src/engine/metadata-modules/permission-flag/dtos/upsert-permission-flag-input'; +import { type UpsertPermissionFlagGrantsInput } from 'src/engine/metadata-modules/permission-flag-grant/dtos/upsert-permission-flag-grant-input'; type GlobalTestContext = { editableRoleId: string; @@ -20,17 +20,17 @@ type GlobalTestContext = { }; type TestContext = { - input: (globalContext: GlobalTestContext) => UpsertPermissionFlagsInput; + input: (globalContext: GlobalTestContext) => UpsertPermissionFlagGrantsInput; }; -const failingPermissionFlagUpsertTestCases: EachTestingContext[] = +const failingPermissionFlagGrantUpsertTestCases: EachTestingContext[] = [ { title: 'when roleId is not a valid UUID', context: { input: () => ({ roleId: 'invalid-uuid', - permissionFlagKeys: [PermissionFlagType.DATA_MODEL], + permissionFlagGrantKeys: [PermissionFlagType.DATA_MODEL], }), }, }, @@ -39,7 +39,7 @@ const failingPermissionFlagUpsertTestCases: EachTestingContext[] = context: { input: () => ({ roleId: v4(), - permissionFlagKeys: [PermissionFlagType.DATA_MODEL], + permissionFlagGrantKeys: [PermissionFlagType.DATA_MODEL], }), }, }, @@ -48,16 +48,16 @@ const failingPermissionFlagUpsertTestCases: EachTestingContext[] = context: { input: (globalContext) => ({ roleId: globalContext.nonEditableRoleId, - permissionFlagKeys: [PermissionFlagType.DATA_MODEL], + permissionFlagGrantKeys: [PermissionFlagType.DATA_MODEL], }), }, }, { - title: 'when permissionFlagKeys contains invalid enum value', + title: 'when permissionFlagGrantKeys contains invalid enum value', context: { input: (globalContext) => ({ roleId: globalContext.editableRoleId, - permissionFlagKeys: ['INVALID_FLAG' as PermissionFlagType], + permissionFlagGrantKeys: ['INVALID_FLAG' as PermissionFlagType], }), }, }, @@ -116,7 +116,7 @@ describe('Permission flag upsert should fail', () => { } }); - it.each(eachTestingContextFilter(failingPermissionFlagUpsertTestCases))( + it.each(eachTestingContextFilter(failingPermissionFlagGrantUpsertTestCases))( '$title', async ({ context }) => { const globalContext: GlobalTestContext = { @@ -125,7 +125,7 @@ describe('Permission flag upsert should fail', () => { }; const input = context.input(globalContext); - const { errors } = await upsertPermissionFlags({ + const { errors } = await upsertPermissionFlagGrants({ expectToFail: true, input, }); diff --git a/packages/twenty-server/test/integration/metadata/suites/permission-flag/successful-permission-flag-upsert.integration-spec.ts b/packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/successful-permission-flag-grant-upsert.integration-spec.ts similarity index 66% rename from packages/twenty-server/test/integration/metadata/suites/permission-flag/successful-permission-flag-upsert.integration-spec.ts rename to packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/successful-permission-flag-grant-upsert.integration-spec.ts index 9db61491e18..27b97de1a89 100644 --- a/packages/twenty-server/test/integration/metadata/suites/permission-flag/successful-permission-flag-upsert.integration-spec.ts +++ b/packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/successful-permission-flag-grant-upsert.integration-spec.ts @@ -1,4 +1,4 @@ -import { upsertPermissionFlags } from 'test/integration/metadata/suites/permission-flag/utils/upsert-permission-flags.util'; +import { upsertPermissionFlagGrants } from 'test/integration/metadata/suites/permission-flag-grant/utils/upsert-permission-flag-grants.util'; import { createOneRole } from 'test/integration/metadata/suites/role/utils/create-one-role.util'; import { deleteOneRole } from 'test/integration/metadata/suites/role/utils/delete-one-role.util'; import { jestExpectToBeDefined } from 'test/utils/jest-expect-to-be-defined.util.test'; @@ -40,41 +40,41 @@ describe('Permission flag upsert should succeed', () => { } }); - it('should upsert with empty permissionFlagKeys', async () => { - const { data } = await upsertPermissionFlags({ + it('should upsert with empty permissionFlagGrantKeys', async () => { + const { data } = await upsertPermissionFlagGrants({ expectToFail: false, input: { roleId: createdRoleId, - permissionFlagKeys: [], + permissionFlagGrantKeys: [], }, }); - expect(data?.upsertPermissionFlags).toEqual([]); + expect(data?.upsertPermissionFlagGrants).toEqual([]); }); it('should upsert with one permission flag', async () => { - const { data } = await upsertPermissionFlags({ + const { data } = await upsertPermissionFlagGrants({ expectToFail: false, input: { roleId: createdRoleId, - permissionFlagKeys: [PermissionFlagType.DATA_MODEL], + permissionFlagGrantKeys: [PermissionFlagType.DATA_MODEL], }, }); - expect(data?.upsertPermissionFlags).toHaveLength(1); - expect(data?.upsertPermissionFlags?.[0]).toMatchObject({ + expect(data?.upsertPermissionFlagGrants).toHaveLength(1); + expect(data?.upsertPermissionFlagGrants?.[0]).toMatchObject({ roleId: createdRoleId, flag: PermissionFlagType.DATA_MODEL, }); - expect(data?.upsertPermissionFlags?.[0].id).toBeDefined(); + expect(data?.upsertPermissionFlagGrants?.[0].id).toBeDefined(); }); it('should upsert with multiple permission flags', async () => { - const { data } = await upsertPermissionFlags({ + const { data } = await upsertPermissionFlagGrants({ expectToFail: false, input: { roleId: createdRoleId, - permissionFlagKeys: [ + permissionFlagGrantKeys: [ PermissionFlagType.DATA_MODEL, PermissionFlagType.ROLES, PermissionFlagType.VIEWS, @@ -82,37 +82,37 @@ describe('Permission flag upsert should succeed', () => { }, }); - expect(data?.upsertPermissionFlags).toHaveLength(3); - const flags = data?.upsertPermissionFlags?.map((pf) => pf.flag) ?? []; + expect(data?.upsertPermissionFlagGrants).toHaveLength(3); + const flags = data?.upsertPermissionFlagGrants?.map((pf) => pf.flag) ?? []; expect(flags).toContain(PermissionFlagType.DATA_MODEL); expect(flags).toContain(PermissionFlagType.ROLES); expect(flags).toContain(PermissionFlagType.VIEWS); }); it('should upsert to remove some flags (replace with subset)', async () => { - const { data } = await upsertPermissionFlags({ + const { data } = await upsertPermissionFlagGrants({ expectToFail: false, input: { roleId: createdRoleId, - permissionFlagKeys: [PermissionFlagType.DATA_MODEL], + permissionFlagGrantKeys: [PermissionFlagType.DATA_MODEL], }, }); - expect(data?.upsertPermissionFlags).toHaveLength(1); - expect(data?.upsertPermissionFlags?.[0].flag).toBe( + expect(data?.upsertPermissionFlagGrants).toHaveLength(1); + expect(data?.upsertPermissionFlagGrants?.[0].flag).toBe( PermissionFlagType.DATA_MODEL, ); }); it('should upsert back to empty', async () => { - const { data } = await upsertPermissionFlags({ + const { data } = await upsertPermissionFlagGrants({ expectToFail: false, input: { roleId: createdRoleId, - permissionFlagKeys: [], + permissionFlagGrantKeys: [], }, }); - expect(data?.upsertPermissionFlags).toEqual([]); + expect(data?.upsertPermissionFlagGrants).toEqual([]); }); }); diff --git a/packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/utils/upsert-permission-flag-grants-query-factory.util.ts b/packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/utils/upsert-permission-flag-grants-query-factory.util.ts new file mode 100644 index 00000000000..0a929bb5cc5 --- /dev/null +++ b/packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/utils/upsert-permission-flag-grants-query-factory.util.ts @@ -0,0 +1,28 @@ +import gql from 'graphql-tag'; +import { type PerformMetadataQueryParams } from 'test/integration/metadata/types/perform-metadata-query.type'; + +import { type UpsertPermissionFlagGrantsInput } from 'src/engine/metadata-modules/permission-flag-grant/dtos/upsert-permission-flag-grant-input'; + +export type UpsertPermissionFlagGrantsFactoryInput = UpsertPermissionFlagGrantsInput; + +const DEFAULT_PERMISSION_FLAG_GRANT_GQL_FIELDS = ` + id + roleId + flag +`; + +export const upsertPermissionFlagGrantsQueryFactory = ({ + input, + gqlFields = DEFAULT_PERMISSION_FLAG_GRANT_GQL_FIELDS, +}: PerformMetadataQueryParams) => ({ + query: gql` + mutation UpsertPermissionFlagGrants($upsertPermissionFlagGrantsInput: UpsertPermissionFlagGrantsInput!) { + upsertPermissionFlagGrants(upsertPermissionFlagGrantsInput: $upsertPermissionFlagGrantsInput) { + ${gqlFields} + } + } + `, + variables: { + upsertPermissionFlagGrantsInput: input, + }, +}); diff --git a/packages/twenty-server/test/integration/metadata/suites/permission-flag/utils/upsert-permission-flags.util.ts b/packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/utils/upsert-permission-flag-grants.util.ts similarity index 66% rename from packages/twenty-server/test/integration/metadata/suites/permission-flag/utils/upsert-permission-flags.util.ts rename to packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/utils/upsert-permission-flag-grants.util.ts index c9aa8e2673d..7643498b413 100644 --- a/packages/twenty-server/test/integration/metadata/suites/permission-flag/utils/upsert-permission-flags.util.ts +++ b/packages/twenty-server/test/integration/metadata/suites/permission-flag-grant/utils/upsert-permission-flag-grants.util.ts @@ -1,24 +1,24 @@ import { - type UpsertPermissionFlagsFactoryInput, - upsertPermissionFlagsQueryFactory, -} from 'test/integration/metadata/suites/permission-flag/utils/upsert-permission-flags-query-factory.util'; + type UpsertPermissionFlagGrantsFactoryInput, + upsertPermissionFlagGrantsQueryFactory, +} from 'test/integration/metadata/suites/permission-flag-grant/utils/upsert-permission-flag-grants-query-factory.util'; import { makeMetadataAPIRequest } from 'test/integration/metadata/suites/utils/make-metadata-api-request.util'; import { type CommonResponseBody } from 'test/integration/metadata/types/common-response-body.type'; import { type PerformMetadataQueryParams } from 'test/integration/metadata/types/perform-metadata-query.type'; import { warnIfErrorButNotExpectedToFail } from 'test/integration/metadata/utils/warn-if-error-but-not-expected-to-fail.util'; import { warnIfNoErrorButExpectedToFail } from 'test/integration/metadata/utils/warn-if-no-error-but-expected-to-fail.util'; -import { type PermissionFlagDTO } from 'src/engine/metadata-modules/permission-flag/dtos/permission-flag.dto'; +import { type PermissionFlagGrantDTO } from 'src/engine/metadata-modules/permission-flag-grant/dtos/permission-flag-grant.dto'; -export const upsertPermissionFlags = async ({ +export const upsertPermissionFlagGrants = async ({ input, gqlFields, expectToFail = false, token, -}: PerformMetadataQueryParams): CommonResponseBody<{ - upsertPermissionFlags: PermissionFlagDTO[]; +}: PerformMetadataQueryParams): CommonResponseBody<{ + upsertPermissionFlagGrants: PermissionFlagGrantDTO[]; }> => { - const graphqlOperation = upsertPermissionFlagsQueryFactory({ + const graphqlOperation = upsertPermissionFlagGrantsQueryFactory({ input, gqlFields, }); diff --git a/packages/twenty-server/test/integration/metadata/suites/permission-flag/utils/upsert-permission-flags-query-factory.util.ts b/packages/twenty-server/test/integration/metadata/suites/permission-flag/utils/upsert-permission-flags-query-factory.util.ts deleted file mode 100644 index 3ddb2159148..00000000000 --- a/packages/twenty-server/test/integration/metadata/suites/permission-flag/utils/upsert-permission-flags-query-factory.util.ts +++ /dev/null @@ -1,28 +0,0 @@ -import gql from 'graphql-tag'; -import { type PerformMetadataQueryParams } from 'test/integration/metadata/types/perform-metadata-query.type'; - -import { type UpsertPermissionFlagsInput } from 'src/engine/metadata-modules/permission-flag/dtos/upsert-permission-flag-input'; - -export type UpsertPermissionFlagsFactoryInput = UpsertPermissionFlagsInput; - -const DEFAULT_PERMISSION_FLAG_GQL_FIELDS = ` - id - roleId - flag -`; - -export const upsertPermissionFlagsQueryFactory = ({ - input, - gqlFields = DEFAULT_PERMISSION_FLAG_GQL_FIELDS, -}: PerformMetadataQueryParams) => ({ - query: gql` - mutation UpsertPermissionFlags($upsertPermissionFlagsInput: UpsertPermissionFlagsInput!) { - upsertPermissionFlags(upsertPermissionFlagsInput: $upsertPermissionFlagsInput) { - ${gqlFields} - } - } - `, - variables: { - upsertPermissionFlagsInput: input, - }, -}); diff --git a/packages/twenty-shared/src/application/index.ts b/packages/twenty-shared/src/application/index.ts index 37d71d251d1..f33f11ae8b8 100644 --- a/packages/twenty-shared/src/application/index.ts +++ b/packages/twenty-shared/src/application/index.ts @@ -58,7 +58,7 @@ export type { PreInstallLogicFunctionApplicationManifest } from './preInstallLog export type { ObjectPermissionManifest, FieldPermissionManifest, - PermissionFlagManifest, + PermissionFlagGrantManifest, RoleManifest, } from './roleManifestType'; export type { ServerVariables } from './server-variables.type'; diff --git a/packages/twenty-shared/src/application/roleManifestType.ts b/packages/twenty-shared/src/application/roleManifestType.ts index 3cc75129e36..446d344e92a 100644 --- a/packages/twenty-shared/src/application/roleManifestType.ts +++ b/packages/twenty-shared/src/application/roleManifestType.ts @@ -16,7 +16,7 @@ export type FieldPermissionManifest = SyncableEntityOptions & { canUpdateFieldValue?: boolean; }; -export type PermissionFlagManifest = SyncableEntityOptions & { +export type PermissionFlagGrantManifest = SyncableEntityOptions & { flag: PermissionFlagType; }; @@ -35,5 +35,5 @@ export type RoleManifest = SyncableEntityOptions & { canBeAssignedToApiKeys?: boolean; objectPermissions?: ObjectPermissionManifest[]; fieldPermissions?: FieldPermissionManifest[]; - permissionFlags?: PermissionFlagManifest[]; + permissionFlagGrants?: PermissionFlagGrantManifest[]; }; diff --git a/packages/twenty-shared/src/metadata/constants/all-metadata-name.constant.ts b/packages/twenty-shared/src/metadata/constants/all-metadata-name.constant.ts index 0d66d35df15..e78a20f0d5e 100644 --- a/packages/twenty-shared/src/metadata/constants/all-metadata-name.constant.ts +++ b/packages/twenty-shared/src/metadata/constants/all-metadata-name.constant.ts @@ -21,7 +21,7 @@ export const ALL_METADATA_NAME = { pageLayoutTab: 'pageLayoutTab', commandMenuItem: 'commandMenuItem', navigationMenuItem: 'navigationMenuItem', - permissionFlag: 'permissionFlag', + permissionFlagGrant: 'permissionFlagGrant', permissionFlagDefinition: 'permissionFlagDefinition', objectPermission: 'objectPermission', fieldPermission: 'fieldPermission', diff --git a/packages/twenty-shared/src/types/CommandMenuContextApi.ts b/packages/twenty-shared/src/types/CommandMenuContextApi.ts index 15c640ccf33..715d2344c97 100644 --- a/packages/twenty-shared/src/types/CommandMenuContextApi.ts +++ b/packages/twenty-shared/src/types/CommandMenuContextApi.ts @@ -14,7 +14,7 @@ export type CommandMenuContextApi = { objectPermissions: ObjectPermissions & { objectMetadataId: string }; selectedRecords: ObjectRecord[]; featureFlags: Record; - permissionFlags: Record; + permissionFlagGrants: Record; targetObjectReadPermissions: Record; targetObjectWritePermissions: Record; objectMetadataItem: Record; diff --git a/packages/twenty-shared/src/utils/command-menu-items/__tests__/evaluateConditionalAvailabilityExpression.test.ts b/packages/twenty-shared/src/utils/command-menu-items/__tests__/evaluateConditionalAvailabilityExpression.test.ts index 63def84683b..0110264977d 100644 --- a/packages/twenty-shared/src/utils/command-menu-items/__tests__/evaluateConditionalAvailabilityExpression.test.ts +++ b/packages/twenty-shared/src/utils/command-menu-items/__tests__/evaluateConditionalAvailabilityExpression.test.ts @@ -24,7 +24,7 @@ const buildContext = ( }, selectedRecords: [], featureFlags: {}, - permissionFlags: {}, + permissionFlagGrants: {}, targetObjectReadPermissions: {}, targetObjectWritePermissions: {}, objectMetadataItem: {}, @@ -458,13 +458,13 @@ describe('evaluateConditionalAvailabilityExpression', () => { }); }); - describe('permissionFlags gating', () => { + describe('permissionFlagGrants gating', () => { it('should hide exportRecords when EXPORT_CSV permission flag is missing', () => { - const context = buildContext({ permissionFlags: {} }); + const context = buildContext({ permissionFlagGrants: {} }); expect( evaluateConditionalAvailabilityExpression( - 'permissionFlags.EXPORT_CSV', + 'permissionFlagGrants.EXPORT_CSV', context, ), ).toBe(false); @@ -472,12 +472,12 @@ describe('evaluateConditionalAvailabilityExpression', () => { it('should show exportRecords when EXPORT_CSV permission flag is present', () => { const context = buildContext({ - permissionFlags: { EXPORT_CSV: true }, + permissionFlagGrants: { EXPORT_CSV: true }, }); expect( evaluateConditionalAvailabilityExpression( - 'permissionFlags.EXPORT_CSV', + 'permissionFlagGrants.EXPORT_CSV', context, ), ).toBe(true); @@ -486,12 +486,12 @@ describe('evaluateConditionalAvailabilityExpression', () => { it('should hide importRecords when IMPORT_CSV permission flag is missing even if soft-delete filter is off', () => { const context = buildContext({ hasAnySoftDeleteFilterOnView: false, - permissionFlags: {}, + permissionFlagGrants: {}, }); expect( evaluateConditionalAvailabilityExpression( - 'not hasAnySoftDeleteFilterOnView and permissionFlags.IMPORT_CSV', + 'not hasAnySoftDeleteFilterOnView and permissionFlagGrants.IMPORT_CSV', context, ), ).toBe(false); @@ -500,12 +500,12 @@ describe('evaluateConditionalAvailabilityExpression', () => { it('should show importRecords when IMPORT_CSV permission flag is present and soft-delete filter is off', () => { const context = buildContext({ hasAnySoftDeleteFilterOnView: false, - permissionFlags: { IMPORT_CSV: true }, + permissionFlagGrants: { IMPORT_CSV: true }, }); expect( evaluateConditionalAvailabilityExpression( - 'not hasAnySoftDeleteFilterOnView and permissionFlags.IMPORT_CSV', + 'not hasAnySoftDeleteFilterOnView and permissionFlagGrants.IMPORT_CSV', context, ), ).toBe(true); diff --git a/packages/twenty-shared/src/utils/command-menu-items/__tests__/interpolateCommandMenuItemTemplate.test.ts b/packages/twenty-shared/src/utils/command-menu-items/__tests__/interpolateCommandMenuItemTemplate.test.ts index c7ec84407a2..ce934b52b39 100644 --- a/packages/twenty-shared/src/utils/command-menu-items/__tests__/interpolateCommandMenuItemTemplate.test.ts +++ b/packages/twenty-shared/src/utils/command-menu-items/__tests__/interpolateCommandMenuItemTemplate.test.ts @@ -24,7 +24,7 @@ const buildContext = ( }, selectedRecords: [], featureFlags: {}, - permissionFlags: {}, + permissionFlagGrants: {}, targetObjectReadPermissions: {}, targetObjectWritePermissions: {}, objectMetadataItem: {},