diff --git a/packages/twenty-front/src/modules/sse-db-event/components/SSEClientEffect.tsx b/packages/twenty-front/src/modules/sse-db-event/components/SSEClientEffect.tsx index 3627162403..e4318f1ef0 100644 --- a/packages/twenty-front/src/modules/sse-db-event/components/SSEClientEffect.tsx +++ b/packages/twenty-front/src/modules/sse-db-event/components/SSEClientEffect.tsx @@ -39,7 +39,7 @@ export const SSEClientEffect = () => { const token = tokenPair?.accessOrWorkspaceAgnosticToken?.token; const newSseClient = createClient({ - url: `${REACT_APP_SERVER_BASE_URL}/graphql`, + url: `${REACT_APP_SERVER_BASE_URL}/metadata`, headers: { Authorization: token ? `Bearer ${token}` : '', }, diff --git a/packages/twenty-front/src/modules/sse-db-event/components/SSEProvider.tsx b/packages/twenty-front/src/modules/sse-db-event/components/SSEProvider.tsx index 700236dd7a..cc759f9379 100644 --- a/packages/twenty-front/src/modules/sse-db-event/components/SSEProvider.tsx +++ b/packages/twenty-front/src/modules/sse-db-event/components/SSEProvider.tsx @@ -23,7 +23,7 @@ export const SSEProvider = ({ children }: SSEProviderProps) => { const token = tokenPair?.accessOrWorkspaceAgnosticToken?.token; const sseClient = createClient({ - url: `${REACT_APP_SERVER_BASE_URL}/graphql`, + url: `${REACT_APP_SERVER_BASE_URL}/metadata`, headers: { Authorization: token ? `Bearer ${token}` : '', }, diff --git a/packages/twenty-front/src/modules/sse-db-event/hooks/useSseClient.util.ts b/packages/twenty-front/src/modules/sse-db-event/hooks/useSseClient.util.ts deleted file mode 100644 index 8c33152631..0000000000 --- a/packages/twenty-front/src/modules/sse-db-event/hooks/useSseClient.util.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { getTokenPair } from '@/apollo/utils/getTokenPair'; -import { createClient } from 'graphql-sse'; -import { useMemo } from 'react'; -import { REACT_APP_SERVER_BASE_URL } from '~/config'; - -export const useSseClient = () => { - const tokenPair = getTokenPair(); - const token = tokenPair?.accessOrWorkspaceAgnosticToken?.token; - - const sseClient = useMemo( - () => - createClient({ - url: `${REACT_APP_SERVER_BASE_URL}/graphql`, - headers: { - Authorization: token ? `Bearer ${token}` : '', - }, - }), - [token], - ); - - return { - sseClient, - }; -}; diff --git a/packages/twenty-front/src/modules/sse-db-event/hooks/useTriggerEventStreamCreation.ts b/packages/twenty-front/src/modules/sse-db-event/hooks/useTriggerEventStreamCreation.ts index 5d9be496b3..41015a7b75 100644 --- a/packages/twenty-front/src/modules/sse-db-event/hooks/useTriggerEventStreamCreation.ts +++ b/packages/twenty-front/src/modules/sse-db-event/hooks/useTriggerEventStreamCreation.ts @@ -78,6 +78,17 @@ export const useTriggerEventStreamCreation = () => { onEventSubscription: EventSubscription; }>, ) => { + if (isDefined(value?.errors)) { + captureException( + new Error( + `SSE subscription error: ${value.errors[0]?.message}`, + ), + ); + set(shouldDestroyEventStreamState, true); + + return; + } + if (!hasReceivedFirstEvent) { hasReceivedFirstEvent = true; set(sseEventStreamReadyState, true); @@ -116,6 +127,14 @@ export const useTriggerEventStreamCreation = () => { set(shouldDestroyEventStreamState, true); break; } + default: { + captureException( + new Error( + `Unhandled SSE message error: ${data.errors[0]?.message}`, + ), + ); + break; + } } } } diff --git a/packages/twenty-server/src/engine/workspace-event-emitter/workspace-event-emitter.resolver.ts b/packages/twenty-server/src/engine/workspace-event-emitter/workspace-event-emitter.resolver.ts index 526fcb0a9a..3fb350aaea 100644 --- a/packages/twenty-server/src/engine/workspace-event-emitter/workspace-event-emitter.resolver.ts +++ b/packages/twenty-server/src/engine/workspace-event-emitter/workspace-event-emitter.resolver.ts @@ -3,8 +3,8 @@ import { Args, Mutation, Subscription } from '@nestjs/graphql'; import { isDefined } from 'twenty-shared/utils'; -import { type ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator'; +import { type ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity'; import { PreventNestToAutoLogGraphqlErrorsFilter } from 'src/engine/core-modules/graphql/filters/prevent-nest-to-auto-log-graphql-errors.filter'; import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe'; import { UserEntity } from 'src/engine/core-modules/user/user.entity';