Skip to content

Commit 2f29830

Browse files
authored
Handle 413 with user friendly message (#17870)
Add friendly message for 413 errors. Currently, 413 errors originate from the nginx server.
1 parent c15536f commit 2f29830

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

packages/twenty-front/src/modules/apollo/hooks/useApolloFactory.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,14 @@ export const useApolloFactory = (options: Partial<Options<any>> = {}) => {
8989
},
9090
});
9191
},
92+
onPayloadTooLarge: (message) => {
93+
enqueueErrorSnackBar({
94+
message,
95+
options: {
96+
dedupeKey: 'payload-too-large',
97+
},
98+
});
99+
},
92100
extraLinks: [],
93101
isDebugMode: process.env.IS_DEBUG_MODE === 'true',
94102
// Override options

packages/twenty-front/src/modules/apollo/services/__tests__/apollo.factory.test.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ jest.mock('@/auth/services/AuthService', () => {
2727

2828
const mockOnError = jest.fn();
2929
const mockOnNetworkError = jest.fn();
30+
const mockOnPayloadTooLarge = jest.fn();
3031

3132
const mockWorkspaceMember = {
3233
id: 'workspace-member-id',
@@ -81,6 +82,7 @@ const createMockOptions = (): Options<any> => ({
8182
isDebugMode: true,
8283
onError: mockOnError,
8384
onNetworkError: mockOnNetworkError,
85+
onPayloadTooLarge: mockOnPayloadTooLarge,
8486
appVersion: '1.0.0',
8587
});
8688

@@ -226,4 +228,21 @@ describe('ApolloFactory', () => {
226228
apolloFactory.updateWorkspaceMember(newWorkspaceMember);
227229
expect(apolloFactory['currentWorkspaceMember']).toEqual(newWorkspaceMember);
228230
});
231+
232+
it('should call onPayloadTooLarge when encountering a 413 error', async () => {
233+
fetchMock.mockResponse(() =>
234+
Promise.reject({
235+
statusCode: 413,
236+
message: 'Payload Too Large',
237+
}),
238+
);
239+
240+
try {
241+
await makeRequest();
242+
} catch {
243+
expect(mockOnPayloadTooLarge).toHaveBeenCalledWith(
244+
expect.stringContaining('Uploaded content is too large'),
245+
);
246+
}
247+
}, 10000);
229248
});

packages/twenty-front/src/modules/apollo/services/apollo.factory.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export interface Options<TCacheShape> extends ApolloClientOptions<TCacheShape> {
5353
onTokenPairChange?: (tokenPair: AuthTokenPair) => void;
5454
onUnauthenticatedError?: () => void;
5555
onAppVersionMismatch?: (message: string) => void;
56+
onPayloadTooLarge?: (message: string) => void;
5657
currentWorkspaceMember: CurrentWorkspaceMember | null;
5758
currentWorkspace: CurrentWorkspace | null;
5859
extraLinks?: ApolloLink[];
@@ -74,6 +75,7 @@ export class ApolloFactory<TCacheShape> implements ApolloManager<TCacheShape> {
7475
onTokenPairChange,
7576
onUnauthenticatedError,
7677
onAppVersionMismatch,
78+
onPayloadTooLarge,
7779
currentWorkspaceMember,
7880
currentWorkspace,
7981
extraLinks,
@@ -142,6 +144,9 @@ export class ApolloFactory<TCacheShape> implements ApolloManager<TCacheShape> {
142144
if (this.isAuthenticationError(error)) {
143145
return false;
144146
}
147+
if (this.isPayloadTooLargeError(error)) {
148+
return false;
149+
}
145150
return Boolean(error);
146151
},
147152
},
@@ -296,6 +301,11 @@ export class ApolloFactory<TCacheShape> implements ApolloManager<TCacheShape> {
296301
return handleTokenRenewal(operation, forward);
297302
}
298303

304+
if (this.isPayloadTooLargeError(networkError as ServerError)) {
305+
onPayloadTooLarge?.(t`Uploaded content is too large.`);
306+
return;
307+
}
308+
299309
if (isDebugMode === true) {
300310
logDebug(`[Network error]: ${networkError}`);
301311
}
@@ -344,6 +354,10 @@ export class ApolloFactory<TCacheShape> implements ApolloManager<TCacheShape> {
344354
return error.statusCode === 401;
345355
}
346356

357+
private isPayloadTooLargeError(error: ServerError): boolean {
358+
return error.statusCode === 413;
359+
}
360+
347361
updateWorkspaceMember(workspaceMember: CurrentWorkspaceMember | null) {
348362
this.currentWorkspaceMember = workspaceMember;
349363
}

0 commit comments

Comments
 (0)