From 3128dca1faeff85d77a28640b7dfe8fbcd85db4f Mon Sep 17 00:00:00 2001 From: Michael Kret <88898367+michael-radency@users.noreply.github.com> Date: Thu, 1 Feb 2024 10:35:39 +0000 Subject: [PATCH] fix(HTTP Request Node): Require parameter with filled name and value to avoid infinite loop (#8454) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ Co-authored-by: Elias Meire --- .../HttpRequest/V3/HttpRequestV3.node.ts | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/packages/nodes-base/nodes/HttpRequest/V3/HttpRequestV3.node.ts b/packages/nodes-base/nodes/HttpRequest/V3/HttpRequestV3.node.ts index baa9aec208..295761af12 100644 --- a/packages/nodes-base/nodes/HttpRequest/V3/HttpRequestV3.node.ts +++ b/packages/nodes-base/nodes/HttpRequest/V3/HttpRequestV3.node.ts @@ -1044,12 +1044,14 @@ export class HttpRequestV3 implements INodeType { name: 'name', type: 'string', default: '', + placeholder: 'e.g page', }, { displayName: 'Value', name: 'value', type: 'string', default: '', + hint: 'Use expression mode and $response to access response data', }, ], }, @@ -1661,11 +1663,34 @@ export class HttpRequestV3 implements INodeType { if (pagination.paginationMode === 'updateAParameterInEachRequest') { // Iterate over all parameters and add them to the request paginationData.request = {}; - pagination.parameters.parameters.forEach((parameter) => { + const { parameters } = pagination.parameters; + if (parameters.length === 1 && parameters[0].name === '' && parameters[0].value === '') { + throw new NodeOperationError( + this.getNode(), + "At least one entry with 'Name' and 'Value' filled must be included in 'Parameters' to use 'Update a Parameter in Each Request' mode ", + ); + } + pagination.parameters.parameters.forEach((parameter, index) => { if (!paginationData.request[parameter.type]) { paginationData.request[parameter.type] = {}; } - paginationData.request[parameter.type]![parameter.name] = parameter.value; + const parameterName = parameter.name; + if (parameterName === '') { + throw new NodeOperationError( + this.getNode(), + `Parameter name must be set for parameter [${index + 1}] in pagination settings`, + ); + } + const parameterValue = parameter.value; + if (parameterValue === '') { + throw new NodeOperationError( + this.getNode(), + `Some value must be provided for parameter [${ + index + 1 + }] in pagination settings, omitting it will result in an infinite loop`, + ); + } + paginationData.request[parameter.type]![parameterName] = parameterValue; }); } else if (pagination.paginationMode === 'responseContainsNextURL') { paginationData.request.url = pagination.nextURL;