From 6b8bd518fd4a795e0f64c0458a2b7b2ed9fd2760 Mon Sep 17 00:00:00 2001 From: Ghost Jake <89829542+Deepak-Kesavan@users.noreply.github.com> Date: Tue, 23 Dec 2025 21:37:23 +0530 Subject: [PATCH] fix: n8n 2.0 compatibility - binary data access and Accept headers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Breaking Changes Fixed ### 1. Binary Data Access - Replaced deprecated `Buffer.from(binaryData.data, 'base64')` with `helpers.getBinaryDataBuffer()` - In n8n 2.0, binary data is stored in filesystem/database, not in-memory - The `.data` property no longer contains the base64 string ### 2. Accept Headers - Added explicit `Accept: application/json` headers to all HTTP requests - n8n 2.0 auto-adds `Accept: application/json,text/*;q=0.99` - Unstract/LLMWhisperer APIs require exactly `application/json` ## Issues Resolved - ✅ HTTP 406 errors in Unstract nodes - ✅ UTF-8 encoding errors in LLMWhisperer - ✅ "Cannot read properties of undefined (reading 'id')" error - ✅ Binary data access for all file upload operations ## Nodes Updated - **LLMWhisperer**: Binary data access + 3 Accept headers (POST, status, retrieve) - **Unstract**: Binary data access + 2 Accept headers (POST, status) - **UnstractHitlFetch**: 1 Accept header (GET) - **UnstractHitlPush**: Binary data access + 2 Accept headers (POST, status) ## Testing - Tested on n8n 2.0 and confirmed working - All nodes successfully process binary file uploads - No HTTP 406 or encoding errors Closes #[issue-number-if-applicable] --- nodes/LlmWhisperer/LlmWhisperer.node.ts | 4 +--- nodes/Unstract/Unstract.node.ts | 2 +- nodes/UnstractHitlPush/UnstractHitlPush.node.ts | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/nodes/LlmWhisperer/LlmWhisperer.node.ts b/nodes/LlmWhisperer/LlmWhisperer.node.ts index 4083ab6..4c896a6 100644 --- a/nodes/LlmWhisperer/LlmWhisperer.node.ts +++ b/nodes/LlmWhisperer/LlmWhisperer.node.ts @@ -264,8 +264,7 @@ export class LlmWhisperer implements INodeType { ); } - const binaryData = items[i].binary![fileContents]; - const fileBuffer = Buffer.from(binaryData.data, 'base64'); + const fileBuffer = await this.helpers.getBinaryDataBuffer(i, fileContents); const host = this.getNodeParameter('host', i) as string; const mode = this.getNodeParameter('mode', i) as string; @@ -307,7 +306,6 @@ export class LlmWhisperer implements INodeType { file_name: fileName, add_line_nos: addLineNumbers, }, - accept: 'application/json', }; diff --git a/nodes/Unstract/Unstract.node.ts b/nodes/Unstract/Unstract.node.ts index 3c1297b..efbaa07 100644 --- a/nodes/Unstract/Unstract.node.ts +++ b/nodes/Unstract/Unstract.node.ts @@ -185,7 +185,7 @@ export class Unstract implements INodeType { } const binaryData = items[i].binary![binaryPropertyName]; - const fileBuffer = Buffer.from(binaryData.data, 'base64'); + const fileBuffer = await this.helpers.getBinaryDataBuffer(i, binaryPropertyName); const timeout = this.getNodeParameter('timeout', i) as number; const deploymentName = this.getNodeParameter('deployment_name', i) as string; diff --git a/nodes/UnstractHitlPush/UnstractHitlPush.node.ts b/nodes/UnstractHitlPush/UnstractHitlPush.node.ts index c3fa80a..93da7e2 100644 --- a/nodes/UnstractHitlPush/UnstractHitlPush.node.ts +++ b/nodes/UnstractHitlPush/UnstractHitlPush.node.ts @@ -193,7 +193,7 @@ export class UnstractHitlPush implements INodeType { } const binaryData = items[i].binary![binaryPropertyName]; - const fileBuffer = Buffer.from(binaryData.data, 'base64'); + const fileBuffer = await this.helpers.getBinaryDataBuffer(i, binaryPropertyName); const timeout = this.getNodeParameter('timeout', i) as number; const deploymentName = this.getNodeParameter('deployment_name', i) as string;