Skip to content

Commit

Permalink
fix: Do not trigger sendAndWait response on bot visit if response typ…
Browse files Browse the repository at this point in the history
…e is approval (#13792)
  • Loading branch information
michael-radency authored Mar 11, 2025
1 parent 899f6c9 commit 526a2e4
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 1 deletion.
28 changes: 28 additions & 0 deletions packages/nodes-base/utils/sendAndWait/test/util.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,34 @@ describe('Send and Wait utils tests', () => {

expect(result.workflowData).toEqual([[{ json: { data: { 'test 1': 'test value' } } }]]);
});

it('should return noWebhookResponse if method GET and user-agent is bot', async () => {
mockWebhookFunctions.getRequestObject.mockReturnValue({
method: 'GET',
headers: {
'user-agent': 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
},
query: { approved: 'false' },
} as any);

const send = jest.fn();

mockWebhookFunctions.getResponseObject.mockReturnValue({
send,
} as any);

mockWebhookFunctions.getNodeParameter.mockImplementation((parameterName: string) => {
const params: { [key: string]: any } = {
responseType: 'approval',
};
return params[parameterName];
});

const result = await sendAndWaitWebhook.call(mockWebhookFunctions);

expect(send).toHaveBeenCalledWith('');
expect(result).toEqual({ noWebhookResponse: true });
});
});
});

Expand Down
10 changes: 9 additions & 1 deletion packages/nodes-base/utils/sendAndWait/utils.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import isbot from 'isbot';
import {
NodeOperationError,
SEND_AND_WAIT_OPERATION,
Expand Down Expand Up @@ -324,11 +325,18 @@ const getFormResponseCustomizations = (context: IWebhookFunctions) => {
export async function sendAndWaitWebhook(this: IWebhookFunctions) {
const method = this.getRequestObject().method;
const res = this.getResponseObject();
const req = this.getRequestObject();

const responseType = this.getNodeParameter('responseType', 'approval') as
| 'approval'
| 'freeText'
| 'customForm';

if (responseType === 'approval' && isbot(req.headers['user-agent'])) {
res.send('');
return { noWebhookResponse: true };
}

if (responseType === 'freeText') {
if (method === 'GET') {
const { formTitle, formDescription, buttonLabel } = getFormResponseCustomizations(this);
Expand Down Expand Up @@ -424,7 +432,7 @@ export async function sendAndWaitWebhook(this: IWebhookFunctions) {
}
}

const query = this.getRequestObject().query as { approved: 'false' | 'true' };
const query = req.query as { approved: 'false' | 'true' };
const approved = query.approved === 'true';
return {
webhookResponse: ACTION_RECORDED_PAGE,
Expand Down

0 comments on commit 526a2e4

Please sign in to comment.