From d3bb8b2fa462382b556f4a613bf8955cef4cd07b Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Thu, 15 Feb 2024 12:49:39 +0000 Subject: [PATCH] There was an issue where extra headers were being carried over to the worker instance when performing cross-service comms - these headers were causing the request to be rejected without consideration. Cleaning up to only include the headers Budibase really cares about in request, let fetch work out the generic ones. --- .../server/src/utilities/workerRequests.ts | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/server/src/utilities/workerRequests.ts b/packages/server/src/utilities/workerRequests.ts index 69ce58c8a9..7528ff10c7 100644 --- a/packages/server/src/utilities/workerRequests.ts +++ b/packages/server/src/utilities/workerRequests.ts @@ -14,12 +14,23 @@ export function request(ctx?: Ctx, request?: any) { if (!request.headers) { request.headers = {} } + if (!ctx) { request.headers[constants.Header.API_KEY] = coreEnv.INTERNAL_API_KEY - if (tenancy.isTenantIdSet()) { - request.headers[constants.Header.TENANT_ID] = tenancy.getTenantId() + } else { + // copy all Budibase utilised headers over - copying everything can have + // side effects like requests being rejected due to odd content types etc + for (let header of Object.values(constants.Header)) { + if (ctx.headers[header]) { + request.headers[header] = ctx.headers[header] + } } } + + // apply tenancy if its available + if (tenancy.isTenantIdSet()) { + request.headers[constants.Header.TENANT_ID] = tenancy.getTenantId() + } if (request.body && Object.keys(request.body).length > 0) { request.headers["Content-Type"] = "application/json" request.body = @@ -29,9 +40,6 @@ export function request(ctx?: Ctx, request?: any) { } else { delete request.body } - if (ctx && ctx.headers) { - request.headers = ctx.headers - } // add x-budibase-correlation-id header logging.correlation.setHeader(request.headers) @@ -54,7 +62,7 @@ async function checkResponse( } const msg = `Unable to ${errorMsg} - ${responseErrorMessage}` if (ctx) { - ctx.throw(msg, response.status) + ctx.throw(response.status || 500, msg) } else { throw msg }