diff --git a/packages/twenty-front/src/modules/sse-db-event/components/SSEQuerySubscribeEffect.tsx b/packages/twenty-front/src/modules/sse-db-event/components/SSEQuerySubscribeEffect.tsx index 53c38e46b8..3f5e046ee0 100644 --- a/packages/twenty-front/src/modules/sse-db-event/components/SSEQuerySubscribeEffect.tsx +++ b/packages/twenty-front/src/modules/sse-db-event/components/SSEQuerySubscribeEffect.tsx @@ -8,6 +8,7 @@ import { sseEventStreamReadyState } from '@/sse-db-event/states/sseEventStreamRe import { isGracefullyHandledEventStreamError } from '@/sse-db-event/utils/isGracefullyHandledEventStreamError'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { CombinedGraphQLErrors } from '@apollo/client/errors'; +import { captureException } from '@sentry/react'; import { useMutation } from '@apollo/client/react'; import { isNonEmptyString } from '@sniptt/guards'; import { useStore } from 'jotai'; @@ -47,18 +48,20 @@ export const SSEQuerySubscribeEffect = () => { const extensions = getGraphqlErrorExtensionsFromError(error); if ( - isGracefullyHandledEventStreamError({ + !isGracefullyHandledEventStreamError({ subCode: extensions?.subCode, code: extensions?.code, }) ) { - store.set(activeQueryListenersState.atom, []); - store.set(shouldDestroyEventStreamState.atom, true); - - return; + captureException( + new Error(`Unhandled error for event stream: ${error.message}`, { + cause: error, + }), + ); } - throw new Error(`Unhandled error for event stream: ${error.message}`); + store.set(activeQueryListenersState.atom, []); + store.set(shouldDestroyEventStreamState.atom, true); } }, [store], diff --git a/packages/twenty-server/src/engine/subscriptions/event-stream-exception.filter.ts b/packages/twenty-server/src/engine/subscriptions/event-stream-exception.filter.ts index 0715f964f5..7fd3b7a730 100644 --- a/packages/twenty-server/src/engine/subscriptions/event-stream-exception.filter.ts +++ b/packages/twenty-server/src/engine/subscriptions/event-stream-exception.filter.ts @@ -3,7 +3,7 @@ import { GqlExceptionFilter } from '@nestjs/graphql'; import { assertUnreachable } from 'twenty-shared/utils'; -import { InternalServerError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util'; +import { ForbiddenError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util'; import { EventStreamException, EventStreamExceptionCode, @@ -15,7 +15,7 @@ export class EventStreamExceptionFilter implements GqlExceptionFilter { switch (exception.code) { case EventStreamExceptionCode.EVENT_STREAM_ALREADY_EXISTS: case EventStreamExceptionCode.NOT_AUTHORIZED: - throw new InternalServerError(exception.message, { + throw new ForbiddenError(exception.message, { subCode: exception.code, userFriendlyMessage: exception.userFriendlyMessage, });