Fix error handling (#13072)
Fixes https://twenty-v7.sentry.io/issues/6730499496/?environment=prod&environment=prod-eu&project=4507072499810304&query=is%3Aunresolved%20%21issue.type%3A%5Bperformance_consecutive_db_queries%2Cperformance_consecutive_http%2Cperformance_file_io_main_thread%2Cperformance_db_main_thread%2Cperformance_n_plus_one_db_queries%2Cperformance_n_plus_one_api_calls%2Cperformance_p95_endpoint_regression%2Cperformance_slow_db_query%2Cperformance_render_blocking_asset_span%2Cperformance_uncompressed_assets%2Cperformance_http_overhead%2Cperformance_large_http_payload%5D%20timesSeen%3A%3E10&referrer=issue-stream&sort=date&stream_index=0
This commit is contained in:
@ -18,9 +18,7 @@ export class ApprovedAccessDomainExceptionFilter implements ExceptionFilter {
|
||||
case ApprovedAccessDomainExceptionCode.APPROVED_ACCESS_DOMAIN_ALREADY_VALIDATED:
|
||||
case ApprovedAccessDomainExceptionCode.APPROVED_ACCESS_DOMAIN_MUST_BE_A_COMPANY_DOMAIN:
|
||||
throw new ForbiddenError(exception.message, {
|
||||
extensions: {
|
||||
userFriendlyMessage: exception.userFriendlyMessage,
|
||||
},
|
||||
userFriendlyMessage: exception.userFriendlyMessage,
|
||||
});
|
||||
default: {
|
||||
const _exhaustiveCheck: never = exception.code;
|
||||
|
||||
@ -30,6 +30,11 @@ export enum ErrorCode {
|
||||
INTERNAL_SERVER_ERROR = 'INTERNAL_SERVER_ERROR',
|
||||
}
|
||||
|
||||
type RestrictedGraphQLErrorExtensions = {
|
||||
userFriendlyMessage?: string;
|
||||
subCode?: string;
|
||||
};
|
||||
|
||||
export class BaseGraphQLError extends GraphQLError {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
public extensions: Record<string, any>;
|
||||
@ -110,7 +115,7 @@ export class ValidationError extends BaseGraphQLError {
|
||||
|
||||
export class AuthenticationError extends BaseGraphQLError {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
constructor(message: string, extensions?: Record<string, any>) {
|
||||
constructor(message: string, extensions?: RestrictedGraphQLErrorExtensions) {
|
||||
super(message, ErrorCode.UNAUTHENTICATED, extensions);
|
||||
|
||||
Object.defineProperty(this, 'name', { value: 'AuthenticationError' });
|
||||
@ -119,7 +124,7 @@ export class AuthenticationError extends BaseGraphQLError {
|
||||
|
||||
export class ForbiddenError extends BaseGraphQLError {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
constructor(message: string, extensions?: Record<string, any>) {
|
||||
constructor(message: string, extensions?: RestrictedGraphQLErrorExtensions) {
|
||||
super(message, ErrorCode.FORBIDDEN, extensions);
|
||||
|
||||
Object.defineProperty(this, 'name', { value: 'ForbiddenError' });
|
||||
@ -151,7 +156,7 @@ export class PersistedQueryNotSupportedError extends BaseGraphQLError {
|
||||
|
||||
export class UserInputError extends BaseGraphQLError {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
constructor(message: string, extensions?: Record<string, any>) {
|
||||
constructor(message: string, extensions?: RestrictedGraphQLErrorExtensions) {
|
||||
super(message, ErrorCode.BAD_USER_INPUT, extensions);
|
||||
|
||||
Object.defineProperty(this, 'name', { value: 'UserInputError' });
|
||||
@ -160,7 +165,7 @@ export class UserInputError extends BaseGraphQLError {
|
||||
|
||||
export class NotFoundError extends BaseGraphQLError {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
constructor(message: string, extensions?: Record<string, any>) {
|
||||
constructor(message: string, extensions?: RestrictedGraphQLErrorExtensions) {
|
||||
super(message, ErrorCode.NOT_FOUND, extensions);
|
||||
|
||||
Object.defineProperty(this, 'name', { value: 'NotFoundError' });
|
||||
@ -177,7 +182,7 @@ export class MethodNotAllowedError extends BaseGraphQLError {
|
||||
|
||||
export class ConflictError extends BaseGraphQLError {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
constructor(message: string, extensions?: Record<string, any>) {
|
||||
constructor(message: string, extensions?: RestrictedGraphQLErrorExtensions) {
|
||||
super(message, ErrorCode.CONFLICT, extensions);
|
||||
|
||||
Object.defineProperty(this, 'name', { value: 'ConflictError' });
|
||||
|
||||
@ -20,15 +20,11 @@ export const handleWorkflowTriggerException = (
|
||||
case WorkflowTriggerExceptionCode.INVALID_WORKFLOW_STATUS:
|
||||
case WorkflowTriggerExceptionCode.FORBIDDEN:
|
||||
throw new UserInputError(exception.message, {
|
||||
extensions: {
|
||||
userFriendlyMessage: exception.userFriendlyMessage,
|
||||
},
|
||||
userFriendlyMessage: exception.userFriendlyMessage,
|
||||
});
|
||||
case WorkflowTriggerExceptionCode.NOT_FOUND:
|
||||
throw new NotFoundError(exception.message, {
|
||||
extensions: {
|
||||
userFriendlyMessage: exception.userFriendlyMessage,
|
||||
},
|
||||
userFriendlyMessage: exception.userFriendlyMessage,
|
||||
});
|
||||
case WorkflowTriggerExceptionCode.INTERNAL_ERROR:
|
||||
throw exception;
|
||||
|
||||
Reference in New Issue
Block a user