From aed56745302662cc19a7dd0a563b3c5c22cc5366 Mon Sep 17 00:00:00 2001 From: Jan Oberhauser Date: Sat, 1 Apr 2023 19:03:12 +0200 Subject: [PATCH] Revert "fix(core): Improve axios error handling in nodes (#5699)" This reverts commit 33d97843194c1cddfd27356c279c0f7a8c2674d3. --- packages/core/package.json | 2 - packages/core/src/NodeExecuteFunctions.ts | 70 ++++++++++++----------- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index c00bfb8e89..c029de05d4 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -39,7 +39,6 @@ "@types/crypto-js": "^4.0.1", "@types/express": "^4.17.6", "@types/lodash.get": "^4.4.6", - "@types/lodash.pick": "^4.4.7", "@types/mime-types": "^2.1.0", "@types/request-promise-native": "~1.0.15", "@types/uuid": "^8.3.2" @@ -55,7 +54,6 @@ "flatted": "^3.2.4", "form-data": "^4.0.0", "lodash.get": "^4.4.2", - "lodash.pick": "^4.4.0", "mime-types": "^2.1.27", "n8n-workflow": "workspace:*", "oauth-1.0a": "^2.2.6", diff --git a/packages/core/src/NodeExecuteFunctions.ts b/packages/core/src/NodeExecuteFunctions.ts index 147cc61fb9..b3a9e1867d 100644 --- a/packages/core/src/NodeExecuteFunctions.ts +++ b/packages/core/src/NodeExecuteFunctions.ts @@ -75,7 +75,6 @@ import { ExpressionError, } from 'n8n-workflow'; -import pick from 'lodash.pick'; import { Agent } from 'https'; import { stringify } from 'qs'; import type { Token } from 'oauth-1.0a'; @@ -676,47 +675,50 @@ async function proxyRequestToAxios( return body; } } catch (error) { - const { config, response } = error; + const { request, response, isAxiosError, toJSON, config, ...errorData } = error; + if (configObject.simple === false && response) { + if (configObject.resolveWithFullResponse) { + return { + body: response.data, + headers: response.headers, + statusCode: response.status, + statusMessage: response.statusText, + }; + } else { + return response.data; + } + } // Axios hydrates the original error with more data. We extract them. // https://github.com/axios/axios/blob/master/lib/core/enhanceError.js // Note: `code` is ignored as it's an expected part of the errorData. - if (error.isAxiosError) { - if (response) { - Logger.debug('Request proxied to Axios failed', { status: response.status }); - let responseData = response.data; + if (response) { + Logger.debug('Request proxied to Axios failed', { status: response.status }); + let responseData = response.data; - if (Buffer.isBuffer(responseData) || responseData instanceof Readable) { - responseData = await binaryToBuffer(responseData).then((buffer) => - buffer.toString('utf-8'), - ); - } - - if (configObject.simple === false) { - if (configObject.resolveWithFullResponse) { - return { - body: responseData, - headers: response.headers, - statusCode: response.status, - statusMessage: response.statusText, - }; - } else { - return responseData; - } - } - - const message = `${response.status as number} - ${JSON.stringify(responseData)}`; - throw Object.assign(new Error(message, { cause: error }), { - status: response.status, - options: pick(config ?? {}, ['url', 'method', 'data', 'headers']), - }); - } else { - throw Object.assign(new Error(error.message, { cause: error }), { - options: pick(config ?? {}, ['url', 'method', 'data', 'headers']), - }); + if (Buffer.isBuffer(responseData) || responseData instanceof Readable) { + responseData = await binaryToBuffer(responseData).then((buffer) => + buffer.toString('utf-8'), + ); } + error.message = `${response.status as number} - ${JSON.stringify(responseData)}`; } + error.cause = errorData; + error.error = error.response?.data || errorData; + error.statusCode = error.response?.status; + error.options = config || {}; + + // Remove not needed data and so also remove circular references + error.request = undefined; + error.config = undefined; + error.options.adapter = undefined; + error.options.httpsAgent = undefined; + error.options.paramsSerializer = undefined; + error.options.transformRequest = undefined; + error.options.transformResponse = undefined; + error.options.validateStatus = undefined; + throw error; } }