From 6ccab3eaaa883e17d00607e180e14edf9ce33688 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?= =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?= =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?= Date: Mon, 19 Jun 2023 13:54:56 +0200 Subject: [PATCH] feat(Webhook Node): Stream binary response in `lastNode.firstEntryBinary` mode (#6463) --- packages/cli/src/WebhookHelpers.ts | 12 +++++++----- packages/core/src/BinaryDataManager/index.ts | 2 +- packages/core/src/NodeExecuteFunctions.ts | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/cli/src/WebhookHelpers.ts b/packages/cli/src/WebhookHelpers.ts index d1046f35fb..eac808d678 100644 --- a/packages/cli/src/WebhookHelpers.ts +++ b/packages/cli/src/WebhookHelpers.ts @@ -426,7 +426,7 @@ export async function executeWebhook( const binaryData = (response.body as IDataObject)?.binaryData as IBinaryData; if (binaryData?.id) { res.header(response.headers); - const stream = NodeExecuteFunctions.getBinaryStream(binaryData.id); + const stream = BinaryDataManager.getInstance().getBinaryStream(binaryData.id); void pipeline(stream, res).then(() => responseCallback(null, { noWebhookResponse: true }), ); @@ -643,10 +643,12 @@ export async function executeWebhook( if (!didSendResponse) { // Send the webhook response manually res.setHeader('Content-Type', binaryData.mimeType); - const binaryDataBuffer = await BinaryDataManager.getInstance().retrieveBinaryData( - binaryData, - ); - res.end(binaryDataBuffer); + if (binaryData.id) { + const stream = BinaryDataManager.getInstance().getBinaryStream(binaryData.id); + await pipeline(stream, res); + } else { + res.end(Buffer.from(binaryData.data, BINARY_ENCODING)); + } responseCallback(null, { noWebhookResponse: true, diff --git a/packages/core/src/BinaryDataManager/index.ts b/packages/core/src/BinaryDataManager/index.ts index bed5a08b10..54ab8bc110 100644 --- a/packages/core/src/BinaryDataManager/index.ts +++ b/packages/core/src/BinaryDataManager/index.ts @@ -121,7 +121,7 @@ export class BinaryDataManager { throw new Error('Storage mode used to store binary data not available'); } - async retrieveBinaryData(binaryData: IBinaryData): Promise { + async getBinaryDataBuffer(binaryData: IBinaryData): Promise { if (binaryData.id) { return this.retrieveBinaryDataByIdentifier(binaryData.id); } diff --git a/packages/core/src/NodeExecuteFunctions.ts b/packages/core/src/NodeExecuteFunctions.ts index 13323794b9..38409283e5 100644 --- a/packages/core/src/NodeExecuteFunctions.ts +++ b/packages/core/src/NodeExecuteFunctions.ts @@ -917,7 +917,7 @@ export async function getBinaryDataBuffer( inputIndex: number, ): Promise { const binaryData = inputData.main[inputIndex]![itemIndex]!.binary![propertyName]!; - return BinaryDataManager.getInstance().retrieveBinaryData(binaryData); + return BinaryDataManager.getInstance().getBinaryDataBuffer(binaryData); } /**