Spaces:
Build error
Build error
| import { type MessageDescriptor } from '@lingui/core'; | |
| import { msg } from '@lingui/core/macro'; | |
| import { assertUnreachable } from 'twenty-shared/utils'; | |
| import { STANDARD_ERROR_MESSAGE } from 'src/engine/api/common/common-query-runners/errors/standard-error-message.constant'; | |
| import { CustomException } from 'src/utils/custom-exception'; | |
| export enum TwentyORMExceptionCode { | |
| METADATA_VERSION_MISMATCH = 'METADATA_VERSION_MISMATCH', | |
| WORKSPACE_SCHEMA_NOT_FOUND = 'WORKSPACE_SCHEMA_NOT_FOUND', | |
| ROLES_PERMISSIONS_VERSION_NOT_FOUND = 'ROLES_PERMISSIONS_VERSION_NOT_FOUND', | |
| FEATURE_FLAG_MAP_VERSION_NOT_FOUND = 'FEATURE_FLAG_MAP_VERSION_NOT_FOUND', | |
| USER_WORKSPACE_ROLE_MAP_VERSION_NOT_FOUND = 'USER_WORKSPACE_ROLE_MAP_VERSION_NOT_FOUND', | |
| API_KEY_ROLE_MAP_VERSION_NOT_FOUND = 'API_KEY_ROLE_MAP_VERSION_NOT_FOUND', | |
| MALFORMED_METADATA = 'MALFORMED_METADATA', | |
| WORKSPACE_NOT_FOUND = 'WORKSPACE_NOT_FOUND', | |
| CONNECT_RECORD_NOT_FOUND = 'CONNECT_RECORD_NOT_FOUND', | |
| CONNECT_NOT_ALLOWED = 'CONNECT_NOT_ALLOWED', | |
| CONNECT_UNIQUE_CONSTRAINT_ERROR = 'CONNECT_UNIQUE_CONSTRAINT_ERROR', | |
| MISSING_MAIN_ALIAS_TARGET = 'MISSING_MAIN_ALIAS_TARGET', | |
| METHOD_NOT_ALLOWED = 'METHOD_NOT_ALLOWED', | |
| ENUM_TYPE_NAME_NOT_FOUND = 'ENUM_TYPE_NAME_NOT_FOUND', | |
| QUERY_READ_TIMEOUT = 'QUERY_READ_TIMEOUT', | |
| DUPLICATE_ENTRY_DETECTED = 'DUPLICATE_ENTRY_DETECTED', | |
| TOO_MANY_RECORDS_TO_UPDATE = 'TOO_MANY_RECORDS_TO_UPDATE', | |
| INVALID_INPUT = 'INVALID_INPUT', | |
| ORM_EVENT_DATA_CORRUPTED = 'ORM_EVENT_DATA_CORRUPTED', | |
| RLS_VALIDATION_FAILED = 'RLS_VALIDATION_FAILED', | |
| NO_ROLE_FOUND_FOR_USER_WORKSPACE = 'NO_ROLE_FOUND_FOR_USER_WORKSPACE', | |
| } | |
| const getTwentyORMExceptionUserFriendlyMessage = ( | |
| code: TwentyORMExceptionCode, | |
| ) => { | |
| switch (code) { | |
| case TwentyORMExceptionCode.METADATA_VERSION_MISMATCH: | |
| return msg`Data version mismatch. Please refresh and try again.`; | |
| case TwentyORMExceptionCode.WORKSPACE_SCHEMA_NOT_FOUND: | |
| return msg`Workspace schema not found.`; | |
| case TwentyORMExceptionCode.ROLES_PERMISSIONS_VERSION_NOT_FOUND: | |
| return msg`Roles and permissions configuration not found.`; | |
| case TwentyORMExceptionCode.FEATURE_FLAG_MAP_VERSION_NOT_FOUND: | |
| return msg`Feature configuration not found.`; | |
| case TwentyORMExceptionCode.USER_WORKSPACE_ROLE_MAP_VERSION_NOT_FOUND: | |
| return msg`User workspace role configuration not found.`; | |
| case TwentyORMExceptionCode.API_KEY_ROLE_MAP_VERSION_NOT_FOUND: | |
| return msg`API key role configuration not found.`; | |
| case TwentyORMExceptionCode.MALFORMED_METADATA: | |
| return msg`Data structure is invalid.`; | |
| case TwentyORMExceptionCode.WORKSPACE_NOT_FOUND: | |
| return msg`Workspace not found.`; | |
| case TwentyORMExceptionCode.CONNECT_RECORD_NOT_FOUND: | |
| return msg`Related record not found.`; | |
| case TwentyORMExceptionCode.CONNECT_NOT_ALLOWED: | |
| return msg`This connection is not allowed.`; | |
| case TwentyORMExceptionCode.CONNECT_UNIQUE_CONSTRAINT_ERROR: | |
| return msg`A record with this relationship already exists.`; | |
| case TwentyORMExceptionCode.MISSING_MAIN_ALIAS_TARGET: | |
| return msg`Missing main alias target.`; | |
| case TwentyORMExceptionCode.METHOD_NOT_ALLOWED: | |
| return msg`This operation is not allowed.`; | |
| case TwentyORMExceptionCode.QUERY_READ_TIMEOUT: | |
| return msg`Query timed out. Please try again.`; | |
| case TwentyORMExceptionCode.DUPLICATE_ENTRY_DETECTED: | |
| return msg`A duplicate entry was detected.`; | |
| case TwentyORMExceptionCode.TOO_MANY_RECORDS_TO_UPDATE: | |
| return msg`Too many records to update at once.`; | |
| case TwentyORMExceptionCode.INVALID_INPUT: | |
| return msg`Invalid input provided.`; | |
| case TwentyORMExceptionCode.RLS_VALIDATION_FAILED: | |
| return msg`Record does not satisfy security constraints.`; | |
| case TwentyORMExceptionCode.ENUM_TYPE_NAME_NOT_FOUND: | |
| case TwentyORMExceptionCode.ORM_EVENT_DATA_CORRUPTED: | |
| return STANDARD_ERROR_MESSAGE; | |
| case TwentyORMExceptionCode.NO_ROLE_FOUND_FOR_USER_WORKSPACE: | |
| return msg`No role found for user.`; | |
| default: | |
| assertUnreachable(code); | |
| } | |
| }; | |
| export class TwentyORMException extends CustomException<TwentyORMExceptionCode> { | |
| constructor( | |
| message: string, | |
| code: TwentyORMExceptionCode, | |
| { userFriendlyMessage }: { userFriendlyMessage?: MessageDescriptor } = {}, | |
| ) { | |
| super(message, code, { | |
| userFriendlyMessage: | |
| userFriendlyMessage ?? getTwentyORMExceptionUserFriendlyMessage(code), | |
| }); | |
| } | |
| } | |