mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 10:02:05 +00:00
feat(HTTP Request Node): add option for raw json header & query (#4408)
* http node headers and query JSON parameter options added * Query and Header added to option processing * remove old set headers. * ⚡ Small improvements Co-authored-by: ricardo <ricardoespinoza105@gmail.com>
This commit is contained in:
@@ -144,6 +144,27 @@ export class HttpRequestV3 implements INodeType {
|
||||
noDataExpression: true,
|
||||
description: 'Whether the request has query params or not',
|
||||
},
|
||||
{
|
||||
displayName: 'Specify Query Parameters',
|
||||
name: 'specifyQuery',
|
||||
type: 'options',
|
||||
displayOptions: {
|
||||
show: {
|
||||
sendQuery: [true],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
name: 'Using Fields Below',
|
||||
value: 'keypair',
|
||||
},
|
||||
{
|
||||
name: 'Using JSON',
|
||||
value: 'json',
|
||||
},
|
||||
],
|
||||
default: 'keypair',
|
||||
},
|
||||
{
|
||||
displayName: 'Query Parameters',
|
||||
name: 'queryParameters',
|
||||
@@ -151,6 +172,7 @@ export class HttpRequestV3 implements INodeType {
|
||||
displayOptions: {
|
||||
show: {
|
||||
sendQuery: [true],
|
||||
specifyQuery: ['keypair'],
|
||||
},
|
||||
},
|
||||
typeOptions: {
|
||||
@@ -186,6 +208,18 @@ export class HttpRequestV3 implements INodeType {
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
displayName: 'JSON',
|
||||
name: 'jsonQuery',
|
||||
type: 'json',
|
||||
displayOptions: {
|
||||
show: {
|
||||
sendQuery: [true],
|
||||
specifyQuery: ['json'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
},
|
||||
{
|
||||
displayName: 'Send Headers',
|
||||
name: 'sendHeaders',
|
||||
@@ -194,6 +228,27 @@ export class HttpRequestV3 implements INodeType {
|
||||
noDataExpression: true,
|
||||
description: 'Whether the request has headers or not',
|
||||
},
|
||||
{
|
||||
displayName: 'Specify Headers',
|
||||
name: 'specifyHeaders',
|
||||
type: 'options',
|
||||
displayOptions: {
|
||||
show: {
|
||||
sendHeaders: [true],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
name: 'Using Fields Below',
|
||||
value: 'keypair',
|
||||
},
|
||||
{
|
||||
name: 'Using JSON',
|
||||
value: 'json',
|
||||
},
|
||||
],
|
||||
default: 'keypair',
|
||||
},
|
||||
{
|
||||
displayName: 'Header Parameters',
|
||||
name: 'headerParameters',
|
||||
@@ -201,6 +256,7 @@ export class HttpRequestV3 implements INodeType {
|
||||
displayOptions: {
|
||||
show: {
|
||||
sendHeaders: [true],
|
||||
specifyHeaders: ['keypair'],
|
||||
},
|
||||
},
|
||||
typeOptions: {
|
||||
@@ -236,6 +292,18 @@ export class HttpRequestV3 implements INodeType {
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
displayName: 'JSON',
|
||||
name: 'jsonHeaders',
|
||||
type: 'json',
|
||||
displayOptions: {
|
||||
show: {
|
||||
sendHeaders: [true],
|
||||
specifyHeaders: ['json'],
|
||||
},
|
||||
},
|
||||
default: '',
|
||||
},
|
||||
{
|
||||
displayName: 'Send Body',
|
||||
name: 'sendBody',
|
||||
@@ -865,6 +933,9 @@ export class HttpRequestV3 implements INodeType {
|
||||
itemIndex,
|
||||
[],
|
||||
) as [{ name: string; value: string }];
|
||||
const specifyQuery = this.getNodeParameter('specifyQuery', itemIndex, 'keypair') as string;
|
||||
const jsonQueryParameter = this.getNodeParameter('jsonQuery', itemIndex, '') as string;
|
||||
|
||||
const sendBody = this.getNodeParameter('sendBody', itemIndex, false) as boolean;
|
||||
const bodyContentType = this.getNodeParameter('contentType', itemIndex, '') as string;
|
||||
const specifyBody = this.getNodeParameter('specifyBody', itemIndex, '') as string;
|
||||
@@ -880,6 +951,8 @@ export class HttpRequestV3 implements INodeType {
|
||||
itemIndex,
|
||||
[],
|
||||
) as [{ name: string; value: string }];
|
||||
const specifyHeaders = this.getNodeParameter('specifyHeaders', itemIndex, 'keypair') as string;
|
||||
const jsonHeadersParameter = this.getNodeParameter('jsonHeaders', itemIndex, '') as string;
|
||||
|
||||
const {
|
||||
redirect,
|
||||
@@ -1053,15 +1126,54 @@ export class HttpRequestV3 implements INodeType {
|
||||
}
|
||||
}
|
||||
|
||||
// Get parameters defined in the UI
|
||||
if (sendQuery && queryParameters) {
|
||||
requestOptions.qs = await queryParameters.reduce(parmetersToKeyValue, Promise.resolve({}));
|
||||
if (specifyQuery === 'keypair') {
|
||||
requestOptions.qs = await queryParameters.reduce(
|
||||
parmetersToKeyValue,
|
||||
Promise.resolve({}),
|
||||
);
|
||||
} else if (specifyQuery === 'json') {
|
||||
// query is specified using JSON
|
||||
try {
|
||||
JSON.parse(jsonQueryParameter);
|
||||
} catch (_) {
|
||||
throw new NodeOperationError(
|
||||
this.getNode(),
|
||||
`JSON parameter need to be an valid JSON`,
|
||||
{
|
||||
runIndex: itemIndex,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
requestOptions.qs = JSON.parse(jsonQueryParameter);
|
||||
}
|
||||
}
|
||||
|
||||
// Get parameters defined in the UI
|
||||
if (sendHeaders && headerParameters) {
|
||||
requestOptions.headers = await headerParameters.reduce(
|
||||
parmetersToKeyValue,
|
||||
Promise.resolve({}),
|
||||
);
|
||||
if (specifyHeaders === 'keypair') {
|
||||
requestOptions.headers = await headerParameters.reduce(
|
||||
parmetersToKeyValue,
|
||||
Promise.resolve({}),
|
||||
);
|
||||
} else if (specifyHeaders === 'json') {
|
||||
// body is specified using JSON
|
||||
try {
|
||||
JSON.parse(jsonHeadersParameter);
|
||||
} catch (_) {
|
||||
throw new NodeOperationError(
|
||||
this.getNode(),
|
||||
`JSON parameter need to be an valid JSON`,
|
||||
{
|
||||
runIndex: itemIndex,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
requestOptions.headers = JSON.parse(jsonHeadersParameter);
|
||||
}
|
||||
}
|
||||
|
||||
if (autoDetectResponseFormat || responseFormat === 'file') {
|
||||
|
||||
Reference in New Issue
Block a user