From c610c3af3eafd05e2b9e78c4e66dba588c4852a1 Mon Sep 17 00:00:00 2001 From: Guillaume Jacquart Date: Fri, 8 Aug 2025 20:37:35 +0200 Subject: [PATCH] fix(core): Remove temporary uploaded files from webhook calls (#18128) Co-authored-by: Danny Martini --- packages/nodes-base/nodes/Webhook/Webhook.node.ts | 5 ++++- packages/nodes-base/nodes/Webhook/test/Webhook.test.ts | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/nodes-base/nodes/Webhook/Webhook.node.ts b/packages/nodes-base/nodes/Webhook/Webhook.node.ts index 4f449d0d45..1f5040a4b2 100644 --- a/packages/nodes-base/nodes/Webhook/Webhook.node.ts +++ b/packages/nodes-base/nodes/Webhook/Webhook.node.ts @@ -1,6 +1,6 @@ /* eslint-disable n8n-nodes-base/node-execute-block-wrong-error-thrown */ import { createWriteStream } from 'fs'; -import { stat } from 'fs/promises'; +import { rm, stat } from 'fs/promises'; import isbot from 'isbot'; import type { IWebhookFunctions, @@ -363,6 +363,9 @@ export class Webhook extends Node { file.mimetype, ); + // Delete original file to prevent tmp directory from growing too large + await rm(file.filepath, { force: true }); + count += 1; } } diff --git a/packages/nodes-base/nodes/Webhook/test/Webhook.test.ts b/packages/nodes-base/nodes/Webhook/test/Webhook.test.ts index b8c2d3d82d..680ceb0977 100644 --- a/packages/nodes-base/nodes/Webhook/test/Webhook.test.ts +++ b/packages/nodes-base/nodes/Webhook/test/Webhook.test.ts @@ -1,10 +1,14 @@ import { NodeTestHarness } from '@nodes-testing/node-test-harness'; import type { Request, Response } from 'express'; +import fs from 'fs/promises'; import { mock } from 'jest-mock-extended'; import type { IWebhookFunctions } from 'n8n-workflow'; import { Webhook } from '../Webhook.node'; +jest.mock('fs/promises'); +const mockFs = jest.mocked(fs); + describe('Test Webhook Node', () => { new NodeTestHarness().setupTests(); @@ -33,11 +37,12 @@ describe('Test Webhook Node', () => { it('should handle when files are present', async () => { req.body = { - files: { file1: {} }, + files: { file1: { filepath: '/tmp/test.txt' } }, }; const returnData = await node.webhook(context); expect(returnData.workflowData?.[0][0].binary).not.toBeUndefined(); expect(context.nodeHelpers.copyBinaryFile).toHaveBeenCalled(); + expect(mockFs.rm).toHaveBeenCalledWith('/tmp/test.txt', { force: true }); }); });