From c103314b28270f541e8350681283d4edf31250db Mon Sep 17 00:00:00 2001 From: MytsV Date: Thu, 15 Aug 2024 18:16:00 +0300 Subject: [PATCH 1/3] Gateway error handling: add a handler for 404 status code and fix the 400 status code message Fixes #313 --- src/lib/sdk/gateway-endpoints.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/lib/sdk/gateway-endpoints.ts b/src/lib/sdk/gateway-endpoints.ts index bf5e73e54..f4557ace3 100644 --- a/src/lib/sdk/gateway-endpoints.ts +++ b/src/lib/sdk/gateway-endpoints.ts @@ -268,11 +268,10 @@ async function handleCommonGatewayEndpointErrors(statusCod errorMessage: `An error occurred while fetching ${response.url}`, } as TDTO; - switch(statusCode) { case 400: - dto.errorName = BaseHttpErrorTypes.NOT_FOUND.errorName; - dto.errorMessage = `The requested resource was not found at ${response.url}.` + dto.errorName = BaseHttpErrorTypes.BAD_REQUEST.errorName; + dto.errorMessage = `The request had invalid syntax.` try { const message = await response.json(); dto.errorMessage += ` Error Details: ${message}`; @@ -286,6 +285,14 @@ async function handleCommonGatewayEndpointErrors(statusCod dto.errorMessage += ` Error Details: ${message}`; } catch(error) {} break; + case 404: + dto.errorName = BaseHttpErrorTypes.NOT_FOUND.errorName; + dto.errorMessage = `The requested resource was not found at ${response.url}.` + try { + const message = await response.json(); + dto.errorMessage += ` Error Details: ${message}`; + } catch(error) {} + break; case 406: dto.errorName = BaseHttpErrorTypes.NOT_ACCEPTABLE.errorName; dto.errorMessage = `Not Acceptable.`; From a77bd43776cd74d9131cd7457d5687c2a572ef49 Mon Sep 17 00:00:00 2001 From: MytsV Date: Thu, 15 Aug 2024 18:19:38 +0300 Subject: [PATCH 2/3] Gateway error handling: produce unknown error by default This makes all the other possible status codes cause the API page to return a valid JSON instead of HTML that may break the app --- src/lib/sdk/gateway-endpoints.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/lib/sdk/gateway-endpoints.ts b/src/lib/sdk/gateway-endpoints.ts index f4557ace3..7847e2518 100644 --- a/src/lib/sdk/gateway-endpoints.ts +++ b/src/lib/sdk/gateway-endpoints.ts @@ -300,7 +300,7 @@ async function handleCommonGatewayEndpointErrors(statusCod const message = await response.json(); } catch(error) {} break; - case 500: + default: dto.errorName = BaseHttpErrorTypes.UNKNOWN_ERROR.errorName; dto.errorMessage = `An unknown server side error occurred while fetching ${response.url}.`; try { @@ -308,8 +308,6 @@ async function handleCommonGatewayEndpointErrors(statusCod dto.errorMessage += ` Error Details: ${message}`; } catch(error) {} break; - default: - return undefined; } return dto; } From cdae75c1f10bdc2c70e06db5ff0fc95665abe2ce Mon Sep 17 00:00:00 2001 From: MytsV Date: Thu, 15 Aug 2024 18:26:04 +0300 Subject: [PATCH 3/3] Gateway error handling: decompose the message handling and stringify it for display --- src/lib/sdk/gateway-endpoints.ts | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/src/lib/sdk/gateway-endpoints.ts b/src/lib/sdk/gateway-endpoints.ts index 7847e2518..2c1a621cf 100644 --- a/src/lib/sdk/gateway-endpoints.ts +++ b/src/lib/sdk/gateway-endpoints.ts @@ -272,43 +272,30 @@ async function handleCommonGatewayEndpointErrors(statusCod case 400: dto.errorName = BaseHttpErrorTypes.BAD_REQUEST.errorName; dto.errorMessage = `The request had invalid syntax.` - try { - const message = await response.json(); - dto.errorMessage += ` Error Details: ${message}`; - } catch(error) {} break; case 401: dto.errorName = BaseHttpErrorTypes.INVALID_AUTH_TOKEN.errorName; dto.errorMessage = `The provided authentication token is invalid or has expired.`; - try { - const message = await response.json(); - dto.errorMessage += ` Error Details: ${message}`; - } catch(error) {} break; case 404: dto.errorName = BaseHttpErrorTypes.NOT_FOUND.errorName; dto.errorMessage = `The requested resource was not found at ${response.url}.` - try { - const message = await response.json(); - dto.errorMessage += ` Error Details: ${message}`; - } catch(error) {} break; case 406: dto.errorName = BaseHttpErrorTypes.NOT_ACCEPTABLE.errorName; dto.errorMessage = `Not Acceptable.`; - try { - const message = await response.json(); - } catch(error) {} break; default: dto.errorName = BaseHttpErrorTypes.UNKNOWN_ERROR.errorName; dto.errorMessage = `An unknown server side error occurred while fetching ${response.url}.`; - try { - const message = await response.json(); - dto.errorMessage += ` Error Details: ${message}`; - } catch(error) {} break; } + + try { + const message = JSON.stringify(await response.json()); + dto.errorMessage += ` Error Details: ${message}`; + } catch(error) {} + return dto; }