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),