mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +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:
62
package-lock.json
generated
62
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "n8n",
|
"name": "n8n",
|
||||||
"version": "0.198.2",
|
"version": "0.199.0",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "n8n",
|
"name": "n8n",
|
||||||
"version": "0.198.2",
|
"version": "0.199.0",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/*",
|
"packages/*",
|
||||||
@@ -43375,7 +43375,7 @@
|
|||||||
},
|
},
|
||||||
"packages/cli": {
|
"packages/cli": {
|
||||||
"name": "n8n",
|
"name": "n8n",
|
||||||
"version": "0.198.2",
|
"version": "0.199.0",
|
||||||
"license": "SEE LICENSE IN LICENSE.md",
|
"license": "SEE LICENSE IN LICENSE.md",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@oclif/command": "^1.5.18",
|
"@oclif/command": "^1.5.18",
|
||||||
@@ -43421,10 +43421,10 @@
|
|||||||
"lodash.split": "^4.4.2",
|
"lodash.split": "^4.4.2",
|
||||||
"lodash.unset": "^4.5.2",
|
"lodash.unset": "^4.5.2",
|
||||||
"mysql2": "~2.3.0",
|
"mysql2": "~2.3.0",
|
||||||
"n8n-core": "~0.138.0",
|
"n8n-core": "~0.139.0",
|
||||||
"n8n-editor-ui": "~0.164.2",
|
"n8n-editor-ui": "~0.165.0",
|
||||||
"n8n-nodes-base": "~0.196.0",
|
"n8n-nodes-base": "~0.197.0",
|
||||||
"n8n-workflow": "~0.120.0",
|
"n8n-workflow": "~0.121.0",
|
||||||
"nodemailer": "^6.7.1",
|
"nodemailer": "^6.7.1",
|
||||||
"oauth-1.0a": "^2.2.6",
|
"oauth-1.0a": "^2.2.6",
|
||||||
"open": "^7.0.0",
|
"open": "^7.0.0",
|
||||||
@@ -44571,7 +44571,7 @@
|
|||||||
},
|
},
|
||||||
"packages/core": {
|
"packages/core": {
|
||||||
"name": "n8n-core",
|
"name": "n8n-core",
|
||||||
"version": "0.138.0",
|
"version": "0.139.0",
|
||||||
"license": "SEE LICENSE IN LICENSE.md",
|
"license": "SEE LICENSE IN LICENSE.md",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.21.1",
|
"axios": "^0.21.1",
|
||||||
@@ -44583,7 +44583,7 @@
|
|||||||
"form-data": "^4.0.0",
|
"form-data": "^4.0.0",
|
||||||
"lodash.get": "^4.4.2",
|
"lodash.get": "^4.4.2",
|
||||||
"mime-types": "^2.1.27",
|
"mime-types": "^2.1.27",
|
||||||
"n8n-workflow": "~0.120.0",
|
"n8n-workflow": "~0.121.0",
|
||||||
"oauth-1.0a": "^2.2.6",
|
"oauth-1.0a": "^2.2.6",
|
||||||
"p-cancelable": "^2.0.0",
|
"p-cancelable": "^2.0.0",
|
||||||
"qs": "^6.10.1",
|
"qs": "^6.10.1",
|
||||||
@@ -45639,7 +45639,7 @@
|
|||||||
},
|
},
|
||||||
"packages/design-system": {
|
"packages/design-system": {
|
||||||
"name": "n8n-design-system",
|
"name": "n8n-design-system",
|
||||||
"version": "0.38.0",
|
"version": "0.39.0",
|
||||||
"license": "SEE LICENSE IN LICENSE.md",
|
"license": "SEE LICENSE IN LICENSE.md",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"element-ui": "~2.15.7",
|
"element-ui": "~2.15.7",
|
||||||
@@ -45822,7 +45822,7 @@
|
|||||||
},
|
},
|
||||||
"packages/editor-ui": {
|
"packages/editor-ui": {
|
||||||
"name": "n8n-editor-ui",
|
"name": "n8n-editor-ui",
|
||||||
"version": "0.164.2",
|
"version": "0.165.0",
|
||||||
"license": "SEE LICENSE IN LICENSE.md",
|
"license": "SEE LICENSE IN LICENSE.md",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/autocomplete": "^6.1.0",
|
"@codemirror/autocomplete": "^6.1.0",
|
||||||
@@ -45854,8 +45854,8 @@
|
|||||||
"lodash.set": "^4.3.2",
|
"lodash.set": "^4.3.2",
|
||||||
"luxon": "~2.3.0",
|
"luxon": "~2.3.0",
|
||||||
"monaco-editor": "^0.30.1",
|
"monaco-editor": "^0.30.1",
|
||||||
"n8n-design-system": "~0.38.0",
|
"n8n-design-system": "~0.39.0",
|
||||||
"n8n-workflow": "~0.120.0",
|
"n8n-workflow": "~0.121.0",
|
||||||
"normalize-wheel": "^1.0.1",
|
"normalize-wheel": "^1.0.1",
|
||||||
"prismjs": "^1.17.1",
|
"prismjs": "^1.17.1",
|
||||||
"quill": "2.0.0-dev.4",
|
"quill": "2.0.0-dev.4",
|
||||||
@@ -46331,7 +46331,7 @@
|
|||||||
},
|
},
|
||||||
"packages/node-dev": {
|
"packages/node-dev": {
|
||||||
"name": "n8n-node-dev",
|
"name": "n8n-node-dev",
|
||||||
"version": "0.77.0",
|
"version": "0.78.0",
|
||||||
"license": "SEE LICENSE IN LICENSE.md",
|
"license": "SEE LICENSE IN LICENSE.md",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@oclif/command": "^1.5.18",
|
"@oclif/command": "^1.5.18",
|
||||||
@@ -46339,8 +46339,8 @@
|
|||||||
"change-case": "^4.1.1",
|
"change-case": "^4.1.1",
|
||||||
"fast-glob": "^3.2.5",
|
"fast-glob": "^3.2.5",
|
||||||
"inquirer": "^7.0.1",
|
"inquirer": "^7.0.1",
|
||||||
"n8n-core": "~0.138.0",
|
"n8n-core": "~0.139.0",
|
||||||
"n8n-workflow": "~0.120.0",
|
"n8n-workflow": "~0.121.0",
|
||||||
"oauth-1.0a": "^2.2.6",
|
"oauth-1.0a": "^2.2.6",
|
||||||
"replace-in-file": "^6.0.0",
|
"replace-in-file": "^6.0.0",
|
||||||
"request": "^2.88.2",
|
"request": "^2.88.2",
|
||||||
@@ -46362,7 +46362,7 @@
|
|||||||
},
|
},
|
||||||
"packages/nodes-base": {
|
"packages/nodes-base": {
|
||||||
"name": "n8n-nodes-base",
|
"name": "n8n-nodes-base",
|
||||||
"version": "0.196.0",
|
"version": "0.197.0",
|
||||||
"license": "SEE LICENSE IN LICENSE.md",
|
"license": "SEE LICENSE IN LICENSE.md",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@kafkajs/confluent-schema-registry": "1.0.6",
|
"@kafkajs/confluent-schema-registry": "1.0.6",
|
||||||
@@ -46401,7 +46401,7 @@
|
|||||||
"mqtt": "4.2.6",
|
"mqtt": "4.2.6",
|
||||||
"mssql": "^8.1.2",
|
"mssql": "^8.1.2",
|
||||||
"mysql2": "~2.3.0",
|
"mysql2": "~2.3.0",
|
||||||
"n8n-core": "~0.138.0",
|
"n8n-core": "~0.139.0",
|
||||||
"node-html-markdown": "^1.1.3",
|
"node-html-markdown": "^1.1.3",
|
||||||
"node-ssh": "^12.0.0",
|
"node-ssh": "^12.0.0",
|
||||||
"nodemailer": "^6.7.1",
|
"nodemailer": "^6.7.1",
|
||||||
@@ -46456,7 +46456,7 @@
|
|||||||
"eslint-plugin-n8n-nodes-base": "^1.10.0",
|
"eslint-plugin-n8n-nodes-base": "^1.10.0",
|
||||||
"gulp": "^4.0.0",
|
"gulp": "^4.0.0",
|
||||||
"jest": "^27.4.7",
|
"jest": "^27.4.7",
|
||||||
"n8n-workflow": "~0.120.0",
|
"n8n-workflow": "~0.121.0",
|
||||||
"ts-jest": "^27.1.3",
|
"ts-jest": "^27.1.3",
|
||||||
"tslint": "^6.1.2",
|
"tslint": "^6.1.2",
|
||||||
"typescript": "~4.8.0"
|
"typescript": "~4.8.0"
|
||||||
@@ -47493,7 +47493,7 @@
|
|||||||
},
|
},
|
||||||
"packages/workflow": {
|
"packages/workflow": {
|
||||||
"name": "n8n-workflow",
|
"name": "n8n-workflow",
|
||||||
"version": "0.120.0",
|
"version": "0.121.0",
|
||||||
"license": "SEE LICENSE IN LICENSE.md",
|
"license": "SEE LICENSE IN LICENSE.md",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@n8n_io/riot-tmpl": "^1.0.1",
|
"@n8n_io/riot-tmpl": "^1.0.1",
|
||||||
@@ -72168,10 +72168,10 @@
|
|||||||
"lodash.split": "^4.4.2",
|
"lodash.split": "^4.4.2",
|
||||||
"lodash.unset": "^4.5.2",
|
"lodash.unset": "^4.5.2",
|
||||||
"mysql2": "~2.3.0",
|
"mysql2": "~2.3.0",
|
||||||
"n8n-core": "~0.138.0",
|
"n8n-core": "~0.139.0",
|
||||||
"n8n-editor-ui": "~0.164.2",
|
"n8n-editor-ui": "~0.165.0",
|
||||||
"n8n-nodes-base": "~0.196.0",
|
"n8n-nodes-base": "~0.197.0",
|
||||||
"n8n-workflow": "~0.120.0",
|
"n8n-workflow": "~0.121.0",
|
||||||
"nodemailer": "^6.7.1",
|
"nodemailer": "^6.7.1",
|
||||||
"nodemon": "^2.0.2",
|
"nodemon": "^2.0.2",
|
||||||
"oauth-1.0a": "^2.2.6",
|
"oauth-1.0a": "^2.2.6",
|
||||||
@@ -73061,7 +73061,7 @@
|
|||||||
"jest": "^27.4.7",
|
"jest": "^27.4.7",
|
||||||
"lodash.get": "^4.4.2",
|
"lodash.get": "^4.4.2",
|
||||||
"mime-types": "^2.1.27",
|
"mime-types": "^2.1.27",
|
||||||
"n8n-workflow": "~0.120.0",
|
"n8n-workflow": "~0.121.0",
|
||||||
"oauth-1.0a": "^2.2.6",
|
"oauth-1.0a": "^2.2.6",
|
||||||
"p-cancelable": "^2.0.0",
|
"p-cancelable": "^2.0.0",
|
||||||
"qs": "^6.10.1",
|
"qs": "^6.10.1",
|
||||||
@@ -74054,8 +74054,8 @@
|
|||||||
"lodash.set": "^4.3.2",
|
"lodash.set": "^4.3.2",
|
||||||
"luxon": "~2.3.0",
|
"luxon": "~2.3.0",
|
||||||
"monaco-editor": "^0.30.1",
|
"monaco-editor": "^0.30.1",
|
||||||
"n8n-design-system": "~0.38.0",
|
"n8n-design-system": "~0.39.0",
|
||||||
"n8n-workflow": "~0.120.0",
|
"n8n-workflow": "~0.121.0",
|
||||||
"normalize-wheel": "^1.0.1",
|
"normalize-wheel": "^1.0.1",
|
||||||
"prismjs": "^1.17.1",
|
"prismjs": "^1.17.1",
|
||||||
"quill": "2.0.0-dev.4",
|
"quill": "2.0.0-dev.4",
|
||||||
@@ -74411,8 +74411,8 @@
|
|||||||
"change-case": "^4.1.1",
|
"change-case": "^4.1.1",
|
||||||
"fast-glob": "^3.2.5",
|
"fast-glob": "^3.2.5",
|
||||||
"inquirer": "^7.0.1",
|
"inquirer": "^7.0.1",
|
||||||
"n8n-core": "~0.138.0",
|
"n8n-core": "~0.139.0",
|
||||||
"n8n-workflow": "~0.120.0",
|
"n8n-workflow": "~0.121.0",
|
||||||
"oauth-1.0a": "^2.2.6",
|
"oauth-1.0a": "^2.2.6",
|
||||||
"replace-in-file": "^6.0.0",
|
"replace-in-file": "^6.0.0",
|
||||||
"request": "^2.88.2",
|
"request": "^2.88.2",
|
||||||
@@ -74491,8 +74491,8 @@
|
|||||||
"mqtt": "4.2.6",
|
"mqtt": "4.2.6",
|
||||||
"mssql": "^8.1.2",
|
"mssql": "^8.1.2",
|
||||||
"mysql2": "~2.3.0",
|
"mysql2": "~2.3.0",
|
||||||
"n8n-core": "~0.138.0",
|
"n8n-core": "~0.139.0",
|
||||||
"n8n-workflow": "~0.120.0",
|
"n8n-workflow": "~0.121.0",
|
||||||
"node-html-markdown": "^1.1.3",
|
"node-html-markdown": "^1.1.3",
|
||||||
"node-ssh": "^12.0.0",
|
"node-ssh": "^12.0.0",
|
||||||
"nodemailer": "^6.7.1",
|
"nodemailer": "^6.7.1",
|
||||||
|
|||||||
@@ -144,6 +144,27 @@ export class HttpRequestV3 implements INodeType {
|
|||||||
noDataExpression: true,
|
noDataExpression: true,
|
||||||
description: 'Whether the request has query params or not',
|
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',
|
displayName: 'Query Parameters',
|
||||||
name: 'queryParameters',
|
name: 'queryParameters',
|
||||||
@@ -151,6 +172,7 @@ export class HttpRequestV3 implements INodeType {
|
|||||||
displayOptions: {
|
displayOptions: {
|
||||||
show: {
|
show: {
|
||||||
sendQuery: [true],
|
sendQuery: [true],
|
||||||
|
specifyQuery: ['keypair'],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
typeOptions: {
|
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',
|
displayName: 'Send Headers',
|
||||||
name: 'sendHeaders',
|
name: 'sendHeaders',
|
||||||
@@ -194,6 +228,27 @@ export class HttpRequestV3 implements INodeType {
|
|||||||
noDataExpression: true,
|
noDataExpression: true,
|
||||||
description: 'Whether the request has headers or not',
|
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',
|
displayName: 'Header Parameters',
|
||||||
name: 'headerParameters',
|
name: 'headerParameters',
|
||||||
@@ -201,6 +256,7 @@ export class HttpRequestV3 implements INodeType {
|
|||||||
displayOptions: {
|
displayOptions: {
|
||||||
show: {
|
show: {
|
||||||
sendHeaders: [true],
|
sendHeaders: [true],
|
||||||
|
specifyHeaders: ['keypair'],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
typeOptions: {
|
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',
|
displayName: 'Send Body',
|
||||||
name: 'sendBody',
|
name: 'sendBody',
|
||||||
@@ -865,6 +933,9 @@ export class HttpRequestV3 implements INodeType {
|
|||||||
itemIndex,
|
itemIndex,
|
||||||
[],
|
[],
|
||||||
) as [{ name: string; value: string }];
|
) 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 sendBody = this.getNodeParameter('sendBody', itemIndex, false) as boolean;
|
||||||
const bodyContentType = this.getNodeParameter('contentType', itemIndex, '') as string;
|
const bodyContentType = this.getNodeParameter('contentType', itemIndex, '') as string;
|
||||||
const specifyBody = this.getNodeParameter('specifyBody', itemIndex, '') as string;
|
const specifyBody = this.getNodeParameter('specifyBody', itemIndex, '') as string;
|
||||||
@@ -880,6 +951,8 @@ export class HttpRequestV3 implements INodeType {
|
|||||||
itemIndex,
|
itemIndex,
|
||||||
[],
|
[],
|
||||||
) as [{ name: string; value: string }];
|
) as [{ name: string; value: string }];
|
||||||
|
const specifyHeaders = this.getNodeParameter('specifyHeaders', itemIndex, 'keypair') as string;
|
||||||
|
const jsonHeadersParameter = this.getNodeParameter('jsonHeaders', itemIndex, '') as string;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
redirect,
|
redirect,
|
||||||
@@ -1053,15 +1126,54 @@ export class HttpRequestV3 implements INodeType {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get parameters defined in the UI
|
||||||
if (sendQuery && queryParameters) {
|
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) {
|
if (sendHeaders && headerParameters) {
|
||||||
requestOptions.headers = await headerParameters.reduce(
|
if (specifyHeaders === 'keypair') {
|
||||||
parmetersToKeyValue,
|
requestOptions.headers = await headerParameters.reduce(
|
||||||
Promise.resolve({}),
|
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') {
|
if (autoDetectResponseFormat || responseFormat === 'file') {
|
||||||
|
|||||||
Reference in New Issue
Block a user