From 4a07eac0eec06e20dcf9c003a093fb70918d7962 Mon Sep 17 00:00:00 2001 From: Nikos Polykandriotis Date: Wed, 20 Dec 2023 18:32:15 +0200 Subject: [PATCH] fix(backend): Parse api errors that don't throw exception --- .changeset/rude-deers-fetch.md | 5 +++++ packages/backend/src/api/__tests__/factory.test.ts | 10 +++++++++- packages/backend/src/api/request.ts | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 .changeset/rude-deers-fetch.md diff --git a/.changeset/rude-deers-fetch.md b/.changeset/rude-deers-fetch.md new file mode 100644 index 00000000000..b8893108eee --- /dev/null +++ b/.changeset/rude-deers-fetch.md @@ -0,0 +1,5 @@ +--- +'@clerk/backend': patch +--- + +Fixed an issue where errors returned from backend api requests are not converted to camelCase. diff --git a/packages/backend/src/api/__tests__/factory.test.ts b/packages/backend/src/api/__tests__/factory.test.ts index 93ff7b29add..8fbc06ebc11 100644 --- a/packages/backend/src/api/__tests__/factory.test.ts +++ b/packages/backend/src/api/__tests__/factory.test.ts @@ -187,7 +187,12 @@ export default (QUnit: QUnit) => { }); test('executes a failed backend API request and parses the error response', async assert => { - const mockErrorPayload = { code: 'whatever_error', message: 'whatever error', meta: {} }; + const mockErrorPayload = { + code: 'whatever_error', + message: 'whatever error', + long_message: 'some long message', + meta: { param_name: 'some param' }, + }; const traceId = 'trace_id_123'; fakeFetch = sinon.stub(runtime, 'fetch'); fakeFetch.onCall(0).returns(jsonNotOk({ errors: [mockErrorPayload], clerk_trace_id: traceId })); @@ -199,6 +204,9 @@ export default (QUnit: QUnit) => { assert.equal(response.status, 422); assert.equal(response.statusText, '422'); assert.equal(response.errors[0].code, 'whatever_error'); + assert.equal(response.errors[0].message, 'whatever error'); + assert.equal(response.errors[0].longMessage, 'some long message'); + assert.equal(response.errors[0].meta.paramName, 'some param'); assert.ok( fakeFetch.calledOnceWith('https://api.clerk.test/v1/users/user_deadbeef', { diff --git a/packages/backend/src/api/request.ts b/packages/backend/src/api/request.ts index e670b87dcf0..d86a43e6c45 100644 --- a/packages/backend/src/api/request.ts +++ b/packages/backend/src/api/request.ts @@ -114,7 +114,7 @@ export function buildRequest(options: BuildRequestOptions) { if (!res.ok) { return { data: null, - errors: responseBody?.errors || responseBody, + errors: parseErrors(responseBody), status: res?.status, statusText: res?.statusText, clerkTraceId: getTraceId(responseBody, res?.headers),