Addglobal timeout setting for all http requests except for http request node (#1650)

* Added a global timeout setting for all http requests except for http
node.

The http node explicitly sets a timeout that overrides the default
value.

This is to prevent behaviors when users were expecting that their quests
could take a very long time to execute.

* Removed unnecessary typing from code
This commit is contained in:
Omar Ajoue 2021-04-17 15:15:33 +02:00 committed by GitHub
parent a7394daa6b
commit 882e2f8e74
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 7 deletions

View file

@ -52,6 +52,9 @@ import { createHmac } from 'crypto';
import { fromBuffer } from 'file-type';
import { lookup } from 'mime-types';
const requestPromiseWithDefaults = requestPromise.defaults({
timeout: 300000, // 5 minutes
});
/**
* Takes a buffer and converts it into the format n8n uses. It encodes the binary data as
@ -577,7 +580,7 @@ export function getExecutePollFunctions(workflow: Workflow, node: INode, additio
},
helpers: {
prepareBinaryData,
request: requestPromise,
request: requestPromiseWithDefaults,
requestOAuth2(this: IAllExecuteFunctions, credentialsType: string, requestOptions: OptionsWithUri | requestPromise.RequestPromiseOptions, oAuth2Options?: IOAuth2Options): Promise<any> { // tslint:disable-line:no-any
return requestOAuth2.call(this, credentialsType, requestOptions, node, additionalData, oAuth2Options);
},
@ -643,7 +646,7 @@ export function getExecuteTriggerFunctions(workflow: Workflow, node: INode, addi
},
helpers: {
prepareBinaryData,
request: requestPromise,
request: requestPromiseWithDefaults,
requestOAuth2(this: IAllExecuteFunctions, credentialsType: string, requestOptions: OptionsWithUri | requestPromise.RequestPromiseOptions, oAuth2Options?: IOAuth2Options): Promise<any> { // tslint:disable-line:no-any
return requestOAuth2.call(this, credentialsType, requestOptions, node, additionalData, oAuth2Options);
},
@ -739,7 +742,7 @@ export function getExecuteFunctions(workflow: Workflow, runExecutionData: IRunEx
prepareOutputData: NodeHelpers.prepareOutputData,
helpers: {
prepareBinaryData,
request: requestPromise,
request: requestPromiseWithDefaults,
requestOAuth2(this: IAllExecuteFunctions, credentialsType: string, requestOptions: OptionsWithUri | requestPromise.RequestPromiseOptions, oAuth2Options?: IOAuth2Options): Promise<any> { // tslint:disable-line:no-any
return requestOAuth2.call(this, credentialsType, requestOptions, node, additionalData, oAuth2Options);
},
@ -837,7 +840,7 @@ export function getExecuteSingleFunctions(workflow: Workflow, runExecutionData:
},
helpers: {
prepareBinaryData,
request: requestPromise,
request: requestPromiseWithDefaults,
requestOAuth2(this: IAllExecuteFunctions, credentialsType: string, requestOptions: OptionsWithUri | requestPromise.RequestPromiseOptions, oAuth2Options?: IOAuth2Options): Promise<any> { // tslint:disable-line:no-any
return requestOAuth2.call(this, credentialsType, requestOptions, node, additionalData, oAuth2Options);
},
@ -893,7 +896,7 @@ export function getLoadOptionsFunctions(workflow: Workflow, node: INode, additio
return additionalData.restApiUrl;
},
helpers: {
request: requestPromise,
request: requestPromiseWithDefaults,
requestOAuth2(this: IAllExecuteFunctions, credentialsType: string, requestOptions: OptionsWithUri | requestPromise.RequestPromiseOptions, oAuth2Options?: IOAuth2Options): Promise<any> { // tslint:disable-line:no-any
return requestOAuth2.call(this, credentialsType, requestOptions, node, additionalData, oAuth2Options);
},
@ -963,7 +966,7 @@ export function getExecuteHookFunctions(workflow: Workflow, node: INode, additio
return workflow.getStaticData(type, node);
},
helpers: {
request: requestPromise,
request: requestPromiseWithDefaults,
requestOAuth2(this: IAllExecuteFunctions, credentialsType: string, requestOptions: OptionsWithUri | requestPromise.RequestPromiseOptions, oAuth2Options?: IOAuth2Options): Promise<any> { // tslint:disable-line:no-any
return requestOAuth2.call(this, credentialsType, requestOptions, node, additionalData, oAuth2Options);
},
@ -1063,7 +1066,7 @@ export function getExecuteWebhookFunctions(workflow: Workflow, node: INode, addi
prepareOutputData: NodeHelpers.prepareOutputData,
helpers: {
prepareBinaryData,
request: requestPromise,
request: requestPromiseWithDefaults,
requestOAuth2(this: IAllExecuteFunctions, credentialsType: string, requestOptions: OptionsWithUri | requestPromise.RequestPromiseOptions, oAuth2Options?: IOAuth2Options): Promise<any> { // tslint:disable-line:no-any
return requestOAuth2.call(this, credentialsType, requestOptions, node, additionalData, oAuth2Options);
},

View file

@ -690,6 +690,8 @@ export class HttpRequest implements INodeType {
}
if (options.timeout !== undefined) {
requestOptions.timeout = options.timeout as number;
} else {
requestOptions.timeout = 3600000; // 1 hour
}
if (options.useQueryString === true) {